DISPLAYが有効であることを確認する方法

DISPLAYが有効であることを確認する方法

マニュアルページX(7)を読んでこの問題を検索しましたが、解決策が見つかりませんでした。

DISPLAY=:0環境がまだ表示に有効な場合、長期実行プロセスをどのように確認できますか? (ユーザーは同時にログアウトできますが、プロセスはまだ存在します)

最も重要なのは、DISPLAYがまだ次のものであることを確認することです。<USER>

答え1

たぶん、次のようなものがあります。

if sudo -Hu "$user" xdpyinfo -display "$DISPLAY" > /dev/null 2>&1; then
  echo "user $user can connect to display $DISPLAY"
else
  echo "user $user cannot connect to display $DISPLAY"
fi

存在しない場合は、xdpyinfoXサーバーに何も表示しない標準の単純X11ユーティリティを使用してみることができます(上記のようにstdoutとstderrは/ dev / nullにリダイレクトされます)。

xlsatoms -name PRIMARY
xprop -notype -root CUT_BUFFER0
xwininfo -root

答え2

有効なディスプレイであれば、:0プロセス(つまり、それを提供したxserver)はルートが所有しているはずです。 「効果的」をどう理解しても構いません。

xserverに接続できるかどうか疑問に思う場合は、xlsclientsこのモニターに接続を使用することをお勧めします。コマンドが接続できる場合は0を返し、接続できない場合は1を返します。

Xがどのように機能するかは、1人のユーザーが一度に1つのxserverに接続することではありません。ユーザーをxsessionsにバインドするには、xserverに接続されているプログラムを見る必要があります。ウィンドウマネージャは常に1つの(アクティブ)ウィンドウマネージャしか持てないので、良い候補です。ディスプレイマネージャから始めて、プロセス関係(親プロセス、子プロセス)を追跡することもできます。しかし、これは決して些細なことではありません。おそらく、ディスプレイ管理者はこの情報をどこかに保存したかもしれませんが、わかりません。

関連情報