Aktkbd als Dienst mit systemd

12

Vor einiger Zeit habe ich gefragt, wie ein Musik-Player angehalten werden soll, während der Bildschirm gesperrt ist. Die Antwort war, actkbd zu verwenden, was wie ein Zauber wirkt. Jetzt wollte ich actkbd als Dienst zu systemd hinzufügen, um es beim Booten automatisch zu starten. Wie Sie sehen, ist der Dienst korrekt gestartet und wird auch in htop angezeigt. Einige Ausgaben unten:

[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

Ich habe die folgende actkbd.serviceDatei 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

Das Problem ist also, dass nach dem Starten des Dienstes mit systemctl nichts passiert, wenn ich meine übliche Tastenkombination zum Anhalten der Rhythmbox drücke. Wenn ich stattdessen einfach den Befehl /usr/local/sbin/actkbd -d /dev/input/event3 -Düber das Root-Terminal ausführe, funktioniert alles einwandfrei. Warum das?

Tut mir leid, wenn es etwas Offensichtliches ist, ich bin neu im Systemgeschäft, aber ich konnte nichts finden, was mir geholfen hat.

Prost.

BEARBEITEN: Dies funktioniert immer noch nicht. Wenn jemand etwas Zeit hat, würde ich es begrüßen, wenn man es versuchen und reproduzieren könnte. Wenn das möglich ist, werde ich einen Fehlerbericht einreichen.

Azrael3000
quelle
Ich habe noch zu versuchen , actkbdmit systemd, wegen des Mangels an Zeit, aber ich vermute , dass das Problem etwas mit dem zu tun hat , actkbdwird begonnen , bevor das Eingabesystem vollständig initialisiert ist - actkbdfunktioniert gut , wenn als LSB - Dienst auf meiner Entwicklung Laptop gestartet. Sie sollten sicherstellen, dass es nach dem evdevStart des Moduls gestartet wird und dass Ihre Tastatur immer den gleichen eventXGeräteknoten hat.
Thkala
Danke für die Antwort Theodoros. Die Tests, die ich oben gezeigt habe, wurden ausgeführt, während alles gebootet wurde. Theoretisch sollten also alle Module geladen sein. Der Geräteknoten sollte ebenfalls in Ordnung sein, da die manuelle Ausführung des Befehls die ganze Zeit über in Ordnung ist.
Azrael3000

Antworten:

5

Wenn Sie möchten, dass der Benutzer auf das Gerät zugreifen und die Serviceeinheit ausführen kann, müssen Sie eine udevRegel erstellen und die richtige festlegen MODES, damit der Benutzer auf das Gerät zugreifen kann. Das einfache Starten der Unit-Datei User=rootist falsch, da Sie die Sitzung nicht als Root, sondern als Benutzer ausführen. Wenn Sie es von einem Root-Terminal aus ausführen, aktivieren Sie ein Root-Terminal in Ihrer Benutzersitzung. Weitere Informationen hierzu finden Sie unter systemd --user.

Udev-Regel zusammenstellen

Verwenden Sie den folgenden Befehl, um die Informationen bereitzustellen, die Sie zum Ausfüllen der udevRegel benötigen :

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

Erstellen Sie aus der Ausgabe des obigen Befehls Ihre udev-Regel in /etc/udev/rules.d/<device>.conf. Öffnen Sie es in Ihrem bevorzugten Texteditor und geben Sie die Variablen ein

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

Weitere Informationen zum Erstellen und Benennen von udevRegeln finden man udevSie im Wiki Ihrer Linux-Distribution. Starten Sie nach dem Festlegen der Regeln neu. Und dann starten Sie das Gerät, sobald Sie bei X angemeldet sind.

Außerdem ist hier eine viel vernünftigere System-Unit-Datei als die von Ihnen bereitgestellte.

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

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