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

10

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

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


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


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


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

январь
источник
Это самостоятельные вопросы и ответы?
Джокердино
Нет, к сожалению.
января

Ответы:

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"

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

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

nfirvine
источник
3
Очень полезно, я думаю. Когда я переключаю сеансы, ответ переключается соответственно. В частности, я мог бы затем ввести следующую команду: dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit.Session.GetUserкоторая отвечает с текущим идентификатором пользователя. Оттуда библиотечная функция getpwuid может получить имя пользователя.
Джон С. Грубер
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 указывает активный вход в систему, а время простоя указывает, что пользователь не был в системе в течение 2 дней. Сравните это с логином от blackbeauty, который имеет время простоя 0,00, что указывает на то, что он в данный момент используется.

Подмастерье
источник
Нет, это только говорит мне - как вы написали - кто вошел в систему на каком терминале . Чтобы использовать со сценарием, я хотел бы знать, какой пользователь владеет физической консолью (клавиатура, дисплей и т. Д.)
декабря
PS простой также неинформативен; Я работаю над скриптом, работающим с заставкой, но я хочу знать, какой пользователь запускает заставку, которая на самом деле отображается .
января
TTY и «что» могут работать здесь, вам просто нужно извлечь нужные биты.
подмастерье Компьютерщик
Хм, нет, потому что он может работать где угодно (в фоновом режиме, на другом X-сервере, на виртуальной машине)
декабря
1

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

  • whoami
  • w
  • echo $USER
  • logname
hytromo
источник
0

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

whoami

Показывает текущее имя пользователя logeed

Кетан Патель
источник