每用户 udev 和 systemd 与 X 集成?

每用户 udev 和 systemd 与 X 集成?

我使用的是 Ubuntu 16.04,并且我已经刚刚开发了这款软件,可以自动执行 PulseAudio 热插拔事件

我目前正在使用以下 udev 规则:

/etc/udev/rules.d/90-autopulse.rules:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0d8c", ATTRS{idProduct}=="1066", ENV{SYSTEMD_WANTS}="[email protected]"

我用它作为我的 systemd 单元:

/etc/systemd/系统/[电子邮件受保护]

[Unit]
Description=PulseAudio Hotplug Service

[Service]
Type=oneshot

Environment=DISPLAY=:0
User=%i
ExecStart=/usr/local/bin/autopulse switch
StandardOutput=journal

不幸的是,我需要手动设置DISPLAY=:0,尽管不能保证我会成为给定的 X 会话。

有没有办法配置 udev 或 systemd 来DISPLAY为给定用户提取变量并在环境中使用它?或者我被硬编码了?

我想我可以做一些ExecStartPre事情来发现它,或者调整我的脚本。在 udev 和 systemd 中我有什么选择?

答案1

systemd 还提供用户用户登录时启动的服务(与启动时启用的系统服务相比),您可能应该查看一下。

但我不确定您是否可以使用 udev 规则启动它们,您的软件应该作为用户守护程序启动并侦听 udev 事件并采取相应的行动?

相关内容