如何在Debian下仅在运行Wayland时为系统的所有用户设置环境变量?

如何在Debian下仅在运行Wayland时为系统的所有用户设置环境变量?

我想在 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

可以返回X11or 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 时不会设置这些变量。但至少,这种方法暂时解决了我的具体问题......

相关内容