我想在 Wayland 下运行 Gnome 时为每个用户设置一个环境变量。在 X11 下运行 Gnome 时不应设置该变量。具体来说,假设我想将变量设置为运行 Wayland 时的QT_QPA_PLATFORM
值。wayland
我尝试放入QT_QPA_PLATFORM=wayland
(/usr/share/gdm/env.d/wayland-env
以下文档提及这里)(希望这仅在 Wayland 下有效)但这似乎没有效果,即使在 Wayland 下:重新启动后,在 Gnome / Wayland 下登录,打开终端:echo $QT_QPA_PLATFORM
不会产生任何结果。
我使用新安装的 Debian Bullseye。
答案1
这应该 在 debian 下工作:
您可以创建一个简单的脚本来确定机器是否在 X11 或 Wayland 下运行:
loginctl show-session "$XDG_SESSION_ID" -p Type --value
可以返回X11
or Wayland
(也可以返回tty
)
所以:
if [[ $(loginctl show-session "$XDG_SESSION_ID" -p Type --value) = 'wayland' ]]; then
export QT_QPA_PLATFORM=wayland
fi
您还可以检查您的会话是否使用$DISPLAY
或$WAYLAND_DISPLAY
作为其环境变量之一。
在 bash 上,您可以放置希望所有用户登录后执行的脚本/etc/profile.d
。不要忘记使其可执行并确保它具有扩展名.sh
。
答案2
我偶然发现了一个关于系统这让我找到了一个可能的答案。 (很抱歉回答我自己的问题。)
我仍然不清楚启动时到底在什么条件下执行哪些文件,但至少在我的系统上,该文件/etc/profile
似乎是在启动 Gnome 时(包括运行 Wayland 时)执行的。它依次执行/etc/profile.d/
.以文件为例im-config_wayland.sh
,我创建了一个文件/etc/profile.d/wayland.sh
,根据 Wayland 是否运行来有条件地设置我想要的环境变量。这是它的内容。
test "$XDG_SESSION_TYPE" = 'wayland' || return
export QT_QPA_PLATFORM=wayland
我怀疑存在更优雅的解决方案,例如,在运行非图形 shell 时不会设置这些变量。但至少,这种方法暂时解决了我的具体问题......