X 디스플레이를 소유한 사용자는 누구입니까?

X 디스플레이를 소유한 사용자는 누구입니까?

루트로서 X 디스플레이를 소유한 사용자를 어떻게 확인할 수 있습니까? (기본값이 있는 Fedora 18 시스템)

밝히다:어떤 사용자가 :0에 연결할 수 있는 원래 권한을 가지고 있는지 알고 싶고 다른 사용자에게 연결 권한을 부여하고 싶습니다. 아래의 현재 답변에 따르면 루트가 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 서버는 부팅 프로세스 중에 루트로 시작됩니다. 이 경우 루트는 디스플레이의 "소유자"입니다.

답변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 디스플레이에서도 작동합니다).

관련 정보