Xorg(或任何 X 窗口服务器)是否有一个设置可以创建 X 服务器的“存根”,以便它接受来自应用程序的 API 调用,然后完全忽略它们,而不是处理调用、更新帧缓冲区并写出记忆?我需要能够运行图形应用程序(例如 Firefox),但我实际上并不关心图形输出,并且希望尽可能减少渲染开销。我正在尝试获取不因图形渲染而改变的网页计时。
或者,是否有某种方法可以“记录”所有 X 服务器 API 调用,将它们转储到磁盘,然后稍后重播它们,以便我可以将 Web 计时与图形渲染分离,但仍然创建应用程序所查看内容的屏幕截图在不同的时间点?
答案1
您正在寻找Xvfb
。从手册:
Xvfb is an X server that can run on machines with no display hardware and no physical input devices. It emulates a dumb framebuffer using virtual memory.
答案2
1996 年曾经有一个程序可以做到这一点,直到最近才从 debian 中删除xmon
,它分为两部分,xmond
过滤请求并回复到 X11 服务器,还有xmonui
一个 gui,您可以在其中切换哪些请求是被压制,所以不画任何东西。它是该程序的一个分支xscope
(用于跟踪请求和回复),该程序仍然是分布式的。然而,要找到来源今天编译xmon
你需要有一点狂热。我想它被删除了,因为没有更多的 X11 错误需要调试......
男人xmon:下图显示了 xmon 和 xmon 守护进程之间的关系。以及客户端和服务器。
----------
| xmonui |
----------
|
v
------------ ----------
| client 1 |<------->| |
------------ | | ----------
: | xmond |<----->| server |
: | | ----------
------------ | |
| client n |<------->| |
------------ ----------
|
v
monitor output to stdout
您可以尝试的另一种优化Xvfb
是创建一个非常小的屏幕,例如 64x64 像素,深度可能为 1(单色),并将 Firefox 窗口放置在屏幕外,因此不会渲染太多内容,因为它不可见。