![X 디스플레이를 소유한 사용자는 누구입니까?](https://rvso.com/image/31636/X%20%EB%94%94%EC%8A%A4%ED%94%8C%EB%A0%88%EC%9D%B4%EB%A5%BC%20%EC%86%8C%EC%9C%A0%ED%95%9C%20%EC%82%AC%EC%9A%A9%EC%9E%90%EB%8A%94%20%EB%88%84%EA%B5%AC%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
X 디스플레이 :0을 소유한 사용자를 루트로서 확인하는 방법은 무엇입니까? (기본값이 있는 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
GDM을 사용하는 Ubuntu 18.04에서 작동하는 한 가지 예입니다(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에 의해 시작되므로 루트 또는 유사한 사용자로 실행됩니다(좌석의 HW 장치에 액세스할 수 있으므로). 다른 세션에서 사용할 수 있도록 해당 사용자에 대한 권한 파일이 생성됩니다.
내가 찾은 또 다른 해결책로그인한 사용자와 해당 디스플레이를 식별하는 가장 좋은 방법은 무엇일까요?(그러나 여러 사용자가 동일한 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 디스플레이에서도 작동했습니다).