Nachdem ich herausgefunden hatte, wie die Zuordnung von Scan-Codes zu Schlüsselcodes mithilfe dieser Frage geändert werden udev
kann , habe ich mich gefragt, wie diese Schlüsselcodes (oder Ereignisse, wenn Sie so wollen) der entsprechenden Aktion zugeordnet werden.
Wenn Sie zum Beispiel volume upauf Ihrer Tastatur drücken , wird ein Scan-Code gesendet, der dann in den volumeup
Schlüsselcode umgewandelt wird. Aber wie wird dieser Schlüsselcode abgefangen, die Lautstärke erhöht und die entsprechende Benachrichtigung angezeigt?
Ich vermute, dass irgendwo ein Skript aufgerufen werden muss, also würde ich gerne wissen, wo sich diese Skripte befinden.
BEARBEITEN: Die Schlüsselcodes, die ich erwähne, sind nicht mit den Schlüsselcodes zu verwechseln xev
, die ich zurückgebe, aber ich interessiere mich auch dafür;)
notify-osd
funktioniert? Ich denke, dort werden die Helligkeitsbenachrichtigungen gesendet ...Antworten:
Ok, dies finden Sie unter https://help.ubuntu.com/community/MultimediaKeys
Also werden Keycodes auf Keysyms abgebildet. Also, wo sind die Keysyms? Ich habe folgende Frage gefunden und beantwortet: Wo finde ich derzeit eine Liste aller X-Schlüsselwörter? Da es sich um die Lautstärketasten handelt, finden Sie sie im
XF86keysym.h
in der Antwort genannten Quellcode.In dieser Datei auf meinem Computer habe ich Folgendes für Volume gefunden:
Seltsam ... andere Werte als alles andere, vielleicht gibt es mehrere Systeme für den Umgang mit Schlüsseln? http://crunchbang.org/forums/viewtopic.php?id=16656
Ich verwende Xubuntu, und um die Tasten zu steuern, muss ich die Aktionen manuell zuordnen (wie folgt: Wie ändere ich meine Tastaturkürzel in Xubuntu? ). Die Benachrichtigungen scheinen jedoch unabhängig zu sein, als würden sie beim Drücken einer Taste abgerufen und entsprechend gehandelt. Dies kann bedeuten, dass andere Programme in Ubuntu auf diese Weise eingerichtet werden, sodass den Tasten keine Skripte zugeordnet werden müssen.
Ich bin mir also ziemlich sicher, dass jetzt Programme auf den Schlüssel zugreifen (es sind also keine Skripte zu finden).
In Xubuntu hatte ich dieses Problem mit Pulse Audio und benutzte benutzerdefinierte Skripte, um die Lautstärke zu ändern. Es schien, als würde Pulse die Mute-Taste, die Mute-Taste Alsa und PulseAudio abfangen, aber nur Alsa wurde für interessante Problemumgehungen aktiviert .
Informieren Sie sich über NotifyOSD https://wiki.ubuntu.com/NotifyOSD#Volume_changes
Wenn Sie nach folgenden Diagrammen suchen: https://wiki.ubuntu.com/NotifyOSD#Architecture
Vor allem dieses:
Es zeigt, dass es einen "Hardware Key Listener" gibt, der Form DBus oder HAL empfängt? Anschließend wird "das visuelle Element vom System abgerufen", dessen Sound- und Helligkeitssymbole sich in der Quelle von Notify-OSD befinden, und von dort aus die Blase erzeugt.
Das ist alles verrückt verwirrend, aber soweit ich es verstehe (soweit):
raw scancode (ex. e016)> keycode (ex. 160)> keysym (ex. XF86AudioMute)> gnome-settings-daemon (ex. volume-up)> dbussignal> hardware-key-listener für notify-osd (oder andere Programm hören)
quelle
In den meisten Fällen werden keine Skripts ausgeführt. Sie bewirken, dass Ereignisse an den Fenstermanager oder den Einstellungsdämon gesendet werden. Das einzige Mal, dass mir das Skripting in diesem Prozess bekannt ist, ist das Konfigurieren benutzerdefinierter Tastenzuordnungen. Für benutzerdefinierte Tastenkombinationen können Sie Befehlszeilen (ausführbare Dateien oder Skripts) hinzufügen und an Schlüssel binden.
Bitte sehen Sie diese Antwort, die ich auf eine Frage zum Sichern von Tastenkombinationen in Ubuntu geschrieben habe: Wo werden GNOME-Tastenkombinationen gespeichert? Ich habe ein Skript, das alle Tastaturbelegungen, einschließlich der benutzerdefinierten Tastaturbelegungen, sichert oder wiederherstellt. Wenn Sie das Skript ausführen, können Sie sehen, wo in dconf die Tastaturbelegungen gespeichert sind und welche Anwendung über das Schlüsselereignis benachrichtigt wird.
quelle
Die Antwort bezieht sich auf Treiber .
Jede Hardware muss über einen Treiber verfügen, um mit dem Betriebssystem interagieren zu können.
Zitieren http://www.linuxforu.com/2010/11/understanding-linux-device-drivers/ :
Ein Gerät verfügt über ein Geräteregister, in dem die Steuer- / Statusbits und Datenbits gespeichert sind. Wann immer Daten übertragen werden müssen, werden diese normalerweise durch Setzen der Datenbits gesendet.
Wenn Sie also eine Taste auf Ihrer Tastatur drücken, werden einige Daten in die Registrierkasse geschrieben. Diese Bits werden vom Gerätetreiber gelesen und die entsprechende Aktion wird ausgeführt. Dies ist die kurze Erklärung.
Links:
Wenn Sie interessiert sind, empfehle ich Ihnen, diese Serie über Gerätetreiber zu lesen, die aus 17 gut geschriebenen Artikeln von linuxforu besteht : http://www.linuxforu.com/tag/linux-device-drivers-series/ .
Sie können das spezifische Dokument lesen, das Anweisungen zum Schreiben eines Gerätetreibers für die USB-Tastatur enthält: http://www.emntech.com/docs/USB_KeyBoard_Driver_eMNTech.pdf
Wenn Sie von Linux-Gerätetreibern begeistert sind, lesen Sie das Buch "Linux Device Drivers", das kostenlos als PDF verfügbar ist: http://lwn.net/Kernel/LDD3/
quelle
evdev
Treiber, aber ich sehe nicht, wie das hier hilfreich wäre ...