Ich möchte ein Batch-Skript mit einer Verknüpfung verbinden. Wenn ich es unter Systemeinstellungen> Tastatur> Verknüpfungen einbinde Es funktioniert mit jeder Taste, außer meinen Helligkeitstasten von meiner externen Apple-Tastatur.
Die Helligkeitstasten werden in showkey mit dem Keycode 224 erkannt und 225 .
xev-Ausgabe:
FocusOut event, serial 41, synthetic NO, window 0x4000001,
mode NotifyGrab, detail NotifyAncestor
FocusIn event, serial 41, synthetic NO, window 0x4000001,
mode NotifyUngrab, detail NotifyAncestor
KeymapNotify event, serial 41, synthetic NO, window 0x0,
keys: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Irgendwelche Vorschläge, was ich tun kann?
Akzeptierte Antwort:
Lösung mit Halevt
Laut den Manpages halevt
ist ein generischer Handler für HAL-Ereignisse. Es ist veraltet und wird durch udev
ersetzt , aber da ich nicht genug über udev
weiß Ich gebe ein halevt
Lösung.
BEARBEITEN: nach einigem Schweiß ist mir das in udev
gelungen . Siehe meine andere Antwort.
Ich werde vim
verwenden um Dateien zu bearbeiten, aber wenn Sie vim
nicht kennen Sie können es durch nano
ersetzen oder gedit
.
Halevt installieren
sudo apt-get update && sudo apt-get install halevt
Festlegen, welche Ereignisse Sie an ein Skript binden möchten
Halte die halevt
an Daemon, der bereits läuft:
sudo /etc/init.d/halevt stop
Sehen Sie nun nach, ob halevt
die Ereignisse der Tasten erkennen können, die Sie verwenden möchten, starten Sie den Listener:
sudo -u halevt halevt -fig:plugdev
Drücken Sie nun die Funktionstaste auf Ihrer Tastatur, an die Sie das Skript binden möchten. Ich weiß, dass das OP seine Helligkeitstasten zum Laufen bringen möchte, also lass uns damit fortfahren. Die Ausgabe für die Helligkeitstasten sollte etwa so aussehen:
Condition: /org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port_logicaldev_input,ButtonPressed (brightness-down)
Condition: /org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port_logicaldev_input,ButtonPressed (brightness-up)
Sie können sehen, dass die brightness-down
und brightness-up
Ereignisse übertragen werden.
Das Ereignis an ein Skript binden
Bearbeiten Sie nun die Datei /etc/halevt/halevt.xml
:
sudo vim /etc/halevt/halevt.xml
und fügen Sie die folgenden Zeilen hinzu (ich habe es ganz unten gemacht, kurz vor </halevt:Configuration>
):
<halevt:Device match="hal.info.category = input">
<halevt:Condition name="ButtonPressed" value="brightness-up" exec="sudo /home/user/brightness-script.sh up"/>
<halevt:Condition name="ButtonPressed" value="brightness-down" exec="sudo /home/user/brightness-script.sh down"/>
</halevt:Device>
wobei Sie natürlich value
ändern sollten zu dem Ereignis, das Sie vom Listener erhalten haben, und exec
durch den Befehl, den Sie ausführen möchten.
Geben Sie dem halevt-Benutzer die Berechtigung, den Befehl oder das Skript auszuführen
Seit dem halevt
Daemon wird als halevt
ausgeführt Benutzer müssen Sie ihm die Berechtigung erteilen, das zu tun, was Sie in exec
angegeben haben .
Führen Sie aus (denken Sie daran, vim
zu ersetzen von Ihrem Redakteur Ihrer Wahl)
sudo EDITOR=vim visudo
und fügen Sie unten die folgenden Zeilen hinzu
halevt ALL=(root) NOPASSWD: /home/user/brightness-script.sh
und speichern und beenden.
Verwandte:Tastaturwiederholung von der Befehlszeile aus deaktivieren?Stellen Sie sicher, dass Ihr Skript ausführbar ist
sudo chmod +x /home/user/brightness-script.sh
Starten Sie den Halevt-Daemon erneut
sudo /etc/init.d/halevt start
Und es sollte funktionieren!