evince 似乎忽略了 Fedora 上的 $DISPLAY?

evince 似乎忽略了 Fedora 上的 $DISPLAY?

我正在运行 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(都是相当新的)的电脑。

我的 Linux 机器的 .cshrc 将我的 DISPLAY 设置为指向我 PC 的 Xserver 192.168.11.17:0.0

当我启动xeyes或时emacs,窗口会正确地显示在我的 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,并且地址正确,因此它似乎正在尝试正确连接!

为什么不呢?

答案1

您需要设置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,您可以告诉它改用 x11 — 这就是GDK_BACKEND=x11GTK 应用程序所做的。对于 Qt 应用程序(如 KDE 中的应用程序),QT_QPA_PLATFORM=xcb情况相同。

相关内容