通过ssh从远程计算机运行时出现错误“未指定协议”


10

我有一个脚本,仅用于运行我的图形(GUI)应用程序,如下所示。

#cat gui.sh
#!/bin/bash 
./gui -display 127.0.0.1:0.0    

当我从本地计算机(./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]#    

我不知道,它在询问哪个协议,或者我错过了什么?我直接通过启动应用程序进行尝试,没有脚本[ ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui""],但结果是相同的。我曾尝试各种组合一样ssh -Yssh -fY多但结果是一样的!
其次,对于我的应用程序,必须满足一个条件,我们必须首先进入程序所在的目录。
有解决方案吗?

Answers:


5

该选项的含义-display 127.0.0.1:0.0取决于该gui程序,但是很有可能意味着“在X显示器127.0.0.1:0.0上显示”。这是通过TCP访问的第一个本地X显示。几乎可以肯定这是错误的,原因有两个。首先,本地X显示应该为:0,而不是127.0.0.1:0,因为包含IP地址会导致流量通过TCP而不是本地访问。根据X服务器是否接受TCP连接,通过TCP可能无法工作。即使这样做,您也会失去本地显示的优化。

通常使用的显示由DISPLAY环境变量指示,并且该变量倾向于自动正确设置。(通常,如果DISPLAY值有误,那是因为您一直在弄乱它。主要的例外是使用screentmux。)

您的程序可能确实会查询DISPLAY环境变量的值,因为使用xlib调用往往会自动发生这种情况。因此,您只需要调用./gui,脚本就不会做任何有用的事情。如果您的程序坚持使用该-display参数,请使其使用环境变量:

./gui -display "$DISPLAY"

4

ssh -Y并且ssh -X应该是一个好的开始,但是您是否也转发了X服务器?

$ grep X /etc/ssh/sshd_config
X11Forwarding yes

否则它将无法正常工作。

要检查的另一件事是DISPLAY变量,它应该显示如下内容:

$ echo $DISPLAY
$ localhost:10.0

此后ssh -Y。如果我在不使用-Y或的情况下使用ssh,则相同的变量为空-X

有关两者之间的差异-X,请-Y阅读ssh的手册页。


3

视频说明了如何逐步解决错误。如果您不想观看,请遵循以下文字:

未指定协议错误将指示“用户不知道如何启动GUI应用程序”和“用户没有启动GUI应用程序的权限”。在视频中,GUI应用程序为dbca

该视频的关键部分是运行命令xhost +,该命令授予用户从远程系统向本地系统远程显示GUI的权限。


6
xhost +将允许任何人连接到您的显示器。我建议xhost +local:[hostname or ip]
vimdude 2015年

这和正是我固定的错误。+1
Yug Singh

1

Debian Jessie,还添加:

export XAUTHORITY=/.Xauthority

xhost +解决了我的问题(在客户端)
危险

有帮助,谢谢!我的XAUTHORITY是,/tmp/xauth-1000-_0但是在启动了另外两个X会话之后,该文件消失了-仅剩下了第三个。要解决所有窗口的问题,我使用以下方法进行了恢复:ln -s ~/.Xauthority /tmp/xauth-1000-_0
joeytwiddle

0

我也遇到了同样的问题,我通过将DISPLAY环境变量从以下位置更改来解决它:

export DISPLAY=:0.0

export DISPLAY=:10
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.