LINUX.ORG.RU

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

 , ,


0

1

Здравствуйте есть правило которое обрабатывает вставку usb носителя. При добавлении usb носителя в RUN выполняется программа на с++ которая должна проверить серийный номер устройства. В определенном файле есть список устройств (имя пользователя-серийный номер). Соответственно как получить номер я знаю. Проблема в получении имени пользователя в программе запущенной по событию udev.

ос astra linux 1.5 основана на debian

whoami, но более надёжно всё же использовать id, и определять пользователя по UID, и парсить имя пользователя (и атрибуты типа nologon,/bin/false) в /etc/passwd.

r3lgar ★★★★★ ()
Ответ на: комментарий от r3lgar

Мне кажется, что ТС хочет это сделать в коде. Соответственно, ему нужны функции getpwuid_r() и geteuid() (может getuid() сойдёт).

xaizek ★★★★★ ()
Ответ на: комментарий от xaizek

Если в сишном (плюсячьем) коде, то я мимокрокодил.

В любом случае проверка /etc/passwd на атрибуты пользователя будет не лишней.

r3lgar ★★★★★ ()

Подозреваю, ТС нужно не имя пользователя, от которого запущена программа из udev правила, а пользователя, который в данный момент зарегистрирован на физической консоли. А это определяется через те средства, которые отвечают за регистрацию, то есть надо или лезть в журналы, или смотреть под каким пользователем работает какой-то обязательный для сессии процесс.

Elyas ★★★★★ ()
Ответ на: комментарий от lberserq

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

kold2015 ()
Ответ на: комментарий от kold2015

ну так с помощью logind получи список user ов посмотри у которого из них пропертя Display не false и есть активная сессия в ней есть пропертя User вот он твой юзер.

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

lberserq ()
Ответ на: комментарий от kold2015

Беда в том, что одновременно у тебя может быть зарегистрировано больше одного пользователя. Ты уверен, что этот способ сработает?

XMs ★★★★★ ()
Ответ на: комментарий от XMs

Если зарегистрировано больше одного пользователя, то как ты определишь кто воткнул(если seat всего 1)Ядро прислало Udev event воткнули что-то, udev что-то делает, и в обычном случае пошлет по DBus всем пользователям событие о втыкании. Монтировать или нет будет решать пользователь. Т.е если на этапе mount можно узнать инициатора и определить пользователя, то на этапе работы правил udev нет

lberserq ()
Ответ на: комментарий от lberserq

в 1.5 wheezy по идее можно поставить

В 1.4 подобный финт приводил к таким проблемам с зависимостями, что ну его куда подальше. К тому же, я слишком плохо отношусь к systemd, чтобы рекомендовать такой способ (с потерей сертификации)


Если зарегистрировано больше одного пользователя, то как ты определишь кто воткнул

В том и вопрос — я подозреваю, что ТСу нужно не то, что он спросил, а пересмотреть архитектуру разрабатываемой им системы. Но без деталей о чём-то судить рано

XMs ★★★★★ ()
Ответ на: комментарий от XMs

какая архитектура системы с такими детскими вопросами, которые гуглятся на раз? очередной студент за еду пилит «сертифицированное решение».

anonymous ()
Ответ на: комментарий от anonymous

вообщем systemd не подходит Еще раз мне в программе которая запускается по событию udev (RUN) нужно получить имя пользователя который открыл текущую графическую сессию

kold2015 ()
Ответ на: комментарий от kold2015

У тебя сессий может быть открыто больше одной — какого пользователя ты в итоге хочешь получить? И почему программа запускается по событию udev? Возможно, тебе по событию стоит писать куда-то, а программа, запущенная в пользовательском сеансе, будет это «куда-то» смотреть на предмет записи — так ты получишь и сеанс, и вообще всё, что нужно

XMs ★★★★★ ()
Ответ на: комментарий от XMs

Для начала того пользователя при котором произошло событие вставки при графической сессии

kold2015 ()
Ответ на: комментарий от Atlant

Вообщем я знаю команду которая должна быть выполнена для получения текущего пользователя который зарегестрировался в графической сесии. Но проблема в том когда мне запустить данную команду не пойму

kold2015 ()
Ответ на: комментарий от kold2015

Я тут подумал есть такое решение. Когда пользователь запускает графическую сессию мне сразу после этого нужно выполнить программу. Это как то можно сделать? Тогда и получу имя пользователя затем считаю его в файл. А уже в проге по событию udev его считаю

kold2015 ()
Ответ на: комментарий от kold2015

Тебе по событию udev в файл нужно записать серийник устройства (и удалять его оттуда по извлечении устройства), а из приложения, запущенного у пользователя, следить за изменениями в этом файле. Как только новая запись — смотришь, соответствует ли это устройство твоему пользователю, если да — делаешь, что нужно. Зачем тебе запускать прогу по udev — решительно не понятно, там всё скриптами сделать можно. Запустить софт при старте системы довольно легко — руководство разработчика, страница 26, пункт 2.7.3

XMs ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.