我有一个脚本,只是为了运行我的图形 (GUI) 应用程序,如下所示。
#cat gui.sh
#!/bin/bash
./gui -display 127.0.0.1:0.0
Run Code Online (Sandbox Code Playgroud)
当我从本地机器 ( ./gui.sh)运行它时,它运行得非常好。但是当我尝试通过 ssh 从远程机器运行它时,出现以下错误。
[root@localhost]# ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui.sh""
No protocol specified
gdm: cannot connect to X server 192.168.3.77:0.0
[root@localhost]#
Run Code Online (Sandbox Code Playgroud)
我不知道,它要求的是哪种协议还是我遗漏了什么?我通过启动应用程序直接尝试,没有脚本 [ ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui""],但结果是一样的。我尝试了各种组合,如ssh -Y,ssh -fY和更多,但结果是一样的!
其次对于我的应用来说,有一个必须的条件,就是我们要先进入程序所在的目录。
任何解决方案?
该选项的含义-display 127.0.0.1:0.0取决于该gui程序,但很可能表示“在 X 显示器上显示 127.0.0.1:0.0”。这是第一个本地 X 显示,通过 TCP 访问。由于两个原因,这几乎肯定是错误的。首先,本地 X 显示应该是:0,不是127.0.0.1:0,因为包含 IP 地址会导致流量通过 TCP 而不是本地访问。根据 X 服务器是否接受 TCP 连接,通过 TCP 可能不起作用。即使是这样,您也会失去本地显示器所具有的优化。
要使用的显示通常由DISPLAY环境变量指示,并且该变量往往会自动正确设置。(通常,如果DISPLAY有错误的值,那是因为你一直在弄乱它。主要的例外是使用screenor tmux。)
您的程序可能确实会查找DISPLAY环境变量的值,因为这往往会随着 xlib 调用而自动发生。所以你应该只调用./gui,你的脚本没有做任何有用的事情。如果您的程序坚持该-display参数,请使其使用环境变量:
./gui -display "$DISPLAY"
Run Code Online (Sandbox Code Playgroud)
ssh -Y而ssh -X应该是一个很好的开始,但你转发你的X服务器呢?
$ grep X /etc/ssh/sshd_config
X11Forwarding yes
Run Code Online (Sandbox Code Playgroud)
否则它不会工作。
要检查的另一件事是 DISPLAY 变量,它应该显示如下内容:
$ echo $DISPLAY
$ localhost:10.0
Run Code Online (Sandbox Code Playgroud)
这是在ssh -Y. 如果我没有 ssh-Y或ssh,则相同的变量为空-X。
有关两者之间的差异-X,请-Y阅读 ssh 的手册页。
| 归档时间: |
|
| 查看次数: |
121163 次 |
| 最近记录: |