我正在尝试测试“真正的” 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 上。极好的!
然而,如果我再次从镜子中选择 gnome-sell 条目,我会GType:MetaWindowX11
告诉我 shell 正在 XWayland 上运行。
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。