如何让X.org在6000端口上监听远程连接?

这是在Ubuntu 10.10(Maverick Meerkat)64位桌面上。
我想让我的X服务器监听来自本地网络上其他机器的远程连接。我知道有关ssh -X的内容,但那不是我想要的。我模糊地记得将类似TCPListen的东西从no改为yes,但我不记得应该在哪里应用这个更改。
我对GUI方法或CLI方法都感兴趣。
PS 编辑/etc/X11/xinit/xserverrc以删除-nolisten tcp选项并重新启动无效。

提示 在您尝试启动时,可能值得禁用防火墙(iptables)。 - user243114
@user243114 提示未被使用,但还是谢谢你的帮助 :) - ΤΖΩΤΖΙΟΥ
9个回答

(以下是一个几乎逐字翻译的自问自答,来自我之前忘记的一个与此问题相同的问题的服务器故障页面;当时尚未创建askubuntu)。
根据在启用XDCMP的页面和文件/etc/gdm/gdm.schemas中找到的信息,我成功创建了一个/etc/gdm/custom.conf文件:
# /etc/gdm/custom.conf
[xdmcp]

[chooser]

[security]
DisallowTCP=false

[debug]

小心字母大小写:如果你写成"disallowTCP=false",它是不会起作用的... 我还修改了/etc/X11/xinit/xserverrc文件为:
exec /usr/bin/X11/X

即我删除了X可执行文件中的“-nolisten tcp”选项。我不知道是否需要这样做。你可能想尝试避免进行此编辑。
如果你只更改了xserverrc文件,X仍然会以“-nolisten TCP”启动。
之后,只需要重新启动gdm进程即可。
sudo service gdm restart

您可以通过以下方式验证成功:
tzot@tzot-laptop:/etc/X11
$ netstat -an | grep -F 6000
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN
tcp6       0      0 :::6000                 :::*                    LISTEN

更新

在升级到12.04后,我遇到了同样的问题。这次,罪魁祸首是系统使用的lightdm。需要更新的文件是/etc/lightdm/lightdm.conf,所需添加的内容是在[SeatDefaults]部分中加入xserver-allow-tcp=true

此外,之后我还找到了那个答案。:)

概要

所以,在10.10中仍然有效:创建/etc/gdm/custom.conf并按照上述指定的内容重新启动gdm


2对于Ubuntu 14.04来说,唯一需要的就是有一个像/usr/share/lightdm/lightdm.conf.d/100-custom.conf这样的文件,其中包含[SeatDefaults] server-allow-tcp=true - Nitz
@Nitz,请注意你在评论中缺少了xserver-allow-tcp=true中的'x'。你可以删除现有的评论并重新撰写。尽管答案中已经包含了这个解决方案。 - Alexis Wilke
2我在Server Fault上对你的原始问题进行了评论:现在Xorg默认不监听TCP。需要添加-listen tcp来启用它,但是gdm3似乎没有提供这个选项。 - L. Levrel
有人最近制作了任何 gdm3 以启用 TCP 吗?顺便说一下,我认为这个 DM 是一堆维护不良的垃圾;糟糕的开发者工作包括遗失手册页,尽管一个错误报告已经悬而未决了1年半。事实上,对于一个高级用户来说,gdm3 怎么比 sddmlightdm 更好呢? - Incnis Mrsi

这个答案与Kubuntu 17.04和20.04有关,我添加了它,因为其他答案(与gdmlightdm相关)都没有帮助到我。在我的情况下,sddm正在运行。要检查这一点,例如运行
ps -eal | grep sddm

如果正在运行,将显示进程sddm和sddm-helper。在这种情况下,请添加一个名为/etc/sddm.conf的配置文件,并填写以下内容。
[X11]
ServerArguments=-listen tcp

适用于20.04或

[XDisplay]
ServerArguments=-listen tcp

17.04之后,创建此文件后重新启动您的系统(可能只需重新启动sddm)。因此,
ps ax | grep sddm 

显示所需的Xorg选项-listen tcp,X服务器已准备好接收传入连接(不要忘记使用xhost添加远程主机)。

2请注意,从SDDM 0.14.0版本开始(随Kubuntu 17.10 Artful发布),[XDisplay]部分已更名为[X11]。这在我帮助我的同事时造成了很大的困惑,直到我分别在我们的16.04和17.10机器上运行了man 5 sddm.conf,才注意到了这个差异! - keithzg
作为记录:在Ubuntu 22.04上安装SDDM并将其作为默认的显示管理器是可能的。 - Incnis Mrsi

Ubuntu 18.04以lubuntu 18.04和lightdm 1.26.0运行,这是我必须做的(只花了我几个星期才弄清楚)。您需要创建以下两个文件:/etc/lightdm/lightdm.conf和/etc/lightdm.conf.d/50-xserver-command.conf,具体操作如下:
sudo vi /etc/lightdm/lightdm.conf:
[Seat:*]

