我有 2 台 Linux 机器正在运行。如果我通过一个连接到另一个
ssh -X 192.168.1.6
我能够启动xterm
或 ,firefox
并且窗口按预期在我正在使用的机器上显示。
但是如果我启动gnome-terminal
或meld
,这些程序的窗口将显示在远程计算机上。
似乎没有一般的身份验证问题,因为我没有收到错误消息。我已经找到了那个线程:如何在无头服务器上远程启动 gnome-terminal? (无法通过X11转发启动)
从那里开始脚本:
#! /bin/bash
ID=foo.bar$RANDOM
GDK_BACKEND=x11 /usr/libexec/gnome-terminal-server --app-id "$ID" &
sleep .4 # yuck
gnome-terminal --app-id "$ID"
wait
效劳于gnome-terminal
。但为了也是meld
别无选择--app-id
。
我有办法让窗口显示在正确的机器上吗?
顺便说一句:两台机器上的 linux 版本都是 5.15.12-200.fc35.x86_64 fedora
如何在没有任何额外脚本和环境黑客的情况下让它工作:
只需在各处禁用 Wayland 即可!在 Fedora GDM 登录屏幕上,登录屏幕上提供了一个几乎隐藏的菜单后您已选择要登录的用户。有一个小齿轮,在当前的 gnome 版本中它位于右侧,选择“X11 下的 gnome”可以解决 Wayland 问题。触摸屏工作后,字体渲染得到很大改善,鼠标指针校准工作完美。他们都没有与 Wayland 合作......只是作为旁注!注意:您必须始终在主机和远程端禁用 Wayland!
答案1
据我了解,引导程序使用X11转发的重要部分是变量GDK_BACKEND=x11
。如果没有它,GNOME 应用程序将默认使用 Wayland 窗口系统,这将导致窗口显示在远程计算机上。
它--app-id
只是为了阻止gnome-terminal
尝试连接到gnome-terminal-server
可能在远程主机上的同一用户帐户上运行的任何其他现有实例(与该主机上的本地会话关联),或者可能由会话按需启动D-Bus,不知道使用 X11 转发的要求。相反,gnome-terminal
只会与gnome-terminal-server
被告知使用 X11 转发和GDK_BACKEND=x11
环境变量的特定实例进行对话。
gnome-terminal
只需要这个--app-id
东西,因为gnome-terminal
它并不是真正的终端应用程序:它只是一个小型客户端应用程序,它进行 D-Bus 调用,gnome-terminal-server
创建实际的终端窗口。这是gnome-terminal
无法区分的解决方法gnome-terminal-server
:“嘿,在创建这个新的终端窗口时,请使用 X11 后端$DISPLAY
,而$XAUTHORITY
不是您可能已经拥有的任何默认显示排列。”
如果我的理论是正确的,那么你应该能够meld
从一个简单的开始:
GDK_BACKEND=x11 meld
如果这有效,那么您可以创建一个简单的包装脚本,如下所示:
#!/bin/sh
if [ "$SSH_CONNECTION" != "" ] && [ "$DISPLAY" != "" ]; then
GDK_BACKEND=x11 /usr/bin/meld "$@"
else
exec /usr/bin/meld "$@"
fi
假设真实的meld
位于/usr/bin/meld
,您可以命名此脚本meld
并将其放置到$PATH
/usr/bin 之前的某个目录中,然后meld
无论您是在本地运行还是通过 SSH X11 转发运行,都将始终执行正确的操作。
~/.bash_profile
或者,您甚至可以~/.profile
在远程计算机上添加一个简单的测试,GDK_BACKEND=x11
以便在您的会话与具有 X11 转发的 SSH 连接关联时为所有程序设置:
if [ "$SSH_CONNECTION" != "" ] && [ "$DISPLAY" != "" ]; then
export GDK_BACKEND=x11
fi
答案2
可以做相反的事情:在两端安装 waypipe (这使得 wayland 应用程序以 ssh -X 或 ssh -Y 为 X11 所做的方式转发)。您运行“waypipe ssh -X (blah)”而不是“ssh -X (blah)”,并且 waypipe 修改了 ssh 命令行以转发端口、运行远程 waypipe 并设置环境变量,以便 wayland 应用程序使用它。
那么不必禁用 wayland,您的 X11 应用程序将通过 X 转发进行转发,而 wayland 应用程序将通过 waypipe 进行转发。
(注意,我目前仍在使用 X11,所以我还没有尝试过这个;但据报道 waypipe 工作得很好。)