Actkbd come servizio con systemd


12

Qualche tempo fa ho chiesto come fermare un lettore musicale mentre lo schermo è bloccato. La risposta è stata usare actkbd che funziona come un incantesimo. Ora volevo aggiungere actkbd come servizio a systemd per avviarlo automaticamente all'avvio. Come puoi vedere, il servizio è avviato correttamente e viene visualizzato anche in htop. Alcuni output di seguito:

[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

Ho il seguente actkbd.servicefile in/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

Quindi il problema è che dopo aver avviato il servizio con systemctl non succede nulla se premo il mio solito collegamento per mettere in pausa Rhythmbox. Se invece eseguo semplicemente il comando/usr/local/sbin/actkbd -d /dev/input/event3 -D tramite un terminale root, tutto funziona bene. Perché quel?

Scusate se è qualcosa di ovvio, sono nuovo nel settore dei sistemi ma non sono riuscito a trovare nulla che mi abbia aiutato.

Saluti.

EDIT: questo non funziona ancora. Se qualcuno ha del tempo, lo apprezzerei se si potesse provare a riprodurlo. Se ciò è possibile, presenterò una segnalazione di bug.


Devo ancora provare actkbdcon systemd, a causa della mancanza di tempo, ma ho il sospetto che il problema ha a che fare con la actkbdfase di avvio prima che il sistema di ingresso è completamente inizializzato - actkbdfunziona bene quando è iniziato come un servizio di LSB sul mio portatile di sviluppo. È necessario assicurarsi che venga avviato dopo l'avvio del evdevmodulo e che la tastiera abbia sempre lo stesso eventXnodo del dispositivo.
thkala,

Grazie per la risposta Teodoros. I test che ho mostrato sopra sono stati eseguiti mentre tutto è stato avviato. Quindi in teoria tutti i moduli dovrebbero essere caricati. Anche il nodo del dispositivo dovrebbe andare bene poiché l'esecuzione manuale del comando funziona sempre bene.
Azrael3000,

Risposte:


5

Se si desidera che l'utente sia in grado di accedere al dispositivo ed eseguire l'unità di servizio, è necessario stabilire una udevregola e impostare le opzioni appropriate MODESper consentire all'utente di accedere al dispositivo. Il semplice avvio del file di unità non User=rootè corretto poiché non si esegue la sessione come root ma come utente. Quando lo esegui da un terminale root stai attivando un terminale root dalla sessione degli utenti. Per ottenere maggiori informazioni su questo cercare informazioni su systemd --user.

Mettere insieme una regola udev

Utilizzare il comando seguente per fornire le informazioni necessarie per popolare la udevregola:

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

Dall'output del comando precedente crea la tua regola udev in /etc/udev/rules.d/<device>.conf. Aprilo nel tuo editor di testo preferito e compila le variabili

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

Per ulteriori informazioni su come creare e denominare le udevregole, dai un'occhiata al man udevWiki della tua distribuzione Linux. Dopo aver impostato le regole, riavviare. E quindi avviare l'unità dopo aver effettuato l'accesso a X.

Inoltre, ecco un file di unità di sistema molto più sano di quello che hai fornito.

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

[Service]
ExecStart=/usr/sbin/actkbd -Dd /dev/input/event3
RemainAfterExit=yes
Type=forking
Restart=always
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.