不久前,我询问如何在屏幕锁定时停止音乐播放器。答案是使用 actkbd,它的作用就像一个魅力。现在我想将 actkbd 作为服务添加到 systemd 中,以便在启动时自动启动它。正如您所看到的,服务已正确启动,并且它也显示在 htop 中。下面是一些输出:
[root@hostname init.d]# systemctl start actkbd.service
[root@hostname init.d]# systemctl status actkbd.service
actkbd.service - Actkbd: Daemon for X-independent shortcuts
Loaded: loaded (/etc/systemd/system/multi-user.target.wants/actkbd.service)
Active: active (running) since Tue, 10 Apr 2012 17:50:36 +0200; 2s ago
Process: 23526 ExecStart=/usr/local/sbin/actkbd -d /dev/input/event3 -D (code=exited, status=0/SUCCESS)
Main PID: 23527 (actkbd)
CGroup: name=systemd:/system/actkbd.service
└ 23527 /usr/local/sbin/actkbd -d /dev/input/event3 -D
[root@hostname init.d]# systemctl stop actkbd.service
[root@hostname init.d]# ps -C actkbd
PID TTY TIME CMD
我有以下actkbd.service
文件/etc/systemd/system/multi-user.target.wants/
[Unit]
Description=Actkbd: Daemon for X-independent shortcuts
[Service]
Type=forking
ExecStart=/usr/local/sbin/actkbd -d /dev/input/event3 -D
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -15 $MAINPID
Restart=always
User=root
所以问题是,在使用 systemctl 启动服务后,如果我按常用的暂停 Rhythmbox 的快捷键,什么也不会发生。如果我只是/usr/local/sbin/actkbd -d /dev/input/event3 -D
通过根终端执行命令,一切都会正常。为什么?
抱歉,如果这是显而易见的事情,我是 systemd 业务的新手,但我找不到任何对我有帮助的东西。
干杯。
编辑:这仍然不起作用。如果有人有时间尝试并重现它,我将不胜感激。如果可能的话,我将提交错误报告。
答案1
如果您希望用户能够访问设备并运行服务单元,那么您需要制定udev
规则并设置适当的MODES
权限以允许用户访问设备。简单地启动单元文件是User=root
不正确的,因为您不是以 root 身份运行会话,而是以您的用户身份运行会话。当您从根终端运行它时,您正在从用户会话内部激活根终端。要获得有关此内容的更多信息,请查找 上的信息systemd --user
。
整理 udev 规则
使用以下命令为您提供填充udev
规则所需的信息:
udevadm info --path=$(udevadm info -q path -n /dev/input/event3)
从上述命令的输出中创建您的 udev 规则/etc/udev/rules.d/<device>.conf
。在您喜欢的文本编辑器中打开它并填写变量
SUBSYSTEM=="device",
SYSFS{idVendor}=="ID Vendor Here" ,
SYSFS{idProduct}=="ID Model Here",
MODE="666"
有关制作和命名udev
规则的更多信息,请参阅man udev
您的 Linux 发行版的 Wiki。设置规则后,重新启动。然后登录 X 后启动设备。
另外,这里有一个很多比您提供的文件更健全的系统单元文件。
[Unit]
Description=Actkbd: Daemon for X-independent shortcuts
[Service]
ExecStart=/usr/sbin/actkbd -Dd /dev/input/event3
RemainAfterExit=yes
Type=forking
Restart=always