【发布时间】:2012-08-29 15:51:04
【问题描述】:
我想以编程方式找到连接到控制台的 X 服务器,这意味着当前由鼠标/键盘/屏幕控制。
我假设有一种干净的方法可以获取当前的 vt(使用 /dev/console?)。 fgconsole code (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
要做到这一点...有没有更可靠的方法?
我可以连接到/tmp/.X11-unix/ 中列出的所有 X 服务器并询问他们的 vt 吗?
或者甚至直接获取他们的附加到控制台(“活动”)状态?我找不到使用 Xlib 的明显方法,可能是因为 X 服务器 API 与 vts 无关,但也许有一个扩展?
感谢您的帮助!
【问题讨论】:
标签: c linux console xorg xserver