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 un servicio a systemd para iniciarlo automáticamente al arrancar. Como puede ver, el servicio se inicia correctamente y también se muestra 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 acceso directo habitual para pausar Rhythmbox. Si en su lugar solo ejecuto el comando a /usr/local/sbin/actkbd -d /dev/input/event3 -D
través de un 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, agradecería que uno pudiera intentar reproducirlo. Si eso es posible, entonces presentaré un informe de error.
actkbd
consystemd
, debido a la falta de tiempo, pero sospecho que su problema tiene que ver conactkbd
que se inició antes de que el sistema de entrada está totalmente inicializado -actkbd
funciona bien cuando se inicia como un servicio de LSB en mi portátil desarrollo. Debe asegurarse de que se inicie después de iniciar elevdev
módulo y de que su teclado siempre tenga el mismoeventX
nodo de dispositivo.Respuestas:
Si desea que el usuario pueda acceder al dispositivo y ejecutar la unidad de servicio, entonces deberá establecer una
udev
regla y establecer la adecuadaMODES
para permitirle al usuario permiso para acceder al dispositivo. Simplemente iniciar el archivo de la unidad comoUser=root
incorrecto ya que no está ejecutando la sesión como root sino como su usuario. Cuando lo ejecuta desde un terminal raíz, está activando un terminal raíz desde la sesión de sus usuarios. Para obtener más información sobre esto, busque información sobresystemd --user
.Preparando una regla udev
Use el siguiente comando para darle la información que necesitará para completar la
udev
regla:udevadm info --path=$(udevadm info -q path -n /dev/input/event3)
De la salida del comando anterior, cree su regla udev en
/etc/udev/rules.d/<device>.conf
. Ábralo en su editor de texto favorito y complete las variablesPara obtener más información sobre
udev
cómo hacer y nombrar reglas, consulteman udev
el Wiki de su distribución de Linux. Después de establecer las reglas, reinicie. Y luego inicie la unidad una vez que haya iniciado sesión en X.Además, aquí hay un archivo de unidad de sistema mucho más sano que el que ha proporcionado.
fuente