窗口管理器中的环境变量不会传播到 X 客户端

窗口管理器中的环境变量不会传播到 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 特定的问题。

答案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 解决了这个问题!

相关内容