Jan*_*ary 10 command-line tty console login username
我想使用脚本找出当前在物理控制台上的用户的用户名(拥有键盘、鼠标和图形显示的命令)?
我不只是想知道谁运行 X(因为当前的控制台可以切换到另一个终端和另一个用户)。
为了澄清:
命令一样w,who等显示谁在哪个终端登录。这很简单。但是,我想知道目前谁拥有物理控制台(显示器、键盘等)。例如,如果两个用户运行显示:0和1,并且我可以用显示之间切换ctrl+ alt+7和ctrl+ alt+ 8,我想知道哪个用户当前具有他或她的显示和实际,物理屏幕之间的连接.
再澄清一点:
我对知道自己的用户名不感兴趣。我有一个脚本,以另一个用户或 root 身份运行,需要知道谁使用物理显示器。可以有多个 X 会话由不同的用户运行,其中一些是虚拟的,一些连接到远程 X 服务器,但我只对实际在监视器上显示输出的那个感兴趣。
另一个澄清:
无论命令是什么,按Ctrl+ Alt+ F1(切换到另一个虚拟控制台)后输出必须不同。
恐怕我不能给你一个具体的答案(因为我不太了解技术),但我相信你可以使用 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的对象路径。
[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,表示当前正在使用。