¿Qué usuario posee la pantalla X?

¿Qué usuario posee la pantalla X?

¿Cómo determinar, como root, qué usuario posee la pantalla X: 0? (en un sistema Fedora 18 con valores predeterminados)

Aclaración:Quiero saber qué usuario tiene permisos originales para conectarse: 0 y otorgar permiso a otros usuarios para conectarse. Según las respuestas actuales a continuación, parece que root es propietario del proceso X, pero el usuario que lo inició puede tener permisos.

Respuesta1

ps -ef|grep Xte dara la informacion.

Por ejemplo, en mi computadora:

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

Aquí podemos ver que user001se lanzó xinity usa la pantalla :0. Sin embargo, rootes el dueño del Xproceso.

En la mayoría de las instalaciones, los usuarios no usan el xinitcomando (o startx el cual llama internamente xinit). El servidor X se inicia mediante root durante el proceso de inicio. En ese caso, root es el "propietario" de la pantalla.

Respuesta2

iniciar sesiónctlde systemd al rescate:

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

Obtenga la lista de ID de sesión, vea cuál es de tipo x11e imprima el nombre de usuario. Para Wayland el tipo es waylandy para MIR es mirsegún el iniciar sesión Documentación de la API de D-Bus.

Uso interactivo:

[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

Respuesta3

Este es el comando exacto:

ps ho user $(pgrep X)

Respuesta4

Un ejemplo que funciona en Ubuntu 18.04 con GDM (no probé lightdm). Entonces, para este escenario, responde esas preguntas. Solo si alguien quiere borrar la respuesta nuevamente... (cómo encontrar usuarios de una pantalla).

Para GDM en Ubuntu 18.04

loginctl show-session 2 -p Display

Se imprimirá Display=aunque esté la sesión utilizando la pantalla. Sin embargo, las soluciones a continuación funcionaron.


~$ 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)

o

~$ 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

Como usted dijo, dado que el DM inicia el Xserver, se ejecutará como usuario root o similar (ya que se le permite acceder a los dispositivos HW del asiento). Para permitir que otra sesión utilice un archivo de autoridad, se crea para el Usuario.


Otra solución que encontré en¿La mejor manera de identificar a los usuarios que han iniciado sesión y su PANTALLA?(pero creo que fallará tan pronto como varios usuarios se ejecuten en la misma pantalla X) es:

#!/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

Básicamente, consulta el entorno de todos los procesos de un usuario y guarda para cada pantalla qué usuario pertenecía a él. (También funcionó para mis pantallas VNC).

información relacionada