我正在编写一个程序,其中我需要尽可能有效地访问 X11 窗口的像素数据,最好是通过共享内存,而不需要每次我想要刷新像素数据时都进行 XCB 调用。这与
Xvfb
的 -shmem
选项类似,但我想通过共享内存访问每个窗口的像素数据,而不是整个屏幕。
我可以用任何有帮助的方式配置 X 服务器。 X 服务器无头运行,未连接到真正的视频硬件。
我知道 XShm 和 XComposite 扩展。据我所知,他们每个人只做了我需要的一半:
我可以以某种方式组合这两个扩展,以便我可以直接从我自己的应用程序访问窗口像素数据,而不需要不断要求 X 服务器复制像素数据吗?
我为我的用例找到的最佳解决方案是使用指定了
Xvfb
标志的多头
-fbdir
实例,并确保每个窗口都位于其自己的屏幕上,其大小适合窗口的大小。然后,每个屏幕一一映射到一个窗口,并且每个屏幕在
-fbdir
指向的目录下都有一个内存可映射文件。