コンソールに接続されている X サーバー、つまり現在マウス/キーボード/スクリーンによって制御されている 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 について尋ねることはできますか? または、コンソールに接続された (「アクティブ」) 状態を直接取得しますか? おそらくXサーバーAPIがvtsに依存しないため、Xlibでそれを行う明白な方法を見つけることができませんでしたが、おそらくこれには拡張機能がありますか?
助けてくれてありがとう!