我有 2 台 linux 机器正在运行。如果我从一个连接到另一个
ssh -X 192.168.1.6
我能够启动xterm
,或者firefox
窗口在我正在使用的机器上按预期显示。
但是如果我启动gnome-terminal
or 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 版本中它在右侧,并且选择“gnome under X11”以摆脱 Wayland 问题。在这也触摸屏工作之后,字体渲染得到了很大改进,鼠标指针校准工作完美。他们都没有与 Wayland 合作……仅作为旁注!注意:您必须在主机和远程端随时随地禁用 Wayland!
据我了解,指示程序使用 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
一个简单的开始:如果这可行,那么您可以创建一个简单的包装脚本,如下所示:
假设 real
meld
位于/usr/bin/meld
,您可以命名此脚本meld
并将其放置$PATH
在 /usr/bin 之前的某个目录中,然后meld
无论您是在本地运行还是通过 SSH X11 转发运行,都将始终做正确的事情。或者,您甚至可以在远程机器上添加一个简单的测试来为所有程序设置一个简单的测试,
~/.bash_profile
只要您的会话与具有 X11 转发的 SSH 连接相关联:~/.profile
GDK_BACKEND=x11