Loginctl 列出了很多会话,我想以编程方式知道哪一个是图形会话(例如 GNOME 桌面)。
在下面的示例中,我打开了一个 GNome 桌面会话、一个 ssh 连接和一个文本会话 (getty)。
$ loginctl
SESSION UID USER SEAT TTY
3 1000 user seat0 tty2
237 1000 user pts/2
260 1000 user seat0 tty3
3 sessions listed.
$
我可以猜测 tty2 是 GNome 会话,因为我可以使用 Ctrl+Alt+F2 切换到它。 tty3 是文本会话 (Ctrl+Alt+F3)。 pts/2 是剩余的 ssh 会话。然而,程序如何知道哪个是哪个呢?
注意:我不认为以下方法是解决方案,因为它们不严谨。用户可能可以打开一个新的 tty 并运行 /usr/libexec/gdm-x-session,这会欺骗我的程序
方法一:运行ps -aux | grep /usr/libexec/gdm-x-session
,查看:
... tty2 Sl+ 00:32 0:00 /usr/libexec/gdm-x-session
方法二:运行lsof /dev/tty2
,查看:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gdm-x-ses 3271 user 0u CHR 4,2 0t0 23 /dev/tty2
...
答案1
询问loginctl
每个会话的类型:
loginctl show-session -p Type 3
这将显示Type=x11
或Type=wayland
用于图形会话。