我正在尝试隧道 X 窗口。如果做:
user@local: ssh -X user@remote xclock
有用。但是,如果我先登录到机器然后启动程序,它就会失败。
user@local: ssh -X user@remote
user@remote: xclock
No protocol specified
Error: Can't open display: :0
什么地方出了错?
编辑
我检查了$DISPLAY
遥控器上的变量:
user@local: ssh -X user@remote "echo $DISPLAY"
:0.0
登录后在远程将其设置为相同的值不起作用。按照建议设置$DISPLAY
即可。:10.0
user@local: ssh -X user@remote
user@remote: DISPLAY=:10.0 xclock
我仍然不明白为什么交互式和非交互式会话需要不同的 $DISPLAY 值。
答案1
检查变量展示正确设置为本地主机:10.0。如果不是,
export DISPLAY=localhost:10.0
,然后尝试时钟再次。
但为什么我需要“DISPLAY”为 10.0 而不是 0.0?
这X服务器(或者X窗口, 或者X11)正是这样,一个服务器,等待应用程序连接到它以显示它们。这发生在您的电脑上,其中应用程序通过位于以下位置的套接字连接到 X 服务器:/tmp,通常称为/tmp/.X11-unix。然而,像所有服务器一样,X11可以从远程电脑进行联系,并以图形方式显示在远程电脑上运行的应用程序。
然而,这种能力带来了许多安全风险,因此向远程应用程序开放 X11 服务器非常困难(您需要在不同的配置文件中指定相同的选项至少 3 次)。
现在输入SSH,这反而使这变得安全:它是-Y/-X的选项SSH它安全地(也通过加密流量)处理向远程应用程序打开本地 X11 服务器的所有细节。但是,当您想要显示偏僻的如果您在本地使用 xclock,您必须指示远程应用程序要联系的 X11 服务器不是它自己的 X11 服务器,而是远程计算机上的服务器(您启动该服务器的那台计算机)SSH会议)。所以时钟必须发送其输出不是到本地套接字/tmp但到一个网络端口(它是127.0.0.1:6010, 哪个SSH仁慈地缩短为本地主机:10), 从中SSH将负责将其发送回您的本地电脑,最终以图形方式显示输出。
如果您不喜欢将不同的 ssh 连接(您可能有多个)分隔开10单位,如本地主机:10.0,本地主机:20.0,...)你应该改变声明
X11DisplayOffset 10
在/etc/ssh/sshd_config无论你喜欢什么(尽管说实话,我看不出有任何理由)。
正是这个语句导致远程显示可用不是在港口6000(这将是本地主机:0.0),但在端口上6010。你可以自己检查一下:
$ ssh -Y vps
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Apr 17 02:47:42 2017 from
root@vps:~# ss -lntp | grep 6010
LISTEN 0 0 127.0.0.1:6010 *:* users:(("sshd",16172,8))
LISTEN 0 0 ::1:6010 :::* users:(("sshd",16172,7))