Skip to content

Commit a38cb53

Browse files
committed
qubes-gui-runner: load environment variables from systemd earlier
qubes-session previously loaded environment variables from `systemctl --user show-environment`, so that variables set using systemd environment generators would be present in the user session. However, doing this meant any environment variables defined or augmented by scripts under /etc/profile.d could be clobbered by versions of those same variables from the systemd user instance, resulting in application misbehavior in some instances. To fix this, load all environment variables from systemd's user instance in /etc/profile.d itself. Fixes: QubesOS/qubes-issues#10299
1 parent b1c52ac commit a38cb53

5 files changed

Lines changed: 15 additions & 10 deletions

File tree

Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,8 @@ install-common:
194194
$(DESTDIR)/etc/X11/xorg-qubes-x11vnc.conf.template
195195
install -m 0644 -D appvm-scripts/etc/systemd/system/lightdm.service.d/qubes-guivm-vnc.conf \
196196
$(DESTDIR)$(UNITDIR)/lightdm.service.d/qubes-guivm-vnc.conf
197+
install -m 0644 -D appvm-scripts/etc/profile.d/00-qubes-systemd-env-import.sh \
198+
$(DESTDIR)/etc/profile.d/00-qubes-systemd-env-import.sh
197199
install -m 0644 -D appvm-scripts/etc/profile.d/qubes-gui.sh \
198200
$(DESTDIR)/etc/profile.d/qubes-gui.sh
199201
install -m 0644 -D appvm-scripts/etc/profile.d/qubes-gui.csh \
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/bash
2+
3+
# Import the environment from the systemd user session.
4+
# This is necessary to enable users to configure their
5+
# Qubes environment using the standard environment.d
6+
# facility. Documentation for the facility is at:
7+
# https://www.freedesktop.org/software/systemd/man/environment.d.html
8+
set -a # export all variables
9+
env=$(systemctl --user show-environment) && eval "$env" || exit
10+
set +a
11+
unset env

appvm-scripts/usrbin/qubes-session

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,6 @@
2727

2828
loginctl activate "$XDG_SESSION_ID"
2929

30-
# Now import the environment from the systemd user session.
31-
# This is necessary to enable users to configure their
32-
# Qubes environment using the standard environment.d
33-
# facility. Documentation for the facility is at:
34-
# https://www.freedesktop.org/software/systemd/man/environment.d.html
35-
set -a # export all variables
36-
env=$(systemctl --user show-environment) && eval "$env" || exit
37-
set +a
38-
unset env
39-
4030

4131
if qsvc guivm-gui-agent; then
4232
if [ -e "$HOME/.xinitrc" ]; then

debian/qubes-gui-agent.install

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ etc/X11/Xsession.d/50guivm-windows-prefix
55
etc/X11/xorg-qubes.conf.template
66
etc/profile.d/qubes-gui.sh
77
etc/profile.d/qubes-gui.csh
8+
etc/profile.d/00-qubes-systemd-env-import.sh
89
etc/pam.d/qubes-gui-agent
910
etc/security/limits.d/90-qubes-gui.conf
1011
etc/qubes-rpc/qubes.SetMonitorLayout

rpm_spec/gui-agent.spec.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ rm -f %{name}-%{version}
301301
%attr(0644,root,root) /etc/X11/xorg-qubes.conf.template
302302
/etc/profile.d/qubes-gui.sh
303303
/etc/profile.d/qubes-gui.csh
304+
/etc/profile.d/00-qubes-systemd-env-import.sh
304305
%if 0%{?is_opensuse}
305306
/usr/lib/pam.d/qubes-gui-agent
306307
%else

0 commit comments

Comments
 (0)