Linux
視窗管理器中的環境變數未傳播到 X 客戶端
每當我啟動我的 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 解決了這個問題!