Problem beim Binden einer Verknüpfung zu einer Funktion / Multimedia-Taste

8

Ich möchte ein Batch-Skript mit einer Verknüpfung verbinden. Wenn ich es unter Systemeinstellungen & gt; Tastatur & gt; Shortcuts funktioniert mit jeder Taste außer meinen Helligkeits-Tasten von meiner externen Apple-Tastatur.

Die Helligkeitstasten werden in showkey mit den Tastencodes 224 und 225 erkannt.

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?

    
remi 10.01.2013, 15:09

2 Antworten

6

Lösung mit halevt

Laut den man-Seiten ist halevt ein generischer Handler für HAL-Ereignisse. Es ist veraltet und ersetzt durch udev , aber da ich nicht genug über udev weiß, gebe ich eine halevt Lösung.

BEARBEITEN: Nach einigem Schwitzen habe ich es in udev geschafft. Siehe meine andere Antwort .

Ich benutze vim , um Dateien zu bearbeiten, aber wenn du vim nicht kennst, kannst du es durch nano oder gedit ersetzen.

Installation von halevt

sudo apt-get update && sudo apt-get install halevt

Bestimmen, welche Ereignisse an ein Skript gebunden werden sollen
Stoppen Sie den bereits ausgeführten halevt -Daemon:

sudo /etc/init.d/halevt stop

Nun sehen Sie, ob halevt die Ereignisse der Schlüssel erkennen kann, 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 der OP seine Helligkeits-Tasten arbeiten lassen will, also lass uns damit gehen. Die Ausgabe für die Helligkeits-Tasten 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 Ereignisse brightness-down und brightness-up übertragen werden.

Bindet das Ereignis an ein Skript
Bearbeiten Sie nun die Datei /etc/halevt/halevt.xml :

sudo vim /etc/halevt/halevt.xml

