Actkbd作为Systemd的服务


12

不久前,我询问如何在屏幕锁定时停止音乐播放器。答案是使用像魅力一样起作用的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通过root终端执行命令,则一切正常。为什么?

抱歉,如果它很明显,我是系统业务的新手,但找不到任何可以帮助我的东西。

干杯。

编辑:这仍然无法正常工作。如果有人有时间,我会很乐意尝试并重现它。如果可能的话,我将提交一个错误报告。


由于时间有限,我还没有尝试actkbdsystemd,但是我怀疑您的问题与actkbd输入系统完全初始化之前启动有关- actkbd在我的开发笔记本电脑上作为LSB服务启动时可以正常工作。您应该确保在evdev模块启动后启动它,并且您的键盘始终具有相同的eventX设备节点。
thkala 2012年

感谢您的答复西奥多罗斯。我上面显示的测试是在启动所有程序时执行的。因此,理论上应加载所有模块。设备节点也应该很好,因为手动执行命令一直可以正常工作。
Azrael3000

Answers:


5

如果您希望用户能够访问设备并运行服务单元,则需要制定udev规则并设置适当MODES的权限,以允许用户访问设备。User=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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.