哪個使用者擁有 X 顯示?

哪個使用者擁有 X 顯示?

身為 root,如何確定哪個使用者擁有 X display :0? (在具有預設值的 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 啟動。在這種情況下,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 啟動的,它將作為 root 或類似用戶運行(因為它被允許訪問席位的硬體設備)。為了允許另一個會話使用為該使用者建立的權限檔案。


我找到的另一個解決方案識別登入使用者及其顯示的最佳方法?(但我認為,一旦多個用戶在同一個 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 顯示)。

相關內容