DISPLAY
シェルの内部を検出する必要があるプロジェクトがあります(強く打つ)変数は一部を表示できます。焼きローカルコンピュータに何かがあります。
またはより良いソリューション(バス? )開いている焼きDISPLAY
合計を調べようとせずに非対話型シェルにありますXAUTHORITY
。
設定できますが、DISPLAY=:0
ユーザーが別のセッションを使用すると失敗します。
インタラクティブモードでない限り、私が試したことはうまくいきますが、ルートでのみ動作します。
strings /proc/$(pidof Xorg)/environ | grep -Eo 'DISPLAY=:[0-9]+(:[0-9])*'
またはユーザーとして:
ps uww $(pidof Xorg) | grep -oE '[[:blank:]]:[0-9]+(:[0-9])*\b'
しかし、どのLinux(Unixes?)でも信頼できるのかはわかりません。
より信頼性が高く携帯可能な方法はありますか?
答え1
init システムがあるディストリビューションでは、出力systemd
は次のようになります。
systemctl --user show-environment
マークDISPLAY
とXAUTHORITY
。少なくともgdm3
systemdとディスプレイマネージャを持つDebian 9システムの場合。
トラップ:startx xterm -- :2 vt2
tty2で実行した後、systemctlが表示され、DISPLAY
再XAUTHORITY
表示されます。私のデフォルトのモニターは:0
もはや同じではありません。
他の方法:
少なくともXAUTHORITY
、出力を解析してオプションを見つけることps aux | grep Xorg
がより安定しています-auth
。私が知っている限り、それは場所という/run/user/1000/gdm/Xauthority
よりも場所にあります~/.Xauthority
。
罠:
- Xorgインスタンスが複数存在する可能性があります。
- を使用できます
Xwayland
。 - Xorg以外に
Xvfb
他のものがあるかもしれません。 - ローカルXorgリモートセッションがまったくない可能性があります。
通常、Xorg
コマンドにはディスプレイ番号も含まれます。残念ながら、私のものには次のものはありません。
/usr/lib/xorg/Xorg vt1 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -background none -noreset -keeptty -verbose 3
-displayfd 3
なんとかルートDISPLAY
で見る場合。/proc/$(pidof Xorg)/fd/3
lrwx------ 1 root root 64 Mär 8 22:45 3 -> socket:[21437]
しかし、ソケットを見つける方法がわかりません21437
。/tmp/.X11-unix/X0
一つの方法はlsof +E -aUc Xorg
興味深い結果を示すことです。多くの接続には@/tmp/.X11-unix/X0
1つの接続が含まれていますdbus
。
やや汚れ:fd
フォルダにも表示されます。
l-wx------ 1 root root 64 Mär 8 22:45 5 -> /var/log/Xorg.0.log
Xorg.0.log
はディスプレイの明確な表示です:0
。
もう一つのアプローチ:魔法を集めて運ぶようnotify-send
です。しかし、どうすればいいのかわかりません。少なくとも1つのdbusデーモンが実行されている場合、これはおそらく最もクリーンで移植性の高い方法です。DISPLAY
XAUTHORITY
dbus
答え2
最終的なソリューションはルートを必要とせず、自動化された方法で非対話型シェルからアクセスでき、ソリューションよりはるかに高速です。冗長性以前に提供されたリンク:
- XAUTHORITY
:
ps -u $(id -u) -o pid= |
xargs -I{} cat /proc/{}/environ 2>/dev/null |
tr '\0' '\n' |
grep -m1 '^XAUTHORITY='
- DISPLAY
:
ps -u $(id -u) -o pid= |
xargs -I{} cat /proc/{}/environ 2>/dev/null |
tr '\0' '\n' |
grep -m1 '^DISPLAY='
このスニペットは、ユーザーのすべてのアイテムを一覧表示し、pids
それを繰り返し、最初の一致で中断されます。
に基づいてこれ