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


10

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

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


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


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



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


这是自我问答吗?
jokerdino

不,很不幸。
一月

Answers:


6

恐怕我无法给您具体的答案(因为我不太了解该技术),但是我相信您可以使用D-Bus和ConsoleKit来找到答案。

例如,当我从X切换到VT然后又切换回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"

具体来说,您可以使用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

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


3
我认为非常有帮助。当我切换会话时,回复会相应地切换。特别地,然后我可以输入以下命令:dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit.Session.GetUser该命令以当前的用户ID答复。从那里,库函数getpwuid可以获取用户名。
约翰·格鲁伯

1
这绝对是我一直在寻找的答案。非常感谢你!
1

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

您可以使用w命令查看谁已登录。空闲时间以及应该告诉您什么正在运行-在这种情况下,gdm表示活动登录,而空闲时间表示用户两天内没有来过系统。将其与blackbeauty的登录进行对比,该登录有0.00的空闲时间,表明其当前正在使用中。


不,这只是告诉我-正如您所写的-谁在哪个终端上登录。要与脚本一起使用,我想知道哪个用户拥有物理控制台(键盘,显示器等)
1

PS空闲时间也不具参考性;我正在研究摆弄屏幕保护程序的脚本,但是我想知道哪个用户正在运行实际显示的屏幕保护程序。
1

TTY和“什么”可能在这里起作用,您只需要提取必要的位即可。
Journeyman Geek

嗯,不,因为它可以在任何地方(在后台,在另一台X服务器上,在虚拟机中)运行
1


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.