什么是`/tmp/.X11-unix/`?

Tho*_*ner 40 x11

我问了谷歌同样的问题,但不喜欢我得到的结果。

什么是/tmp/.X11-unix/

Bru*_*ger 27

在我相当新的 Arch 笔记本电脑上,/tmp/.X11-unix/有一个包含一个条目的目录:X0, a Unix-domain socket

X11 服务器(现在通常如此Xorgxterm通过某种可靠的字节流与 Firefox 等客户端进行通信。Unix 域套接字可能比对世界开放的 TCP 套接字更安全一点,并且可能更快一点,因为内核可以完成所有工作,并且不必依赖以太网或无线网卡。

我的 X11 服务器显示为:

bediger    294   293  0 Apr09 tty1     01:23:26 /usr/lib/xorg-server/Xorg -nolisten tcp :0 vt1 -auth /tmp/serverauth.aK3Lrv5hMV
Run Code Online (Sandbox Code Playgroud)

“-nolisten tcp”阻止它打开 TCP 端口 6000 进行通信。

该命令lsof -U可以告诉您哪些进程正在使用哪些 Unix 域套接字。我认为Xorg/tmp/.X11-unix/X0.

  • 不是吹毛求疵,但我怀疑 unix 本地套接字比 *local* TCP 套接字(它不使用硬件接口,也是 100% 内核)具有任何性能优势。 (2认同)
  • @goldilocks:见 http://stackoverflow.com/questions/14973942/performance-tcp-loopback-connection-vs-unix-domain-socket (2认同)
  • @Max 我站纠正!*虽然*这不是因为 Bruce 引用的原因,而是因为内核 TCP 堆栈的开销。 (2认同)

der*_*ert 13

X 服务器有多种与 X 客户端(应用程序)通信的方式。最常用的,至少在同一台机器上,是 Unix 域套接字。

Unix 域套接字类似于更熟悉的 TCP 套接字,不同之处在于您连接到path而不是连接到地址和端口。您使用实际文件(套接字文件)进行连接。

X 服务器将其套接字放入/tmp/.X11-unix

$ ls -l /tmp/.X11-unix/X0 
srwxrwxrwx 1 root root 0 Dec 18 18:03 /tmp/.X11-unix/X0
Run Code Online (Sandbox Code Playgroud)

注意s权限前面的,这意味着它是一个套接字。如果您有多个 X 服务器在运行,那么您将在那里拥有多个文件。

至少在 Linux 联机帮助页中,可以在man 7 socket. 有关 Unix 域套接字的详细信息在man 7 unix. 请注意,这些页面以程序员为中心。