我在最新的 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。