Як дізнатися, хто використовує фізичну консоль?


10

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

Я не просто хочу знати, хто працює з X (оскільки поточну консоль можна переключити на інший термінал та іншого користувача).


Для уточнення:
такі команди, як wі whoт.д., показують, хто входить у який термінал. Це просто. Мені хотілося б знати, кому в даний час належить фізична консоль (дисплей, клавіатура тощо). Наприклад, якщо два користувачі запускають дисплеї: 0 і: 1, і я можу перемикатися між дисплеями за допомогою ctrl+ alt+ 7та ctrl+ alt+ 8, я хотів би знати, який користувач наразі має зв’язок між його дисплеєм та фактичним фізичним екраном .


Ще одне уточнення:
мені не цікаво знати власне ім’я користувача. У мене є сценарій, який працює як інший користувач або root, який повинен знати, хто використовує фізичний дисплей. Тут можуть бути кілька X сеансів, які працюють різні користувачі, деякі з них віртуалізовані, деякі з них підключені до віддаленого X-сервера, але мене цікавить лише той, який насправді відображає вихід на моніторі.


Ще одне уточнення: яка
б команда не була, висновок повинен бути іншим після натискання Ctrl+ Alt+ F1(переходу на іншу віртуальну консоль).


Це власне запитання?
jokerdino

Ні, на жаль.
січня

Відповіді:


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

Потім, залежно від вашої програми, ви хочете перевірити властивості повернутого об'єкта, який повинен бути шлях об’єкта до сесії .


3
Дуже корисно, я думаю. Коли я перемикаю сеанси, відповідь перемикається відповідно. Зокрема, я міг би ввести таку команду: dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Session2 org.freedesktop.ConsoleKit.Session.GetUserяка відповідає з поточним ідентифікатором користувача. Звідти функція бібліотеки getpwuid може отримати ім'я користувача.
John S Gruber

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, у віртуальній машині)
січня


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.