使用 ssh 在 Linux 机器上运行 GUI 程序

使用 ssh 在 Linux 机器上运行 GUI 程序

我正在尝试使用 ssh 在远程 Ubuntu 机器上运行一个 GUI 程序。

我想在通过 ssh 连接的机器上打开 Firefox 或 Skype。但是当我使用 user2 登录并写入时,sudo -u user1 firefox我收到一条错误消息,提示“未指定显示”。

机器已打开并以用户 1 身份登录,但似乎我无法让 ubuntu 识别到有可用的 GUI。

我不介意采用其他解决方案,但我更希望能够针对这种特定情况提供帮助。

答案1

X11Forwarding yes在 SSH 服务器的配置文件中设置( /etc/ssh/sshd_config)。重新启动服务器并使用或选项ssh在客户端计算机上运行(这应该适用于 OpenSSH)。-X-Y

答案2

dbus-launch firefox&

过去,我曾通过 shell 尝试过此方法,您可以通过 SSH 尝试一下。

答案3

使用 sudo 会使事情变得有点复杂,并且需要一些额外的步骤。

如果你已经设置了 /etc/ssh/sshd_config 就像其他人提到的那样

X11Forwarding yes

然后以 user2 身份通过 ssh 进入

$ ssh -YC remote.example.com

您应该能够以 user2 的身份运行远程 X 应用程序。在许多基于 X 的系统上测试这一点的一个简单方法是运行

$ xlogo

与 Firefox 之类的浏览器相比,它非常轻量级,尽管 Firefox 也能很好地工作。

一旦你确定 X 正在通过你作为 user2 的远程 ssh 连接工作,我们就可以通过 sudo 到 user1 来让它工作。问题是当你 sudo 到 user1 时,你将失去使用远程 X 转发的权限。为了解决这个问题,首先以 user2 的身份登录后执行以下操作

$ echo $DISPLAY
localhost:17.0
$ xauth list
<snip>
carlisle/unix:17  MIT-MAGIC-COOKIE-1  161bda5fc81200a4e74e578009177fb8

您应该看到一行包含相同的显示数字,在我的示例中是 17。您需要在 xauth 列表输出中找到匹配的数字。接下来 sudo 到 user1 并运行 xauth add 命令以添加上面匹配的 auth 行

$ sudo su - user1
$ xauth add carlisle/unix:17  MIT-MAGIC-COOKIE-1  161bda5fc81200a4e74e578009177fb8

您现在应该可以运行您想要的任何应用程序了。

$ xlogo  # or any X app such as firefox 

如果您收到无法锁定 ~user2/.Xauthority 的错误,则在使用 sudo 切换到 user1 之前,您需要调整该文件的权限。这不太安全,但您可以将该文件的文件权限设置为 chmod 666 进行测试。

相关内容