![窗口管理器中的环境变量不会传播到 X 客户端](https://linux22.com/image/187204/%E7%AA%97%E5%8F%A3%E7%AE%A1%E7%90%86%E5%99%A8%E4%B8%AD%E7%9A%84%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E4%B8%8D%E4%BC%9A%E4%BC%A0%E6%92%AD%E5%88%B0%20X%20%E5%AE%A2%E6%88%B7%E7%AB%AF.png)
每当我启动 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 特定的问题。
答案1
问题原来是我正在运行 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 解决了这个问题!