如何找出谁在使用物理控制台?

Jan*_*ary 10 command-line tty console login username

我想使用脚本找出当前在物理控制台上的用户的用户名(拥有键盘、鼠标和图形显示的命令)?

我不只是想知道谁运行 X(因为当前的控制台可以切换到另一个终端和另一个用户)。


为了澄清:
命令一样wwho等显示谁在哪个终端登录。这很简单。但是,我想知道目前谁拥有物理控制台(显示器、键盘等)。例如,如果两个用户运行显示:0和1,并且我可以用显示之间切换ctrl+ alt+7ctrl+ alt+ 8,我想知道哪个用户当前具有他或她的显示和实际,物理屏幕之间的连接.


再澄清一点:
我对知道自己的用户名不感兴趣。我有一个脚本,以另一个用户或 root 身份运行,需要知道谁使用物理显示器。可以有多个 X 会话由不同的用户运行,其中一些是虚拟的,一些连接到远程 X 服务器,但我只对实际在监视器上显示输出的那个感兴趣。


另一个澄清:
无论命令是什么,按Ctrl+ Alt+ F1(切换到另一个虚拟控制台)后输出必须不同。

nfi*_*ine 6

恐怕我不能给你一个具体的答案(因为我不太了解技术),但我相信你可以使用 D-Bus 和 ConsoleKit 找到它。

例如,当我从 X 切换到 VT 并返回时,我听到了dbus-monitor

$ dbus-monitor --system | grep ConsoleKit
signal sender=:1.16 -> dest=(null destination) serial=19039 path=/org/freedesktop/ConsoleKit/Session2; interface=org.freedesktop.ConsoleKit.Session; member=ActiveChanged
signal sender=:1.16 -> dest=(null destination) serial=19040 path=/org/freedesktop/ConsoleKit/Seat1; interface=org.freedesktop.ConsoleKit.Seat; member=ActiveSessionChanged
signal sender=:1.16 -> dest=(null destination) serial=19041 path=/org/freedesktop/ConsoleKit/Session2; interface=org.freedesktop.ConsoleKit.Session; member=ActiveChanged
signal sender=:1.16 -> dest=(null destination) serial=19042 path=/org/freedesktop/ConsoleKit/Seat1; interface=org.freedesktop.ConsoleKit.Seat; member=ActiveSessionChanged
   string "/org/freedesktop/ConsoleKit/Session2"
Run Code Online (Sandbox Code Playgroud)

具体来说,您可以使用GetActiveSession方法。这是如何使用dbus-send(可能需要sudo):

$ dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Seat1 org.freedesktop.ConsoleKit.Seat.GetActiveSession
Run Code Online (Sandbox Code Playgroud)

然后,根据您的应用程序,您需要检查返回对象的属性,它应该是Session的对象路径。

  • 很有帮助,我想。当我切换会话时,回复会相应地切换。特别是我可以输入以下命令:`dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit。 Session.GetUser` 回复当前用户 ID。从那里库函数 getpwuid 可以获取用户名。 (3认同)

Jou*_*eek 5

[geek@atremis ~]$ w

 20:02:02 up 2 days,  8:37,  3 users,  load average: 0.00, 0.01, 0.00

USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT

geek     tty1     :0               Thu11    2days 35.11s  0.18s pam: gdm-passwo

geek     pts/0    athena           Fri22   21:04m  0.03s  0.03s -bash

geek     pts/1    blackbeauty      20:02    0.00s  0.14s  0.10s w

[geek@atremis ~]$
Run Code Online (Sandbox Code Playgroud)

您可以使用 w 命令查看谁已登录。空闲时间和什么应该告诉您正在运行什么 - 在这种情况下 gdm 表示活动登录,空闲时间表示用户在 2 天内没有访问系统。将此与来自 blackbeauty 的登录进行对比,后者的空闲时间为 0.00,表示当前正在使用。