GNU/Linux >> Linux の 問題 >  >> Linux

Xによって割り当てられたディスプレイ番号を取得する方法

ユーザーのセッションで実行されているプロセス ID が 1 つわかっていて、そのプロセスの情報にアクセスする権限がある場合は、DISPLAY の環境を grep できます。 変数:

cat /proc/$pid/environ | tr '\0' '\n' | grep ^DISPLAY=

例として、現在のコンピューターで UID によって使用されているすべてのメイン ディスプレイを一覧表示するには、次を使用します。

ps -u $(id -u) -o pid= \
    | xargs -I PID -r cat /proc/PID/environ 2> /dev/null \
    | tr '\0' '\n' \
    | grep ^DISPLAY=: \
    | sort -u

1 つの X セッションにのみログインしている場合、上記は DISPLAY=:0 のような 1 行のみを出力するはずです。 .


X セッションでは、いつでも DISPLAY を参照できます。 現在のディスプレイ番号を取得する環境変数 (echo $DISPLAY ).

他の人を見つける 表示数値は厳しいです。どのディスプレイに接続しているかをすべてのユーザーに尋ねる以外に、情報を取得する標準的な方法はないと思います。そのため、この情報を取得しようとすると何らかのハッカーが必要になり、すべての場合にうまくいくとは限りません。

SE の他の場所でいくつかのオプションが提供されていますが、たとえば Debian Wheezy では機能しません。ただし、上でリンクした投稿に示されているように、現在アクティブなディスプレイを一覧表示するのは簡単です。

ps axu | grep "X " 次のように、現在実行中の X プロセスが表示されます:

root      2354  0.0  0.5  23380 18292 tty8     Ss+  Sep15   2:36 /usr/bin/X :1 vt8 -br -nolisten tcp -auth /var/run/xauth/A:1-7xlyuc
root      7901  0.0  0.3  17044 12072 tty7     Ss+  Sep14   5:58 /usr/bin/X :0 vt7 -br -nolisten tcp -auth /var/run/xauth/A:0-wckh0a

/usr/bin/X の後の最初のパラメーター はコロンで始まるディスプレイ番号で、次はセッションに割り当てられた仮想端末を示します。

ただし、プロセス リストを見れば答えが得られるかもしれません。

ps axu |grep -3 "X "

root      1990  0.0  0.0      0     0 ?        S    Sep14   0:00 [kjournald]
root      1991  0.0  0.0      0     0 ?        S    Sep14   0:00 [kjournald]
root      1992  0.0  0.0      0     0 ?        S    Sep14   0:00 [kjournald]
root      2354  0.0  0.5  23380 18292 tty8     Ss+  Sep15   2:36 /usr/bin/X :1 vt8 -br -nolisten tcp -auth /var/run/xauth/A:1-7xlyuc
root      2359  0.0  0.0   5264  2228 ?        S    Sep15   0:00 -:1            
user_1     2378  0.0  0.0   4920  1348 ?        Ss   Sep15   0:00 /bin/sh /usr/bin/startkde
user_1     2443  0.0  0.0   3868   348 ?        Ss   Sep15   0:00 /usr/bin/ssh-agent env TMPDIR=/var/tmp /usr/bin/dbus-launch --exit-with-session /usr/bin/openbox-kde-session
--
root      7500  0.0  0.0   6460  1080 ?        Ss   Sep14   0:00 /usr/sbin/sshd
ntp       7841  0.0  0.0   5352  1760 ?        Ss   Sep14   0:17 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 108:111
root      7882  0.0  0.0   3964   716 ?        Ss   Sep14   0:00 /usr/bin/kdm -config /var/run/kdm/kdmrc
root      7901  0.0  0.3  17044 12072 tty7     Ss+  Sep14   5:59 /usr/bin/X :0 vt7 -br -nolisten tcp -auth /var/run/xauth/A:0-wckh0a
root      7906  0.0  0.0   5260  2224 ?        S    Sep14   0:00 -:0            
user_2    7925  0.0  0.0  12924  1560 ?        Ssl  Sep14   0:00 /usr/bin/lxsession -s LXDE -e LXDE
user_2    7990  0.0  0.0   3868   348 ?        Ss   Sep14   0:00 /usr/bin/ssh-agent env TMPDIR=/var/tmp /usr/bin/dbus-launch --exit-with-session /usr/bin/startlxde

/usr/bin/X の後の行を見てください - X セッションが開始すると、ウィンドウ マネージャーは通常、セッションが属するユーザーとして開始され、そこでユーザー名を取得します。私の場合、user_1 は KDE を使用しており、user_2 は LXDE を使用しています。 ただし、この解決策は、カーネルがたまたま昇順で新しいプロセス ID を割り当てているという事実に完全に依存しており、常にそうであるとは限りません。


この回答には、 who に基づくワンライナーがあります &grep

https://askubuntu.com/a/230838/152287

who w と省略できます

値を取得するためのワンライナーを含むリンクで詳細を読むことができます.

できます。これは raspberrypi (rasbian) の出力で、表示値は FROM 列にあります

[email protected]:~ $ w
 19:19:30 up  8:15,  2 users,  load average: 0.12, 0.11, 0.09
USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
pi       tty7     :0               11:04    8:15m  1:15   0.89s /usr/bin/lxsess
tim      pts/0    192.168.0.29     19:17    0.00s  1.00s  0.09s w

Linux
  1. システム管理者(root)としてコマンドを実行する方法は?

  2. Kshのバージョンを安全に入手する方法は?

  3. 内部カードリーダーの種類を取得するにはどうすればよいですか?

  1. mysql ルート パスワードを変更する方法

  2. bash でディスク上で利用可能なバイト数のみを取得するにはどうすればよいですか?

  3. bashで文字列から最後の数字を取得するにはどうすればよいですか?

  1. sudoの内部はどのように機能しますか?

  2. Cを使用してLinuxでCPUの数を取得するには?

  3. Linux で物理ディスクの数を取得するには?