Actkbd como servicio con systemd

Actkbd como servicio con systemd

Hace un tiempo pregunté cómo detener un reproductor de música mientras la pantalla está bloqueada. La respuesta fue usar actkbd que funciona de maravilla. Ahora quería agregar actkbd como servicio a systemd para poder iniciarlo automáticamente al arrancar. Como puede ver, el servicio se inicia correctamente y también aparece en htop. Algunos resultados a continuación:

[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

Tengo el siguiente actkbd.servicearchivo en/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

Entonces el problema es que después de iniciar el servicio con systemctl no pasa nada si presiono mi atajo habitual para pausar Rhythmbox. Si, en cambio, simplemente ejecuto el comando /usr/local/sbin/actkbd -d /dev/input/event3 -Da través de una terminal raíz, todo funciona bien. ¿Por qué eso?

Lo siento si es algo obvio, soy nuevo en el negocio de systemd pero no pude encontrar nada que me ayudara.

Salud.

EDITAR: Esto todavía no funciona. Si alguien tiene algo de tiempo, le agradecería que pudiera intentar reproducirlo. Si eso es posible, presentaré un informe de error.

Respuesta1

Si desea que el usuario pueda acceder al dispositivo y ejecutar la unidad de servicio, deberá crear una udevregla y configurar la opción adecuada MODESpara permitir que el usuario acceda al dispositivo. Simplemente iniciar el archivo de la unidad como User=rootes incorrecto ya que no está ejecutando la sesión como root sino como su usuario. Cuando lo ejecuta desde una terminal raíz, está activando una terminal raíz desde dentro de su sesión de usuario. Para obtener más información sobre esto, busque información en systemd --user.

Armando una regla udev

Utilice el siguiente comando para obtener la información que necesitará para completar la udevregla:

udevadm info --path=$(udevadm info -q path -n /dev/input/event3)

A partir del resultado del comando anterior, cree su regla udev en formato /etc/udev/rules.d/<device>.conf. Ábrelo en tu editor de texto favorito y completa las variables.

 SUBSYSTEM=="device",
 SYSFS{idVendor}=="ID Vendor Here" ,
 SYSFS{idProduct}=="ID Model Here",
 MODE="666"

Para obtener más información sobre cómo crear y nombrar udevreglas, consulte man udevla Wiki de su distribución de Linux. Después de configurar las reglas, reinicie. Y luego inicie la unidad una vez que haya iniciado sesión en X.

Además, aquí hay unmuchoarchivo de unidad de sistema más sensato que el que ha proporcionado.

[Unit]
Description=Actkbd: Daemon for X-independent shortcuts

[Service]
ExecStart=/usr/sbin/actkbd -Dd /dev/input/event3
RemainAfterExit=yes
Type=forking
Restart=always

información relacionada