Как узнать, кто использует физическую консоль?

Я хотел бы использовать скрипт, чтобы узнать имя пользователя - пользователя, который в настоящее время находится на физической консоли (кто управляет клавиатурой, мышью и графическим дисплеем)?

Я не просто хочу знать, кто запускает X (поскольку текущая консоль может быть переключена на другой терминал и другого пользователя).


Чтобы уточнить:
Такие команды, как w, who и т. д., показывают, кто зарегистрирован на каком терминале. Это просто Я хотел бы знать, однако, кто в настоящее время владеет физической консолью (дисплей, клавиатура и т. Д.). Например, если два пользователя запускают дисплеи: 0 и: 1, и я могу переключаться между дисплеями с помощью ctrl + alt + 7 и < kbd> ctrl + alt + 8 , я хотел бы знать, какой пользователь в настоящее время имеет связь между его или ее дисплеем и фактическим, физическим экраном. [ 119]


Еще одно уточнение:
Мне не интересно знать мое собственное имя пользователя. У меня есть скрипт, работающий от имени другого пользователя или пользователя root, который должен знать, кто использует физический дисплей . Может быть несколько X-сессий, запущенных разными пользователями, некоторые из них виртуализированы, некоторые подключены к удаленному X-серверу, но меня интересует только тот, который фактически отображает вывод на мониторе.


Еще одно уточнение:
Какой бы ни была команда, после нажатия клавиш Ctrl + Alt + F1 (переключение на другую виртуальную консоль).

10
задан 4 October 2012 в 04:13

4 ответа

Другая команда

whoami

Показывает текущее зарегистрированное имя пользователя

.
0
ответ дан 4 October 2012 в 04:13

Есть много способов:

  • whoami
  • w
  • echo $USER
  • logname
0
ответ дан 4 October 2012 в 04:13
[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 указывает активный вход в систему, а время простоя указывает, что пользователь не был в системе в течение 2 дней. Сравните это с логином от blackbeauty, который имеет время простоя 0,00, что указывает на то, что он используется в настоящее время.

0
ответ дан 4 October 2012 в 04:13

Боюсь, я не могу дать вам конкретный ответ (потому что я не очень хорошо разбираюсь в технологиях), но я верю, что вы можете найти его, используя 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"

В частности, вы можете использовать метод 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

Затем, в зависимости от вашего приложения, вы захотите проверить свойства возвращаемого объекта, которые должны быть путем объекта к Секция .

0
ответ дан 4 October 2012 в 04:13

Другие вопросы по тегам:

Похожие вопросы: