
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.service
archivo 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 -D
a 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 udev
regla y configurar la opción adecuada MODES
para permitir que el usuario acceda al dispositivo. Simplemente iniciar el archivo de la unidad como User=root
es 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 udev
regla:
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 udev
reglas, consulte man udev
la 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