Linux

視窗管理器中的環境變數未傳播到 X 客戶端

  • January 30, 2021

每當我啟動我的 BSPWM 會話時,無論我如何啟動它(我已經測試了 LightDM 和 Startx),我發現環境變數在該會話期間沒有按預期傳播到 X 客戶端。

我檢查了 的內容/proc/$( pgrep bspwm )/environ,似乎 BSPWM 程序本身確實具有預期的環境變數。但是,一旦啟動 X 會話,X 客戶端(例如我的終端仿真器)就沒有設置預期的環境變數。

這是一個非常奇怪的問題,我不確定如何調試它。我忽略了任何明顯的配置問題嗎?

這是我非常基本的~/.xinitrc腳本:

#!/bin/sh

# Set a bunch of environment variables
. ~/.config/envrc

# Copy some useful elements from my distro's xinit script
. /etc/X11/xinit/xinitrc.d/50-systemd-user.sh
. /etc/X11/xinit/xinitrc.d/xdg-user-dirs.sh
if test -r $HOME/.nvidia-settings-rc && type -p nvidia-settings > /dev/null
then
   nvidia-settings --load-config-only > /dev/null 2>&1 &
fi

# Load Xresources for various programs
xrdb -I $HOME -merge ~/.Xresources

# Run my window manager
exec /usr/bin/bspwm "$@"

萬一它是相關的,我目前正在使用 Opensuse Tumbleweed,並且我沒有以任何方式調整預設 PAM 配置。而且,據我記得,我在 Herbstluftwm 下的 Debian 上也遇到過這個問題。所以我不認為這是特定於 BSPWM 或特定於 Suse 的問題。

問題原來是我正在執行 Sxhkd(用於伴隨 BSPWM 的熱鍵守護程序)和 Urxvtd 作為 Systemd 使用者服務:

systemctl --user start \
   bspwm-panel.service \
   bspwm-sxhkd.service \
   redshift.service \
   urxvtd.service

我將腳本更改為:

systemctl --user import-environment
systemctl --user start \
   bspwm-panel.service \
   bspwm-sxhkd.service \
   redshift.service \
   urxvtd.service

現在它可以正常工作了。

如果您想將要導入的特定環境變數(例如PATH)列入白名單,您可以編寫systemctl --user import-environment PATH DISPLAY FOO BAR ....

感謝@dirkt 解決了這個問題!

引用自:https://unix.stackexchange.com/questions/631800