しかし...

しかし...

私は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サーバーが起動された場合)。他の方法はわかりません。申し訳ありません。

おすすめ記事