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.service
Datei 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.
actkbd
mitsystemd
, wegen des Mangels an Zeit, aber ich vermute , dass das Problem etwas mit dem zu tun hat ,actkbd
wird begonnen , bevor das Eingabesystem vollständig initialisiert ist -actkbd
funktioniert gut , wenn als LSB - Dienst auf meiner Entwicklung Laptop gestartet. Sie sollten sicherstellen, dass es nach demevdev
Start des Moduls gestartet wird und dass Ihre Tastatur immer den gleicheneventX
Geräteknoten hat.Antworten:
Wenn Sie möchten, dass der Benutzer auf das Gerät zugreifen und die Serviceeinheit ausführen kann, müssen Sie eine
udev
Regel erstellen und die richtige festlegenMODES
, damit der Benutzer auf das Gerät zugreifen kann. Das einfache Starten der Unit-DateiUser=root
ist 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 untersystemd --user
.Udev-Regel zusammenstellen
Verwenden Sie den folgenden Befehl, um die Informationen bereitzustellen, die Sie zum Ausfüllen der
udev
Regel 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 einWeitere Informationen zum Erstellen und Benennen von
udev
Regeln findenman udev
Sie 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.
quelle