我想以编程方式找到连接到控制台的 X 服务器,这意味着当前由鼠标/键盘/屏幕控制。我假设有一种干净的方法可以获取当前的 vt(使用/dev/console
?)。fgconsole
代码(fgconsole.c, getfd.c )让我有点怀疑。尽管
struct vt_stat vtInfo;
ioctl(fdConsole, VT_GETSTATE, &vtInfo);
似乎是我想要的,检索有效控制台 fd 的代码似乎有些不可靠 - 尽管测试了 5 个文件(每个文件 rw/w/r),但如果在终端仿真(xterm)中调用它仍然会失败。我可能可以忍受,但感觉并不好......(注意:当然 xterm 不能是控制台 - 我们正在谈论在 xterm 中查询 fgconsole)。
接下来,我必须将 vt(例如 vt7)映射到 X 显示器。但是,我宁愿不依赖
ps aux | grep X
做到这一点......有没有更可靠的方法?我可以连接到列出的所有 X 服务器/tmp/.X11-unix/
并询问他们的 vt 吗?或者甚至直接获取他们的附加到控制台(“活动”)状态?我找不到使用 Xlib 的明显方法,可能是因为 X 服务器 API 与 vts 无关,但也许有一个扩展?
谢谢你的帮助!