![Xt 错误:尽管配置了 xhost 和 Xauthority,仍无法打开显示](https://linux22.com/image/206417/Xt%20%E9%94%99%E8%AF%AF%EF%BC%9A%E5%B0%BD%E7%AE%A1%E9%85%8D%E7%BD%AE%E4%BA%86%20xhost%20%E5%92%8C%20Xauthority%EF%BC%8C%E4%BB%8D%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%E6%98%BE%E7%A4%BA.png)
我正在尝试在本地网络内的另一个显示器上显示支持 X 的程序。
我有一个 X 服务器在 IP 192.168.4.79 的主机上运行,使用 display :0
。我有另一台主机 (192.168.4.23),我想将其充当客户端:也就是说,它应该运行程序并将其结果显示到位于 192.168.4.79:0 的服务器。
在运行服务器的主机上,我使用 xhost 将客户端 IP 添加到访问控制列表:
$ xhost +192.168.4.23
然后,我提取服务器主机上 ~/.Xauthority 的相关内容,并将其合并到客户端主机上的 ~/.Xauthority 中。
$ xauth extract - $DISPLAY > xauth_extract
然后,使用 ftp 将其复制到客户端主机。并且,在客户端:
$ xauth merge xauth_extract
或者,在支持 ssh 的客户端上(请参阅底部的注释):
$ xauth extract - $DISPLAY | ssh [email protected] xauth merge -
但是,如果我(在客户端上)运行:
$ xterm -display 192.168.4.79:0
我看到错误:xterm: Xt error: Can't open display: 192.168.4.79:0
。
主机可以很好地通信:ping -c1 192.168.4.79
。我也不认为这是防火墙问题。首先,我在运行服务器的主机上设置了防火墙,以接受来自本地网络内的任何连接:
ipset create sjlan hash:net
ipset add sjlan 192.168.4.0/22
iptables -I INPUT -m set --match-set sjlan src -j ACCEPT
此外,如果我暂时禁用服务器主机 ( ) 上的防火墙systemctl stop firewall
,我也会收到相同的错误。
我在这里可能会缺少什么?我该如何解决这个问题?
我故意不使用 ssh 来实现此目的,因此请不要回答如何使用 X11Forwarding 来完成此操作。我已经知道如何做到这一点,并且故意不使用它,因为我需要它与运行 30 年历史的 hp-ux 实例(使用 X11R5)的主机一起工作,该实例没有也不能(通过任何不平凡的努力)设置使用 ssh。
另外,我首先使用两台运行 X11R7 的现代 Linux 机器进行测试,因此目前的问题并不是新机器上的 X11 实现与旧机器上的 X11 实现之间存在不兼容性。
我还应该提到,到目前为止唯一有效的方法是在 HP-UX 计算机上运行服务器,并让我想要充当服务器的主机充当客户端。我能够从 192.168.4.79 启动 xterm 并查看其显示并在 HP-UX 计算机上与其交互。因此,新机器上的某些设置似乎阻止了访问。我预计旧机器在安全方面的门槛要低得多。
答案1
大多数现代系统上的 X 服务器默认禁用侦听 IP 地址(因为它本质上不安全),并且仅使用本地域套接字。
详细信息取决于您的发行版,但请参阅和man Xserver
参数。您需要找出在您的发行版上启动 X 服务器的内容(显示管理器、systemd 等),或者您可以启动第二个服务器来使用这些选项(如果您的发行版允许)。-listen
-nolisten