Могу ли я передать текущего пользователя x display как параметр в правиле udev?

0

У меня есть настроенное правило udev, которое перезапускает службу systemd, передавая пользовательский параметр для запуска службы.

Проблема в том, что udev запускается от имени пользователя root, поэтому он всегда переходит от имени пользователя root в качестве параметра. Я хотел бы как-то получить пользователя, которому принадлежит DISPLAY 0, и передать его в качестве параметра.

Немного предыстории: я пытаюсь добиться автоматического монтирования USB-накопителей и оптических носителей с помощью udevil, под любым пользователем и без помощи рабочего стола.

Это возможно?

Это мое текущее правило:

# check for blockdevices, /dev/sd*, /dev/sr* and /dev/mmc*
SUBSYSTEM!="block", KERNEL!="sd*|sr*|mmc*", GOTO="exit"

# check for special partitions we dont want mount
IMPORT{builtin}="blkid"
ENV{ID_FS_LABEL}=="EFI|BOOT|Recovery", GOTO="exit"

# /dev/sd* and /dev/mmc* ith partitions/disk and filesystems only and /dev/sr* disks only
KERNEL=="sd*|mmc*", ENV{DEVTYPE}=="partition|disk", ENV{ID_FS_USAGE}=="filesystem", GOTO="harddisk"
KERNEL=="sr*", ENV{DEVTYPE}=="disk", GOTO="optical"
GOTO="exit"

# mount or umount for hdds
LABEL="harddisk"
ACTION=="add", RUN+="/usr/bin/systemctl restart udevil-mount@/dev/%k.service"
ACTION=="remove", RUN+="/usr/bin/systemctl stop udevil-mount@/dev/%k.service"
GOTO="exit"

# mount or umount for opticals
LABEL="optical"
ACTION=="add|change", RUN+="/usr/bin/systemctl restart udevil-mount@/dev/%k.service"
GOTO="exit"

# Exit
LABEL="exit"
dcrdev
источник

Ответы:

0

Нет, нет хорошего метода для ТАТ.

В Unix есть не существует «текущий» пользователь , ни отображение текущего, ни гарантии того, что отображение: 0 будет существовать и принадлежат к фактическому пользователю в любой момент. Даже Microsoft много лет назад узнала, что пропускать сервисы "в" пользовательский сеанс - плохая идея (в результате "изоляция сеанса 0").

Запустите devmonдемон (или udiskieкак альтернативу, или, возможно, thunar-volman) из графического сеанса пользователя (например, запустите его через / etc / xdg / autostart или /etc/X11/xinitrc.d). Пусть он так отслеживает события udev.

grawity
источник