Existe-t-il un moyen pour mon binaire de réagir à des raccourcis clavier globaux sous Linux?

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

  •  09-06-2019
  •  | 
  •  

Question

Est-il possible d'écouter un certain raccourci clavier (par exemple: Ctrl - I ), puis d'effectuer une action spécifique? Mon application est écrite en C, ne fonctionnera que sous Linux et ne possède pas d'interface graphique. Existe-t-il des bibliothèques qui facilitent ce type de tâche?

EDIT: par exemple, amarok dispose de raccourcis globaux. Par exemple, si vous associez une combinaison de touches à une action (disons Ctrl - + , Ctrl et + ), vous pouvez exécuter cette action lorsque vous appuyez sur les touches. Si je mappe Ctrl - + à l'action d'augmentation du volume, chaque fois que j'appuie sur ctrl - + le volume devrait augmenter d'un certain montant.

Merci

Était-ce utile?

La solution

À quel point vos touches de raccourci doivent-elles être globales? Est-ce suffisant pour qu'ils soient globaux pour une session X? Dans ce cas, vous devriez pouvoir ouvrir une connexion Xlib et écouter les événements dont vous avez besoin.

Habituellement, les événements clavier de X sont transmis à la fenêtre qui a actuellement le focus et sont propagés dans la hiérarchie jusqu'à ce qu'ils soient gérés. Clairement, ce n'est pas ce que nous voulons. Nous devons traiter l'événement avant qu'une autre fenêtre puisse y accéder. Nous devons appeler XGrabKey dans la fenêtre racine avec le code d'activation et les modificateurs de notre raccourci clavier pour y parvenir.

J'ai trouvé un bon exemple ici .

Autres conseils

Je pense smoofra est sur la bonne voie ici; vous souhaitez enregistrer une touche de raccourci globale auprès de X pour pouvoir intercepter les pressions de touche et prendre les mesures appropriées. Xlib est probablement ce que vous souhaitez et XGrabKey est la fonction, je pense.

Ce n’est pas facile à apprendre, j’ai peur; J'ai trouvé cet exemple qui semble utile: TinyWM . J'ai également trouvé un exemple utilisant Java / JNI (accès à la même fonction Xlib sous-jacente).

Vous devriez consulter le code source de xbindkeys .

La programmation Xlib est assez complexe, la documentation difficile à trouver et les problèmes de portabilité sont subtils. Vous ferez mieux de copier du code dur au combat.

L’une des façons de le faire est d’avoir votre application à l’écoute sur un certain port, ou fichier de socket, pour les demandes entrantes.

Vous pouvez ensuite écrire une petite application client qui se connecte à ce fichier de port ou socket et envoie des commandes à l'application en cours d'exécution.

Ensuite, vous pouvez configurer votre gestionnaire de fenêtres pour lier certaines combinaisons de touches afin de lancer votre petite application client.

Sous UNIX, vous accédez à un shell de ligne de commande via un terminal . Cela remonte au temps où les gens accédaient littéralement à leurs gros ordinateurs partagés via des terminaux connectés directement aux machines (par exemple, via un câble série).

En fait, le programme 'xterm' ou le dérivé que vous utilisez sur votre système UNIX est correctement appelé un émulateur de terminal - il se comporte (à la fois de votre point de vue et de celui de l'opérateur. système) un peu comme l’une de ces machines à terminaux à l’ancienne.

Cela complique légèrement le traitement des entrées de manière intéressante, car il existe de nombreux types de terminaux et que votre système UNIX doit connaître les capacités de chaque type. Ces fonctionnalités étaient traditionnellement stockées dans un fichier termcap , et je pense que les systèmes plus modernes utilisent plutôt terminfo . Essayez

man 5 terminfo

sur un système Linux pour plus d'informations.

Maintenant, la bonne nouvelle est qu’il n’est pas nécessaire de jouer avec les capacités des terminaux, etc. pour avoir une application en ligne de commande qui fait des choses intéressantes avec des fonctionnalités d’entrée ou de fenêtrage. Il existe une bibliothèque, malédictions , qui vous aidera. Rechercher

man 3 ncurses

sur votre système Linux pour plus d'informations. Vous serez probablement en mesure de trouver un bon tutoriel sur l’utilisation des malédictions en ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top