Xディスプレイを所有しているユーザーは誰ですか?

Xディスプレイを所有しているユーザーは誰ですか?

ルートとしてXディスプレイを所有しているユーザーをどのように確認できますか? (デフォルトのFedora 18システム)

言う:どのユーザーが :0 に接続する元の権限を持っているかを知り、他のユーザーに接続権限を付与したいと思います。以下の現在の回答によると、rootはXプロセスを所有していますが、それを開始したユーザーに権限があるようです。

答え1

ps -ef|grep X情報をお知らせします。

たとえば、私のコンピュータでは次のようになります。

user001  2721  2705  0 02:35 tty1     00:00:00 xinit /home/user001/.xinitrc -- /etc/X11/xinit/xserverrc :0 -auth /home/user001/.serverauth.2705
root      2722  2721 13 02:35 tty7     00:10:10 /usr/bin/X -nolisten tcp :0 -auth /home/user001/.serverauth.2705
user001  3475  3462  0 03:51 pts/0    00:00:00 grep X

user001ここでは、ディスプレイが起動しxinitて使用されていることがわかります:0。ただし、rootこれはプロセスの所有者ですX

ほとんどのインストールでは、このxinitコマンドはユーザーによって使用されません(またはstartx 内部で呼び出されますxinit)。 X サーバーは、ブートプロセス中に root で始まります。この場合、ルートはディスプレイの「所有者」です。

答え2

ログイン制御systemdから構造まで:

loginctl --no-legend list-sessions \
  | cut -d ' ' -f 1 \
  | while read sessionid; do \
    [ $(loginctl --property Type --value show-session $sessionid) = 'x11' ] \
      && loginctl --property Name --value show-session $sessionid; \
  done

セッションIDのリストを取得し、どのタイプに属しているかを確認し、x11ユーザー名を印刷します。 Waylandの場合、タイプはでwayland、MIRの場合、タイプは以下mirに基づいています。D-Bus API ドキュメントにログイン

インタラクティブな使用:

[ciupicri@titan /]$ loginctl list-sessions 
SESSION  UID USER     SEAT  TTY
      2 5000 ciupicri seat0    
      4 6000 somebody             
      9 6000 somebody             

3 sessions listed.
[ciupicri@titan /]$ loginctl show-session 2
Id=2
User=5000
Name=ciupicri
Timestamp=Thu 2019-09-12 16:24:12 EEST
TimestampMonotonic=46881112
VTNr=1
Seat=seat0
Display=:0
Remote=no
Service=lightdm-autologin
Desktop=xfce
Scope=session-2.scope
Leader=2072
Audit=2
Type=x11
Class=user
Active=yes
State=active
IdleHint=no
IdleSinceHint=0
IdleSinceHintMonotonic=0
LockedHint=no

答え3

正確なコマンドは次のとおりです。

ps ho user $(pgrep X)

答え4

Ubuntu 18.04でGDMを実行する例(lightdmを試していません)したがって、この場合はこれらの質問に答えます。ただまた返信削除したい方がいらっしゃるなら…(モニターユーザーを探す方法)。

Ubuntu 18.04のGDM用

loginctl show-session 2 -p Display

Display=モニター・セッションが使用中であるにもかかわらず、印刷が発生します。しかし、以下の解決策が機能します。


~$ who
user     :1           2020-03-02 07:28 (:1)
user     tty3         2020-03-03 09:39
user     pts/1        2020-03-03 10:19 (some IP)

または

~$ w
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user     tty7     :0               15:12    1:48m  1:50   0.23s /usr/lib/gnome-
user     pts/2    SomeIP           16:58    1:39   0.04s  0.04s -bash

ご存知のように、XserverはDMによって起動されるため、ルートまたは同様の権限で実行されます(座席のハードウェアデバイスにアクセスできるため)。そのユーザーに対して生成された権限ファイルを別のセッションで使用できるようにします。


私が見つけた別の解決策ログインしたユーザーとそのディスプレイを識別する最良の方法は何ですか?(しかし、複数のユーザーが同じXモニターで実行されていると失敗すると思います)は次のようになります。

#!/bin/bash


declare -A disps usrs
usrs=()
disps=()
for i in $(users);do
    [[ $i = root ]] && continue
    usrs[$i]=1
done # unique names

#Use .*DISPLAY=(\w*:[0-9.]+).* if you want to see DISPLAY of form :0.1 
#or localhost:10.0 too
for u in "${!usrs[@]}"; do
    for i in $(sudo ps e -u "$u" | sed -rn 's/.* DISPLAY=(:[0-9]*).*/\1/p');do
        disps[$i]=$u
    done
done

for d in "${!disps[@]}";do
    echo "User: ${disps[$d]}, Display: $d"
done

デフォルトでは、すべてのプロセスに対してユーザーエクスペリエンスを照会し、ユーザーが属するすべてのディスプレイを保存します。 (私のVNCディスプレイでも動作します)。

関連情報