问题
大多数人都希望使用“-X”选项通过 ssh 连接到服务器,以便使用客户端的显示器在远程主机上运行 GUI 程序。我想在连接到服务器的物理显示器上运行 GUI 程序。这可能吗?让我更具体一点:
我的情况如下:我有一个没有键盘或鼠标的工作站,但它连接了一台显示器。我想用我的笔记本电脑通过 SSH 连接到它,并能够启动一些图形程序,例如 xeyes 或 ssvnc,并让它出现在工作站的显示器上。
[xapple@laptop ~]$ ssh workstation
Last login: Mon Sep 26 20:03:35 2011 from laptop
[xapple@workstation ~]$ export DISPLAY=:0
[xapple@workstation ~]$ xeyes
No protocol specified
Error: Can't open display: :0
编辑:额外信息
也许我应该更清楚地解释一些事情:
- 我在工作站上有 sudo 访问权限,如果需要,我可以安装任何东西。
- 工作站正在运行 GNOME 用户界面。
- 在断开工作站的键盘和鼠标之前,我登录了 GNOME 会话。因此,目前可以在工作站的显示器上看到我的 GNOME 桌面。
- 我不想在工作站上运行笔记本电脑上的程序。我想在工作站上运行工作站程序。xeyes 或任何可执行文件位于远程服务器上,应在远程服务器的监视器上运行
- 我理解执行此操作会导致我的光标无法连接到界面。我无法点击任何内容。没关系。
非常感谢您的帮助!
答案1
任何 xlib 应用程序都必须连接到 xserver。您必须通过以下方式告知应用程序与服务器的连接:
- 设置环境变量 DISPLAY
- 使用命令行标志,例如
-display
第一个 xserver 通常可以通过连接字符串 ':0' 访问。因此,尝试以下操作:
xeyes -display :0
或这个
env DISPLAY=:0 xeyes
答案2
这个工作站是否正在运行 X Windows 服务器?如果没有,这一切都毫无意义。
您需要某种东西来将数据处理成图形、像素、颜色和位置。如果没有某种软件来运行,“监视器”就毫无用处。
假设是的。(但从文本来看,听起来肯定不是这样)
给定“工作站”和“笔记本电脑”的主机名(以及通过 /etc/hosts 或 DNS 或其他方式的适当 DNS 解析)...如果没有,请用适当的 IP 地址替换机器主机名。
ssh workstation
xhost +laptop
此时您就可以退出工作站,因为这会在工作站的 Xserver 上设置权限以允许“笔记本电脑”连接。
如果您在启动程序时正确设置了 DISPLAY 环境变量,则可以使应用程序在笔记本电脑上运行时显示在工作站上。
DISPLAY=workstation:0 xeyes
-或者-
export DISPLAY=workstation:0
xeyes
两种方法都可以,后者会导致从该 shell 启动时在工作站上显示与 X11 相关的任何内容。(希望这是有意义的)
“xhost”行用于允许笔记本电脑连接到工作站的 Xserver。如果没有它,您将被拒绝权限,除非您在没有权限的情况下启动 X server,但这并不值得推荐。“xhost”保护仍然很差,因为数据在笔记本电脑和工作站之间以“纯文本”形式发送,可能会被嗅探,但这是一个简单的解决方案。
如果您想要隐私,则需要在笔记本电脑和工作站之间设置某种加密隧道(显示器端口 6000:0)。是的,此时情况变得很奇怪。
如果您处于受控环境中,则使用“xhost +laptop”命令就足够了,如果您保留该命令“xhost +”的“laptop”部分,那么任何人都可以连接到 Xserver 并显示内容。
请记住,您的鼠标并未“连接”到工作站 Xserver,并且您将无法操作窗口或单击任何内容。
如果您想连接鼠标,我推荐 x2x、synergy、vnc 或基于 X Windows 的屏幕共享应用程序。