Loginctl lista muitas sessões, e quero saber programaticamente qual delas é uma sessão gráfica (por exemplo, desktop GNOME).
No exemplo abaixo, tenho uma sessão de desktop GNome aberta, uma conexão ssh aberta e uma sessão de texto (getty) aberta.
$ loginctl
SESSION UID USER SEAT TTY
3 1000 user seat0 tty2
237 1000 user pts/2
260 1000 user seat0 tty3
3 sessions listed.
$
Posso adivinhar que tty2 é a sessão do GNome, porque posso mudar para ela usando Ctrl+Alt+F2. tty3 é a sessão de texto (Ctrl+Alt+F3). pts/2 é a sessão ssh restante. No entanto, como um programa pode saber qual é qual?
Nota: não creio que as formas a seguir sejam soluções, porque não são rigorosas. O usuário provavelmente pode abrir um novo tty e executar /usr/libexec/gdm-x-session, o que enganará meu programa
Método 1: execute ps -aux | grep /usr/libexec/gdm-x-session
, veja:
... tty2 Sl+ 00:32 0:00 /usr/libexec/gdm-x-session
Método 2: Execute lsof /dev/tty2
, veja:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gdm-x-ses 3271 user 0u CHR 4,2 0t0 23 /dev/tty2
...
Pergunte
loginctl
o tipo de cada sessão:Isso mostrará
Type=x11
ouType=wayland
para sessões gráficas.