真实的 GNOME Wayland 会话

真实的 GNOME Wayland 会话

我正在尝试测试“真正的” Wayland 侏儒会话。我知道并非所有应用程序都可以在 Wayland 上本地运行(为此我们有 XWayland),但至少我希望 GTK+ 应用程序能够这样做。

所以,我创建了一个~/.profile包含

export GDK_BACKEND=wayland
export CLUTTER_BACKEND=wayland

>>> 编辑:您可以添加以下内容来代替上面的内容,~/.profile以使其适用于 X 和 Wayland 会话:

WAY=$(ps -aux | head -n -1 | grep "/usr/bin/gnome-shell --wayland")

if [ -z "$WAY" ]; then
    echo X11
else
    export GDK_BACKEND=wayland
    export CLUTTER_BACKEND=wayland
fi

<<<

然后从我的 GDM 登录屏幕 (Archlinux) 中选择 Wayland 上的 gnome。

准备好后,我启动(例如)nautilus(通常从破折号,而不是从终端),然后打开镜子,选择“窗口”部分,然后单击 nautilus 窗口,我得到GType:MetaWindowWayland它告诉我 Nautilus 实际上正在运行在 Wayland 而不是 XWayland 上。极好的!

GType:MetaWindowWayland

然而,如果我再次从镜子中选择 gnome-sell 条目,我会GType:MetaWindowX11告诉我 shell 正在 XWayland 上运行。

G类型:MetaWindowX11

Mutter 似乎在 Wayland 上运行(例如 X 和 W 之间的剪贴板仍然不起作用),我登录后启动的所有 GTK+ 应用程序也在 Wayland 上运行(GType:MetaWindowWayland),但是 gnome-shell 仍然在 X11 上。

~/.profile我的猜测是 gnome-shell在启动会话时不会考虑。也许是因为它是由系统启动而不是由用户启动?所以也许我必须添加

export GDK_BACKEND=wayland
export CLUTTER_BACKEND=wayland

别的地方?

答案1

仅当启动支持它们的 shell 时,才会获取.bashrc.bash_profile和类似文件。.profile

反过来,只有当这样的 shell 用于启动程序时,环境变量才会传播到新启动的程序。

但程序启动器没有理由必须通过获取该文件的 shell 来启动程序。

特别是许多现代程序启动器通过systemd(用户切片)启动程序,据我所知这涉及Gnome。

有很多理由可以解释为什么这是有道理的,但我不会深入讨论,因为它偏离了主题。

据我所知,在现代Linux系统上设置环境变量的唯一可靠方法是通过environment.d。

有些地方还会向您推荐 PAM env,但这更多的是一种意想不到的副作用,而不是一个有意的功能,应该避免,并且将来可能会停止工作。

为此创建一个environment.d配置文件:

.config/environment.d/user-vars.conf

在其中设置环境变量,例如:

QT_QPA_PLATFORM=wayland
CLUTTER_BACKEND=wayland
#Makes some games not work, better to run them through XWayland
#SDL_VIDEODRIVER=wayland
ECORE_EVAS_ENGINE=wayland_egl
ELM_ENGINE=wayland_egl

您可以用来systemctl --user show-environment查看新启动的应用程序将具有的所有环境变量。

man environment.d

唯一的主要缺点是我不知道如何“会话中重新加载”environment.d 以便将更改应用于新启动的程序。因此,要使更改生效,您需要重新启动会话(即完全注销并再次登录或在新的 TTY 上登录,而不仅仅是暂停您的用户会话)。

如果我找到一种方法,我会将其发布在这里。


PS:我有一个有点时髦的系统,其中一些但不是所有程序都是通过 systemd 启动的。这不应该适用于你(当你运行 Gnome 时)。但如果有人有同样的问题,我通过包含export $(systemctl --user show-environment)在我的.bash_profile.但如果您没有一个非常“拼凑”的系统,则不需要这样做。

答案2

我认为你必须添加它.bashrc也适用于非登录 shell。

答案3

回答太晚了,但这已经在"unanswered questions"清理中了。

GDK_BACKEND=wayland

如果您从 Wayland gnome 会话中的终端启动应用程序就足够了。

你可以通过 tty 启动 gnome-shell:

gnome-shell --wayland --display_server

如果您已经有一个正在运行的实例,您应该在命令前加上 dbus-run-session 前缀:

dbus-run-session gnome-shell --wayland --display_server

Fedora 的所有最新版本默认都是 wayland。

相关内容