无法通过 XOpenDisplay 连接到 X11 服务器

无法通过 XOpenDisplay 连接到 X11 服务器

我在同一台主机上运行两台虚拟机。一台装有 Ubuntu,另一台装有 Red Hat。两台虚拟机都设置为 VirtualBox 上的同一 NAT 网络。我能够使用 ssh username@ip -X 从一个虚拟机执行 X11 转发到另一个虚拟机,反之亦然。

为了便于说明,我们假设我尝试连接的虚拟机的 IP 是 178.23.2.6,而我提供给 XOpenDisplay 的输入是 178.23.2.6:0,因为我想连接到服务器端的显示器 0。我不确定我是否给出了错误的输入,但是当我尝试使用 XOpenDisplay 运行程序时,它一直给出错误。如能提供"RuntimeError: Cannot connect to 178.23.2.6:0: Unknown error"有关此问题的任何信息,我将不胜感激。

答案1

默认情况下,X 服务器仅接受本地连接(通过本地 Unix 套接字“/tmp/.X11-unix/X0”)——它根本不监听 TCP 连接。要允许这样做,请配置您的显示管理器(GDM、SDDM、LightDM)以使用该选项启动 X 服务器-listen tcp

  • 例如,使用 GDM 时您必须添加DisallowTCP=false/etc/gdm/custom.conf[security]部分。

  • 使用 LightDM 时您需要/etc/lightdm/lightdm.conf 部分xserver-allow-tcp=true[SeatDefaults]

(SSH X11 转发之所以有效,是因为您不是通过网络直接连接到 X 服务器;而是连接到“localhost”,数据通过 SSH 中继,并且 SSH 守护程序也连接到远程端的“本地”套接字。)

启用 TCP 后,ss -ltnnetstat -ltn应显示显示器+6000 的监听 TCP 套接字,例如,如果您的显示器是:0,Xorg 将监听 TCP 端口6000,等等。您需要允许通过防火墙(ufw 等)的入站连接 - 请务必小心操作,不要允许来自整个互联网的连接。

X 服务器还需要通过 Xauthority 文件(必须将“magic cookie”从服务器复制到客户端)或通过受信任主机列表(必须允许客户端的 IP 地址)进行身份验证。任何一种方式都足够了。

  • 要使用 Xauthority,请在 X 服务器上运行,将身份验证 cookie 复制到客户端,然后在 X 客户端上xauth list :0导入它。xauth add 178.23.2.6:0 <type> <cookie>

  • 要使用 Xhosts,请xhost +178.23.2.XYZ在服务器上运行。

  • 不要xhost +单独运行,因为它完全地禁用所有身份验证检查。

最后,请记住 X11 连接不以任何方式加密。

相关内容