xserver-allow-tcp=true
xserver-command=X -listen tcp

sudo vi /etc/lightdm/lightdm.conf.d/50-xserver-command.conf

[Seat:*]

xserver-command=X -core -listen tcp

这将导致lightdm使用以下命令行运行Xorg:
Xorg -listen tcp :0 -seat seat0 -auth /var/run/lightdm/root/:0 -listen tcp vt7  
   -novtswitch

这里有两个"-listen tcp",但不会造成任何问题。如果你没有这两个文件中的一个,那么Xorg选项之一将是"-nolisten tcp",它会覆盖另一个"-listen tcp"。 我终于找到了关于这个链接的线索。
然后在你的.bashrc中添加:xhost + 重新启动并检查Xorg是否正在监听6000端口:
$ netstat -nal | grep 6000
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN     
tcp6       0      0 :::6000                 :::*                    LISTEN     

享受...


截至Ubuntu 18.04版本,我查看了正在运行的进程,并确定了所使用的显示管理器是gdm3。
$ ps ax|grep dm
 1515 ?        Ssl    0:00 /usr/sbin/gdm3

然后我编辑了/etc/gdm3/custom.conf文件,并添加了一行内容:
[security]
DisallowTCP=false

如前所述,打开6000端口是不安全的。然而,我只在家庭网络中使用它,并且该端口还受到iptables的进一步保护,只对我的主要笔记本开放,应该没问题。

这个与被接受的答案有何不同? - Stephen Rauch
2不是根本上的不同,但在18.04版本中配置文件是"/etc/gdm3/custom.conf",而在被接受的答案中是"/etc/gdm/custom.conf"。 - Bing Ren

以下命令可以在不修改任何配置选项或重新启动窗口管理器的情况下正常工作。
打开一个终端窗口并运行以下命令:
socat -d -d TCP-LISTEN:6000,fork,bind=172.17.0.1 UNIX-CONNECT:/tmp/.X11-unix/X0 &

它将打开TCP端口6000作为一个双向通道,连接到基于文件系统的套接字/tmp/.X11-unix/X0,这是您的窗口管理器监听的。

末尾的&表示该命令在终端打开的情况下会持续在后台运行。对于某些用途来说,只在需要时运行更安全,但如果您需要始终打开该端口,我建议使用systemd创建一个服务

在我的计算机上,172.17.0.1是Docker网络卡。或者,您可以使用127.0.0.1限制本地连接,或者使用0.0.0.0甚至允许外部连接(建议使用防火墙)。

首次使用socat时,您需要安装它:

sudo apt install socat

在Ubuntu 20.04上进行了测试。

这甚至允许与不支持“-listen tcp”的Xwayland建立TCP连接。 - mviereck

要更改Slim的选项,请在/etc/slim.conf中修改xserver_arguments。然后重新启动X会话。

1Slim是什么?你应该在回答中添加一个链接,以证明它与问题相关。 - ΤΖΩΤΖΙΟΥ

在使用 lightdm 的 Xubuntu 20.04 上,现在看起来更加简洁了。只需将 xserver-allow-tcp=true 添加到 /etc/lightdm/lightdm.conf 文件中的 [Seat:*] 部分即可。

在Ubuntu 20上,将Xorg监听端口6000的唯一方法是编辑二进制文件"/usr/libexec/gdm-x-session",并将字符串"-nolisten"更改为"-listen"。
让"/etc/gdm3/custom.conf"选项为:"[security] DisallowTCP=true"。
为了安全起见,将"gdm-x-session"复制到"gdm-x-session.org"。如果出现任何问题,您可以恢复原始文件。
将"gdm-x-session"复制到"/tmp"中。您不能直接编辑二进制文件,因为它已经打开,并且操作系统不允许您保存更改。
要进行编辑,请运行hexedit(如果尚未安装),并将字符串"-nolisten"更改为"-listen"。在执行"hexedit /tmp/gdm-x-session"后,此字符串位于文件地址"0xA46E"处。
注意尾部的空值(trailing nulls),即新的十六进制字符串为"2D 6C 69 73 74 65 6E 00 00 00"。
按下Ctrl+X保存并退出。
进入维护模式"init 1"。
复制"/tmp/gdm-x-session"到"/usr/libexec/gdm-x-session"。
重新启动计算机,然后..哇!"netstat -n -a | grep LISTEN"报告Xorg正在监听6000端口。

我不确定在Ubuntu和GDM上是否确实只有这一种方式,但是在使用lightdm而不是gdm的Xubuntu 20.04上,事情仍然是可配置的。 - ΤΖΩΤΖΙΟΥ

首先,你不应该编辑文件/etc/X11/xinit/xserverrc。相反,将该文件复制到你的HOME目录,并将其命名为.xserverrc。然后在你的HOME目录中编辑该文件。
其次,这些文件只被startx使用。请参考man-page。如果你使用其他工具启动X服务器,你需要相应地配置该工具。