Я хотел бы использовать скрипт, чтобы узнать имя пользователя - пользователя, который в настоящее время находится на физической консоли (кто управляет клавиатурой, мышью и графическим дисплеем)?
Я не просто хочу знать, кто запускает X (поскольку текущая консоль может быть переключена на другой терминал и другого пользователя).
Чтобы уточнить: Еще одно уточнение: Еще одно уточнение:
Такие команды, как w
, who
и т. д., показывают, кто зарегистрирован на каком терминале. Это просто Я хотел бы знать, однако, кто в настоящее время владеет физической консолью (дисплей, клавиатура и т. Д.). Например, если два пользователя запускают дисплеи: 0 и: 1, и я могу переключаться между дисплеями с помощью ctrl kbd> + alt kbd> + 7 kbd> и < kbd> ctrl kbd> + alt kbd> + 8 kbd>, я хотел бы знать, какой пользователь в настоящее время имеет связь между его или ее дисплеем и фактическим, физическим экраном. [ 119]
Мне не интересно знать мое собственное имя пользователя. У меня есть скрипт, работающий от имени другого пользователя или пользователя root, который должен знать, кто использует физический дисплей . Может быть несколько X-сессий, запущенных разными пользователями, некоторые из них виртуализированы, некоторые подключены к удаленному X-серверу, но меня интересует только тот, который фактически отображает вывод на мониторе.
Какой бы ни была команда, после нажатия клавиш Ctrl kbd> + Alt kbd результат должен быть другим > + F1 kbd> (переключение на другую виртуальную консоль).
Другая команда
whoami
Показывает текущее зарегистрированное имя пользователя
.Есть много способов:
whoami
w
echo $USER
logname
[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, что указывает на то, что он используется в настоящее время.
Боюсь, я не могу дать вам конкретный ответ (потому что я не очень хорошо разбираюсь в технологиях), но я верю, что вы можете найти его, используя 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
Затем, в зависимости от вашего приложения, вы захотите проверить свойства возвращаемого объекта, которые должны быть путем объекта к Секция .