x11 转发失败,部分应用程序在远程显示中打开,部分应用程序在本地显示中打开

x11 转发失败,部分应用程序在远程显示中打开,部分应用程序在本地显示中打开

我在最新的 ubuntu linux 上安装了 mac,并安装了 xquartz 作为 X11 的远程客户端。我能够通过 ssh 连接并远程启动 xclock 等应用程序。对于大多数应用程序(如 gnome-calculator),该应用程序在 ubuntu 本地显示中打开,而不是按预期在远程显示中打开。SSH 配置应该没问题,据我所知,这与 x11 转发中的显示参数有关。任何帮助都将不胜感激。

答案1

我遇到了同样的问题ssh -X user@remote。有些应用程序显示在本地端(例如 xclock),有些显示在远程端(例如 gedit)。我相信这是所有 GTK/Gnome 应用程序的问题。它只发生在远程显示器运行时(我当时正在使用 NoMachine)

我找到了一个解决方法:取消设置 XDG_RUNTIME_DIR 环境变量。

ssh -X -C user@remote
unset XDG_RUNTIME_DIR
gnome-calculator

使用 也可以达到同样的效果su - $USER-这里 很重要

ssh -X -C user@remote
su - $USER
gnome-calculator

现在,即使打开了远程桌面,应用程序也始终显示在本地显示屏上。

答案2

显然 sudo app_name 有所帮助。由于某种原因,没有 sudo,应用程序将以本地而不是远程显示启动。显然,同一个用户无法在远程 X 连接启动应用程序的同时从控制台登录,否则它将在控制台中启动应用程序。

答案3

我读了这里的三篇帖子,我认为对该选项存在一些误解-X

-X客户端选项的目的ssh是将远程显示转发到本地显示,这样您就可以运行远程资源并在本地查看它们……有关更多信息,请阅读man ssh

当您使用sudo或 时,su这些命令只会中断 X-forwarding 的正常工作,因此 GUI 应用程序正在远程显示器上运行。当您使用sudo some-gui-app它时,还会破坏目录中文件的所有权$HOME,这可能会导致一些问题 - 解决方法是:sudo chown -R $USER:USER $HOME,下次使用sudo -i ...sudo -H ...

为了在 ssh 会话中的远程显示器上运行 GUI 应用程序,您需要获取要运行该应用程序的桌面会话的export$DISPLAY$XAUTHORIT(在某些情况下还需要一些其他变量) - 通常这是活动会话,用户已登录并且会话显示在物理屏幕上。

不久前,我开发了一个 bash 脚本,它能够检测活动桌面会话并从当前会话(ssh|cron|tty|等)中导出其所有变量。最初我需要为解决类似的任务crontab,这就是脚本原名的原因cron-gui-launcher,但它有更广泛的用途。该脚本、所有必要的说明和几个使用示例都可以在我的 GitHub 存储库中找到:https://github.com/pa4080/cron-gui-launcher

以下是该脚本工作原理的视频演示:Ubuntu:CRON GUI 启动器演示 - SSH

相关内容