哪个用户拥有X显示屏?


4

如何以root用户身份确定哪个用户拥有X显示:0?(在具有默认设置的Fedora 18系统上)

澄清:我想知道哪个用户具有连接到:0的原始权限,并授予其他用户连接的权限。根据下面的当前答案,似乎root拥有X进程,但是启动它的用户可能具有权限。


3
您的问题实际上是“谁打开了显示0上的会话”吗??在这种情况下,您应该考虑编辑问题。在这里,我将问题理解为“谁启动了创建显示:0的进程?”。
lgeorget

并且如果问题是“连接了哪个用户以显示:0”,则没有好的答案:可以将多个用户连接到:0,并且在X服务器上启用网络连接后,即使本地计算机上不存在用户也是如此。是的,今天大多数情况下只有一个用户登录到X,但这不是体系结构的工作方式。
6

@lgeorget不,这不是问题。我添加了一个澄清
死灵法师

@dirkt为我的问题添加了澄清
死灵法师

Answers:


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并使用display :0。但是,root是该X过程的所有者。

在大多数安装中,用户不使用xinit命令(或startx 内部调用xinit)。X服务器在引导过程中由root启动。在这种情况下,root是显示的“所有者”。


没有Xinit出现在我的系统上,Fedora 18具有默认设置
necromancer

好的,但是您看到一个X由root拥有的进程吗?这意味着X服务器是由root启动并拥有的。因此,您有答案。我将编辑我的答案以处理这种情况。
lgeorget

嗯..是的,但是我没有以root用户身份在图形用户上登录,并且显示不属于root。我认为“ -auth / home / user0001 / ...”行可能会有所帮助
necromancer

1
如果您的问题是“如何知道谁登录”,请尝试使用该w命令。并且请重新表述您的问题,这有点模棱两可;-)。
lgeorget

1

从systemd到 login的抢救:

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列表,查看哪一个是ID,x11然后打印用户名。对于Wayland,类型wayland为MIR;对于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

0

这是确切的命令:

ps ho user $(pgrep X)

未经测试,但看起来很聪明,处于正确的水平。投票否定未评论的投票。
死灵法师

0

回答您的澄清:这取决于。

用户可以启动X服务器。

但是,大多数发行版都使用显示管理器(DM)启动X服务器。这是root拥有的系统服务,该服务以root身份启动X服务器,显示登录屏幕,然后通过授予该特定用户对此显示的访问权限(例如:0xauth

至于“哪个用户可以授予其他用户连接权限”:同样,这取决于。默认情况下,现代发行版使用xauth,并将X服务器限制为本地用户。然后,任何已经连接的用户都可以使用xauth获取有效的MIT授权cookie,并将该cookie传递给另一个用户,然后在添加此cookie之后依次进行连接。

除非发行版采取了其他措施,以确保只有一个用户可以连接与该显示器相对应的Unix域套接字(如果某些发行版这样做,我不会感到惊讶)。


我认为Xorg还会在抽象的Unix域套接字上侦听,因此任何人都可以连接到该套接字?尽管Xorg可能拒绝提供任何进一步的X11协议响应,但是connect()syscall对于任何用户都将成功。
炸鱼薯条德里克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.