私はArch Linuxを使用しています(env変数を介さずに)、現在Xorg DISPLAYを検索しようとすると、状況はそれほど簡単ではありません。
以下は実際の例です。
$ cat /sys/class/tty/tty0/active
tty2
who | awk -v term="tty2" '/\(:/ $0 ~ term { gsub(/\(|\)/, "", $0); print $5 }'
:0
これは場合によっては機能しますが、他の場合は機能しません。
$ cat /sys/class/tty/tty0/active
tty3
who | awk -v term="`cat /sys/class/tty/tty0/active`" '/\(:/ $0 ~ term { gsub(/\(|\)/, "", $0); print $5 }'
NOTHING
理由:
$ who
uzumaki tty2 2015-05-16 10:50 (:0)
guest pts/2 2015-05-16 11:47 (:1)
uzumaki tty4 2015-05-16 11:07
ゲストユーザー(tty3)はpts(擬似端末)を使用してセッションを開始します。
私は特定のコマンドなしでxorgサーバーを起動するgdmを使用しています(表示番号は明確ではありません)。
$ ps au | grep -e Xorg -e vt
uzumaki 788 1.4 0.9 740464 150672 tty2 Sl+ 10:50 5:38 /usr/lib/xorg-server/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty -verbose 3
guest 1062 0.0 0.1 465748 32344 tty3 Sl+ 10:51 0:19 /usr/lib/xorg-server/Xorg vt3 -displayfd 3 -auth /run/user/1002/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty -verbose 3
したがって、質問は次のようになります。現在(使用中の)Xserver DISPLAYの数を見つけるには?これは、上記のように複数のサーバー(複数のユーザー)を持つことができるためです。
ベストアンサー1
loginctl list-sessions
セッションリストのインポートを使用してから、loginctl show-session -p Display -p Active <session ID>
各セッションを使用して現在アクティブなセッションに関連付けられているX11ディスプレイ番号を取得できます。
次のようなもの(bashから):
TARGET_DISPLAY=()
while read id uid user seat; do
while IFS='=' read property value; do
case "$property" in
Active)
if [[ "$value" != "yes" ]]; then continue; fi
;;
Display)
if [[ "$value" ]]; then
TARGET_DISPLAY+=( "$value" )
fi
# else the session isn't graphical
;;
esac
done < <(loginctl show-session -p Display -p Active "$id")
done < <(loginctl list-sessions --no-legend)
$TARGET_DISPLAY
マルチシートシステムで複数のアクティブセッションがある可能性があると仮定するため、ここに配列があります。構成でこれが可能でない場合は、それを単純な変数にし、break 2
割り当て後にステートメントを追加して両方のループを終了できます。
しかし...
...この場合、Xサーバーが起動するため、GDMでは動作しなくなります。~へセッション(ユーザー権限を含む)であり、/usr/bin/gdm-x-session
この情報は再度渡されませんlogind
(対応するAPIがないため)。
これは他の場合でも動作する可能性が高いです(セッションを作成する前にDMによってXサーバーが起動された場合)。他の方法はわかりません。申し訳ありません。