Gibt es eine Möglichkeit für meine binäre auf einige globale Hotkeys in Linux zu reagieren?

StackOverflow https://stackoverflow.com/questions/74790

  •  09-06-2019
  •  | 
  •  

Frage

Ist es möglich, für eine bestimmte Hotkey zu hören (z: Strg - I ) und dann eine bestimmte Aktion durchführen? Meine Anwendung ist in C geschrieben, wird nur unter Linux laufen, und es hat keine GUI. Gibt es Bibliotheken, die mit dieser Art von Aufgabe?

EDIT: als Beispiel amarok globale Verknüpfungen hat, so zum Beispiel, wenn Sie eine Kombination von Tasten zu einer Aktion Karte (sagen wir mal Strg - + , Strg und + ), könnten Sie diese Aktion ausführen, wenn Sie die Tasten drücken. Wenn ich würde Karte Strg - + , um die Lautstärke zu erhöhen Aktion, jedes Mal, wenn ich die Taste ctrl - + das Volumen um einen bestimmten Betrag erhöhen sollte.

Danke

War es hilfreich?

Lösung

Wie global Sie Ihre Hotkeys sein müssen? Ist es genug für sie, für eine X-Sitzung global zu sein? In diesem Fall sollten Sie in der Lage sein, eine Xlib-Verbindung zu öffnen und hören für die Ereignisse, die Sie benötigen.

Normalerweise Tastaturereignisse in X werden das Fenster geliefert, die derzeit den Fokus hat, und vermehrt auf die Hierarchie, bis sie behandelt werden. Offensichtlich ist dies nicht das, was wir wollen. Wir müssen das Ereignis verarbeiten, bevor andere Fenster, um es zu bekommen. Wir müssen rufen Sie XGrabKey auf dem Root-Fenster mit dem Schlüsselcode und Modifikatoren unser Hotkey dies zu erreichen.

fand ich ein gutes Beispiel hier .

Andere Tipps

Ich denke smoofra ist auf dem richtigen Weg hier; Sie suchen einen globalen Hotkey mit X zu registrieren, damit Sie Tastenanschläge abfangen und entsprechende Maßnahmen ergreifen. Xlib ist wahrscheinlich das, was Sie wollen, und XGrabKey ist die Funktion, denke ich.

Es ist nicht leicht zu lernen, ich habe Angst; Ich habe dieses Beispiel finden, die nützlich scheint: TinyWM . Ich fand auch ein Beispiel mit Java / JNI (der gleichen zugrunde liegenden Xlib-Funktion zugreifen).

Sie sollten auf den Quellcode schauen von xbindkeys .

Xlib Programmierung ist ziemlich obskur, Dokumentation ist schwer zu finden, und es gibt feine Portabilitätsprobleme. Sie werden besser einige kampfgestählten Code zu kopieren.

Eine Möglichkeit, es zu tun ist, Ihre Anwendung auf einem bestimmten Port oder Socket-Datei, für eingehende Anfragen hören haben.

Dann können Sie eine kleine Client-Anwendung schreiben, die an diesem Port oder Socket-Datei verbindet und sendet Befehle an die laufende Anwendung.

Dann können Sie Ihre Fenster-Manager konfigurieren, dass bestimmte Tastenkombinationen binden Ihre kleine Client-Anwendung zu starten.

In UNIX Ihr Zugriff auf eine Kommandozeilen-Shell ist über ein Terminal . Dies geht zurück auf die Zeit, als die Leute ihren großen gemeinsamen Computer buchstäblich über Terminals zugegriffen direkt an die Maschinen (zum Beispiel durch ein serielles Kabel).

In der Tat, die ‚xterm‘ Programm oder was auch immer Derivat Sie verwenden auf Ihrem UNIX-Box richtig bezeichnet als Terminal-Emulator - es verhält sich (sowohl aus Ihrer Sicht und der des Betriebs System) ähnlich wie eine jener altmodischen Terminal-Maschinen.

Dies macht es leicht Eingang auf interessante Weise zu behandeln kompliziert, da es viele verschiedene Arten von Terminals und UNIX-System hat über die Fähigkeiten von jeder Art kennen zu lernen. Diese Fähigkeiten wurden gespeichert traditionell in einer Termcap Datei, und ich denke, modernere Systeme verwenden term statt. Versuchen

man 5 terminfo

auf einem Linux-System für weitere Informationen.

Nun, die gute Nachricht ist, dass Sie brauchen, um nicht zu viel zu tun, um Messing mit Endgerätefähigkeiten, usw. eine Kommandozeilen-Anwendung, die interessanten Dinge mit Ein- oder Windowing Funktionen bietet. Es gibt eine Bibliothek, Flüche , die helfen. Lookup

man 3 ncurses

auf Ihrem Linux-System für weitere Informationen. Sie werden wahrscheinlich in der Lage sein, ein anständiges Tutorial zu finden auf Flüche online mit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top