我正在尝试使用 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 进行测试。