Я хотел бы программно найти 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 не может быть консолью - мы говорим о запросе fgconsole внутри xterm).
Затем мне нужно будет сопоставить vt (например, vt7) с X-дисплеем. Однако я бы предпочел не полагаться на
ps aux | grep X
для этого... Есть ли более надежный способ? Могу ли я подключиться ко всем X-серверам, перечисленным в /tmp/.X11-unix/
, и спросить их об их vt? Или даже напрямую получить их состояние «подключено к консоли» («активно»)? Я не смог найти очевидный способ сделать это с помощью Xlib, вероятно, потому, что API-интерфейс X-сервера не зависит от vts, но, может быть, для этого есть расширение?
Спасибо за любую помощь!