我正在运行 Fedora 33:
Linux mainoumi 5.14.18-100.fc33.x86_64 #1 SMP Fri Nov 12 17:38:44 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
我有一台运行 Xming(X11 服务器)7.7.0.85 和 PuTTy .78(都是最新的)的 PC。
我的 Linux 机器的 .cshrc 将我的 DISPLAY 设置为指向我的 PC 的 Xserver 192.168.11.17:0.0
,.
当我启动xeyes
oremacs
时,该窗口在我的 PC 上正确显示,但是当我启动 evince 时,由于某种原因它显示在 Linux 笔记本电脑上。 ldd /usr/bin/evince
显示它基于 X11 库。
我跑了strace /usr/bin/evince Hello.pdf >& evince.strace
我看到以下文字:
connect(11, {sa_family=AF_INET, sin_port=htons(6000), sin_addr=inet_addr("192.168.11.17")}, 16) = 0
X-server的端口号确实是6000,而且地址是正确的,看来是在尝试正确连接!
为什么不呢?
您需要设置
GDK_BACKEND=x11
强制它使用 x11 而不是 Wayland。Wayland 是 X11 事实上的继任者,但使用的架构截然不同。您可以在此处阅读相关内容:Wayland,第 3 章。Wayland 架构:X 与 Wayland 架构。对于我们的目的来说至关重要的是,Wayland 没有等同于 X11 的网络重定向,并且该
DISPLAY
变量没有意义。Wayland 为本身不理解 Wayland 的 X11 应用程序提供支持(记录在Wayland,第 5 章 X11 应用程序支持)。但是,许多应用程序——包括使用 GTK 工具包的现代应用程序——都是使用原生 Wayland 支持构建的,并且通常在 Wayland 可用时将其作为“第一优先级”。
因此,当这些应用程序启动并找到 Wayland 时,它们就会运行。Wayland 不在乎
DISPLAY
,而且......你去吧。但是,如果应用程序工具包也有 x11 支持,您可以告诉它改用它——这就是
GDK_BACKEND=x11
GTK 应用程序正在做的事情。对于 Qt 应用程序(如在 KDE 中),QT_QPA_PLATFORM=xcb
是等效的。