Linux 上的程序如何与 X11 Server 通信?

Posted

技术标签:

【中文标题】Linux 上的程序如何与 X11 Server 通信?【英文标题】:How does a program communicate with the X11 Server on Linux? 【发布时间】:2020-04-03 02:53:41 【问题描述】:

所以我对此进行了大量研究,但找不到答案。

它是否使用命名管道?本地主机上的套接字? d-bus ?

我可以用一行 bash 截取并查看 X 客户端发送到 X 服务器的二进制消息吗?

当然,这仅用于教育目的。我不打算构建一个会拦截此类消息的软件。

【问题讨论】:

【参考方案1】:

它使用名称为/tmp/.X11-unix/X$DISPLAYNUMBER 的Unix 域套接字。如今,Linux 支持 Unix 域套接字的特殊命名,称为“抽象命名空间 UDS”,其中路径以 @ 开头,但其他方面相同。

【讨论】:

【参考方案2】:

补充另一个答案,还有 TCP/IP。事实上,一个程序可以使用在完全不同的机器上运行的 X11 服务器,甚至可以环游世界。

您可以使用例如:

DISPLAY=192.168.1.56:0 xterm

程序 xterm(1) 将使用 TCP/IP 连接连接到 $DISPLAY 指示的机器。

【讨论】:

以上是关于Linux 上的程序如何与 X11 Server 通信?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 X11 转发到运行在远程 linux 主机上的虚拟机?

如何使用vscode远程debug linux图形界面程序

Python如何访问X11剪贴板?

Xvfb新建虚拟X窗口,通过x11vnc启动VNC Server并转发Xvfb启动的虚拟窗口

Linux 下centos7启动 Tomcat 抛出Can't connect to X11 window server 问题的解决方法

X11 和 nVidia 驱动程序的奇怪 EGL 行为