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

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

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


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


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


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

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

例如,当我从X切换到VT并返回时,我会在dbus-monitordbus-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的对象路径。

 [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.10sw [geek@atremis ~]$ 

您可以使用w命令查看登录的用户。 空闲时间以及应该告诉您正在运行的内容 – 在这种情况下,gdm表示活动登录,空闲时间表示用户在2天内未在系统中。 将其与来自blackbeauty的登录进行对比,该登录具有0.00空闲时间,表示其当前正在使用。

有很多方法:

  • whoami
  • w
  • echo $USER
  • logname

另一个命令是

 whoami 

它显示了当前的logeed用户名