und füge die folgenden Zeilen hinzu (Ich habe es am Ende 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>

Natürlich sollten Sie value auf das Ereignis setzen, das Sie vom Listener erhalten haben, und exec mit dem Befehl, den Sie ausführen wollen.

Geben Sie dem Halevt-Benutzer die Berechtigung zum Ausführen des Befehls oder Skripts Da der halevt -Daemon als der halevt -Benutzer ausgeführt wird, müssen Sie ihm erlauben, das zu tun, was Sie in exec angegeben haben.

Run (denken Sie daran, vim durch Ihren bevorzugten Editor zu ersetzen)

sudo EDITOR=vim visudo

und fügen Sie die folgenden Zeilen am unteren Rand hinzu

halevt ALL=(root) NOPASSWD: /home/user/brightness-script.sh 

und speichern und beenden.

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!

    
Gerhard Burger 12.01.2013, 19:23
11

Lösung mit udev

Da HAL veraltet ist und udev jetzt verwendet wird, wird dieser Ansatz gegenüber meiner anderen Antwort bevorzugt (obwohl ich denke, dass die Lösung mit HAL einfacher ist).

Aber für viele Funktionstasten können Sie einfach Systemeinstellungen & gt; Tastatur & gt; Shortcuts um ein Skript zu binden, versuchen Sie es zuerst! Es erspart Ihnen viel Ärger. Für zB die Helligkeits-Tasten funktioniert das nicht (ich habe keine Ahnung, warum nicht). Wenn Sie also wissen möchten, wie Sie das Verhalten beispielsweise der Helligkeits-Tasten ändern können, lesen Sie weiter.

HINWEIS : Wenn Sie ein Samsung-Notebook betreiben, können Sie alle Funktionstasten (abhängig vom Modell) reparieren, indem Sie das Paket samsung-tools von link

Dieses Howto geht davon aus, dass Sie wissen, wie man ein Terminal benutzt und verwendet den vim Editor. Wenn Sie vim nicht wissen, ersetzen Sie es bitte in den Befehlen durch gedit oder nano .

Bestimmen Sie Ihre Tastatur

/lib/udev/findkeyboards

sollte die Tastaturen drucken, die mit dem Computer verbunden sind, in meinem Fall

USB keyboard: input/event9
USB keyboard: input/event7
AT keyboard: input/event4

Jetzt gibt es zwei Möglichkeiten:

  • USB-Tastaturen :
    Wenn Sie Ihre USB-Tastatur neu zuordnen möchten, überprüfen Sie sie, indem Sie

    ausführen
    udevadm info --export-db | awk '/event9/' RS="" | grep -P 'ID_(VENDOR|MODEL)(?!_ENC)'
    

    wo Sie die 9 in der awk-Anweisung durch die richtige Zahl ersetzen müssen. Die Ausgabe sollte ähnlich wie

    sein
    E: ID_MODEL=USB_Receiver
    E: ID_MODEL_ID=c52b
    E: ID_VENDOR=Logitech
    E: ID_VENDOR_ID=046d
    

    zeigt korrekt an, dass meine Tastatur über meinen Logitech USB-Empfänger gehandhabt wird (Eingang / Ereignis7 stellte sich als meine Logitech G9-Maus heraus, die einige programmierbare Tasten hat).

  • Laptop-Tastatur :
    Wenn Sie Ihre Laptop-Tastatur neu zuordnen möchten, sollten Sie sich die Nummer für AT keyboard merken, die in meinem Fall 4 ist. Holen Sie sich auch die dmi Informationen für Ihren Laptop:

    cat /sys/class/dmi/id/sys_vendor
    

    was in meinem Fall

    ist
    SAMSUNG ELECTRONICS CO., LTD.
    

    und

    cat /sys/class/dmi/id/product_name
    

    was in meinem Fall

    ist
    305U1A
    

Bestimmen Sie Ihre aktuelle Zuordnung Ihrer Funktionstasten

Jetzt können wir unser aktuelles Key-Mapping bestimmen, indem wir auf die Tastatur hören (richtige Zahl einfügen)

sudo /lib/udev/keymap -i input/event4

Sie können diesen Befehl mit Esc auf der Tastatur oder Strg + c auf einer anderen Tastatur beenden.

Wenn Ihr Bildschirm sehr stark nach unten scrollt, drücken Sie Esc und Strg + c einige Male und versuchen Sie es erneut mit

sudo /lib/udev/keymap -i input/event4 2> /dev/null

oder, wenn Sie immer noch das Bildlaufproblem haben

sudo /lib/udev/keymap -i input/event4 > ~/keymap.log

Im letzten Fall haben Sie immer noch das Scrollen, aber wenn Sie die Funktionstasten drücken, sollten sie in ~/keymap.log gehen, wo Sie sie später lesen können.

Jetzt können wir die aktuelle Zuordnung Ihrer Funktionstasten überprüfen, indem Sie sie drücken, was Ihnen eine Liste wie folgt geben soll (das ist mein Fn + F1 bis Fn + F12 ):

scan code: 0xCE   key code: kpplusminus
scan code: 0x89   key code: brightnessdown
scan code: 0x88   key code: brightnessup
scan code: 0x82   key code: switchvideomode
scan code: 0xF9   key code: f23
scan code: 0xA0   key code: mute
scan code: 0xAE   key code: volumedown
scan code: 0xB0   key code: volumeup
scan code: 0x43   key code: f9
scan code: 0x44   key code: f10
scan code: 0xB3   key code: prog3
scan code: 0x86   key code: wlan

Schreiben Sie nun die Scan-Codes auf, für die das Verhalten geändert werden soll.

Ändern der Tastencodes für die Scancodes

Wenn Sie sehen, dass der Schlüsselcode nicht klarstellt, was Sie erwarten, können Sie in /usr/include/linux/input.h unter Schlüssel und Schaltflächen nachsehen, ob es einen Schlüsselcode gibt passt besser zu dem, was Sie eigentlich wollen. Die Schlüsselcodes dort sind im Format KEY_KEYCODE und Sie müssen den Teil nach KEY_ in Kleinbuchstaben schreiben. Manchmal reicht es, dies zu ändern, um das Problem zu lösen.

Die Helligkeits-Tasten haben jedoch häufig den richtigen Tastencode, der es ihnen nicht erlaubt, neu zugeordnet zu werden. Also müssen wir sie zu anderen Tastencodes ändern. Wir werden prog1 und prog2 für dieses Beispiel verwenden, da diese nicht auf meinem Computer verwendet werden. Sie können aber auch f13 bis f24 oder f20 bis f24 verwenden, wenn Sie einen Apple haben Tastatur mit F1 bis F19 Tasten.

  1. Erstellen Sie eine benutzerdefinierte Tastaturbelegung :
    Erstellen Sie eine Keymap-Datei im Verzeichnis /lib/udev/keymaps mit einem passenden Namen, schauen Sie sich die Ausgabe von ls /lib/udev/keymaps an, um nach geeigneten Namen zu suchen. Ich gehe mit custom-brightness für den Zweck dieser Frage.

    sudo vim /lib/udev/keymaps/custom-brightness
    

    und geben Sie die Scan-Codes der Tasten ein, die Sie ändern möchten, gefolgt von den Scancodes, die Sie haben möchten. Mein custom-brightness sieht so aus:

    # /lib/udev/keymaps/custom-brightness
    
    0x89 prog1
    0x88 prog2
    
  2. Erstellen Sie eine benutzerdefinierte Schlüssel-Release-Datei. Nur wenn Sie Ihre Laptop-Tastatur ändern :
    Manchmal wird das Schlüsselfreigabeereignis nicht ordnungsgemäß gesendet, wodurch der Computer hängen bleibt. Um dies zu vermeiden, schreiben wir auch eine benutzerdefinierte Schlüssel-Release-Datei

    sudo vim /lib/udev/keymaps/force-release/custom-brightness
    

    Diese Datei sollte die gleichen Scan-Codes enthalten, meins sieht wie

    aus
    # /lib/udev/keymaps/force-release/custom-brightness
    
    0x89
    0x88
    

Stellen Sie sicher, dass die neuen Mappings in die Regeldateien geladen sind
Jetzt müssen wir sicherstellen, dass Ihre Mappings geladen sind.Wir können dies tun, indem wir /lib/udev/rules.d/95-keymap.rules bearbeiten, also ist es schlau, ein Backup zu machen

Wieder haben wir zwei Möglichkeiten:

  • USB-Tastaturen :
    Da Sie eine USB-Tastatur haben, sollten Sie Ihren Eintrag unter LABEL="keyboard_usbcheck" hinzufügen und er sollte hinter den anderen Einträgen Ihres Tastaturherstellers liegen. Dies liegt daran, dass meine Tastatur mit

    E: ID_MODEL=USB_Receiver
    E: ID_MODEL_ID=c52b
    E: ID_VENDOR=Logitech
    E: ID_VENDOR_ID=046d
    

    entspricht bereits einer der Regeln, andernfalls wird es überschrieben.
    Fügen Sie die folgende Regel hinzu, in der Sie die ID_VENDOR_ID und ID_MODEL_ID und den Namen Ihrer Keymap entsprechend ändern sollten

    ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c52b", RUN+="keymap $name custom-brightness"
    
  • Laptop-Tastatur :
    Wenn /lib/udev/findkeyboards Ihre Laptop-Tastatur als AT keyboard gemeldet hat, sollte Ihre Regel unter LABEL="keyboard_vendorcheck" gehen, andernfalls unter LABEL="keyboard_modulecheck" . Stellen Sie es wieder unter die anderen Einträge für Ihren Laptop-Hersteller. Fügen Sie die folgende Regel hinzu ( SAMSUNG ELECTRONICS CO., LTD. ist Bit lang, also habe ich einen Platzhalter verwendet)

    ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keymap $name custom_brightness"
    

    Fügen Sie nach dem Sichern

    nun auch eine Regel zu /lib/udev/rules.d/95-keyboard-force-release.rules hinzu
    sudo cp /lib/udev/rules.d/95-keyboard-force-release.rules /lib/udev/rules.d/95-keyboard-force-release.rules.bak
    sudo vim /lib/udev/rules.d/95-keyboard-force-release.rules
    

    Fügen Sie unter den anderen Einträgen Ihres Herstellers

    hinzu
    ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keyboard-force-release.sh $devpath custom_test"
    

Stellen Sie sicher, dass udev die neuen Regeln lädt.
Um die neuen Regeln zu laden, führen Sie

aus
sudo adevadm trigger

HINWEIS: udevadm control --reload-rules (immer noch in Anweisungen auf vielen Websites) funktioniert nicht.

Überprüfen Sie nun, ob die Regeln erfolgreich von

angewendet wurden
sudo /lib/udev/keymap -i input/event4

was nun für die Helligkeits-Tasten

gemeldet werden soll
scan code: 0x89   key code: prog1
scan code: 0x88   key code: prog2

Weisen Sie die Schlüssel in den Systemeinstellungen neu zu
Wenn der letzte Schritt die richtigen Tastencodes gemeldet hat, beginnen die Tasten automatisch zu arbeiten (falls sie zuerst die falschen Tastencodes hatten).

Für die Helligkeit müssen Sie immer noch die Schlüssel an ein Skript binden, was jetzt möglich ist mit Systemeinstellungen & gt; Tastatur & gt; Verknüpfungen .

Genießen Sie

Hinweise :

  • Wenn Ihre Schlüssel den falschen Schlüsselcode hatten und auf diese Weise korrigiert wurden, folgen Sie bitte den Anweisungen in /usr/share/doc/udev/README.keymap.txt.gz (Sie können dies öffnen, ohne mit zless zu extrahieren) und senden Ihre Ergebnisse an die dort genannten E-Mail-Adressen , dann können die Änderungen in der nächsten Version enthalten sein. Viele Benutzer werden davon profitieren!

  • Vielen Dank an diesen hilfreichen Beitrag von Vaidas Jablonskis.

Gerhard Burger 13.01.2013 22:14

Tags und Links