X.org 在 chroot 中没有套接字?

Sco*_*pta 8 linux chroot xorg x11 socket

我有一个 chroot 设置,我一直在运行图形应用程序,没有问题。我所做的唯一设置是设置DISPLAY=:0并且它有效。但是,我一直认为 Unix 域套接字用于 X11,所以我无法弄清楚为什么会这样。我做了一些挖掘,结果证明我是对的。我的 X.org 服务器是用-nolisten tcp标志启动的,我有一个 unix 域套接字,/tmp/.X11-unix但不知何故我的 chroot 可以在没有任何套接字的情况下在该 X11 显示器上启动图形应用程序。我从来没有将套接字硬链接到 chroot,事实上它们甚至不在同一个文件系统上。/tmp/.X11-unix在 chroot 上是完全空的。我的 chroot 怎么可能在我的 X11 显示器上启动图形应用程序?

Jos*_*ett 6

X 服务器还支持抽象套接字,其工作方式与 UNIX 套接字相同,并且具有与 UNIX 套接字类似的路径名,但路径名以 NUL 字符开头。请参阅unix(7)联机帮助页中“抽象”的文档。抽象套接字有效地存在于所有文件系统名称空间和 chroot 中;您无需将任何内容链接到 chroot 或命名空间即可使用它。

也许X服务器和客户端都使用抽象套接字进行通信?使用标准 X 客户端库的 X 客户端将在尝试使用默认 UNIX 套接字之前自动尝试使用抽象套接字。在 libxcb 中,请参阅src/xcb_util.c中的_xcb_open和。_xcb_open_abstract

  • 请注意,抽象套接字是可移植 Unix 套接字的特定于 Linux 的扩展。根据 [Linux `unix.7` 手册页](http://man7.org/linux/man-pages/man7/unix.7.html):“Linux 还支持独立于文件系统的抽象命名空间。 ” 和“抽象套接字命名空间是不可移植的 Linux 扩展。” (2认同)