我可以将当​​前 x 显示用户作为 udev 规则中的参数传递吗?

我可以将当​​前 x 显示用户作为 udev 规则中的参数传递吗?

我已经设置了一条 udev 规则,它会重新启动 systemd 服务,并传递该服务要运行的用户参数。

问题是 udev 以 root 身份运行,因此它总是将 root 作为参数传入。我想以某种方式获取拥有 DISPLAY 0 的用户并将其作为参数传入。

背景介绍:我正在尝试使用 udevil 实现 USB 驱动器和光学媒体的自动安装,在任何用户下,无需桌面环境的帮助。

这可能吗?

这是我当前的规则:

# 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"

答案1

不,没有什么好的纹身方法。

在 Unix 中没有“当前”用户或当前显示,也无法保证显示 :0 随时存在并属于实际用户。甚至微软多年前就认识到让服务“进入”用户会话是一个坏主意(导致“会话 0 隔离”)。

在用户的图形会话中运行devmon守护进程(或者udiskie作为替代方案,可能是 thunar-volman)(例如通过 /etc/xdg/autostart 或 /etc/X11/xinitrc.d 启动它)。让它以这种方式监视 udev 事件。

相关内容