web-dev-qa-db-fra.com

Quel type de code les "raccourcis personnalisés" du clavier acceptent-ils?

La première chose que l’on m’ait appris à faire lorsque j’utilise Debian ou Ubuntu est de créer un raccourci (dans mon cas Ctr+Alt+T) pour ouvrir un terminal. Pour ce faire, je crée un nouveau raccourci clavier (dans les options> clavier du système X) avec le code x-terminal-emulator. Cela semble assez simple comme une commande bash: taper ceci dans le terminal produit également une fenêtre de terminal.

J'utilise actuellement Debian 9.5 (Stretch) et j'essaie de définir des raccourcis pour un nouveau clavier externe. Cependant, lorsque j'essaie de créer des raccourcis pour d'autres commandes que je peux utiliser depuis le terminal (tels que firefox ou echo "$"), le raccourci ne fonctionne pas. Je n'arrive pas à trouver une bonne documentation sur le type de commande que prend le raccourci de création, mais il ne semble pas tout à fait accepter les commandes bash.

2
Dmitry Vaintrob

La première chose que l’on m’ait appris à faire lorsque j’utilise Debian ou Ubuntu est de créer un raccourci (dans mon cas Ctr+Alt+T) pour ouvrir un terminal. Pour ce faire, je crée un nouveau raccourci clavier (dans les options> clavier du système X) avec le code x-terminal-emulator.

Il existe deux types de raccourcis. Certains d'entre eux sont gérés par l'environnement de bureau - des choses comme Ctr+Alt+T. Différents environnements de bureau gèrent différents ensembles de raccourcis. Des bureaux tels que GNOME, Unity, LXDE, MATE, etc. - ils ont un code intégré pour cela et vous ne pouvez pas vraiment changer ces raccourcis sans recompiler le code de l'environnement de bureau. Les ordinateurs de bureau comme Openbox, Blackbox - ils ne gèrent pas ces raccourcis. Ce que vous avez appris devrait être considéré dans le contexte de votre environnement de bureau. Vous ne devriez pas avoir besoin de déclarer un raccourci pour x-terminal-emulator pour les bureaux tels que GNOME et d'autres que j'ai mentionnés plus tôt, car ils gèrent déjà cela.

Cependant, lorsque j'essaie de créer des raccourcis pour d'autres commandes que je peux utiliser à partir du terminal (telles que firefox ou echo "$"), le raccourci ne fonctionne pas.

Les raccourcis personnalisés - ce que vous déclarez vous-même - fonctionnent sur des exécutables , c’est-à-dire que vous devez spécifier un fichier valide existant sur le disque, tel que /bin/bash ou au moins une commande qui existe dans l'un des répertoires répertoriés sous la variable $PATH. L'environnement de bureau exécutera execve() syscall pour démarrer cette application lorsque vous appuierez sur le raccourci. C'est aussi la raison pour laquelle echo $? ne fonctionne pas - il n'y a pas de Shell pour comprendre ce que $? signifie. Les variables Shell n'ont de signification que dans Shell. Donc que fais-tu? Dites le raccourci pour démarrer le shell! Cela se fait généralement via bash -c 'echo $?' pour les commandes courtes ou en utilisant un script avec la ligne appropriée #! en haut du script. Il est donc essentiel de se rappeler que les raccourcis n'exécutent pas les commandes Shell, ils exécutent les exécutables. Pour donner un exemple pratique où bash -c '...' est utilisé, voir Comment créer un raccourci qui exécute une commande xdotool pour simuler une pression sur une touche?

Quant à savoir pourquoi firefox ne fonctionnait pas pour vous, firefox vérifiait l'existence de fenêtres ouvertes existantes ou il y avait une autre erreur. Pensez à utiliser bash -c 'firefox > 2>&1 foxlogfile.txt' pour rechercher la cause du problème ou les erreurs éventuelles.

Je n'arrive pas à trouver une bonne documentation sur le type de commande que prend le raccourci de création, mais il ne semble pas tout à fait accepter les commandes bash.

La réponse courte - il n'y a pas une telle documentation, vraiment. Tant que vous vous souvenez que les raccourcis utilisent des fichiers exécutables au lieu de commandes Shell, c'est tout ce dont vous avez besoin. Et bien sûr, vous devez savoir quelle est la méthode de déclaration des raccourcis sur votre bureau - la méthode Openbox est différente de GNOME par exemple.

P.S: En fait, il existe un troisième type de raccourcis mais ils ne sont pas liés à l’environnement de bureau, c’est-à-dire qu’ils ne sont pas des raccourcis graphiques. bash lit le fichier ~/.inputrc, où vous pouvez déclarer l'exécution de certaines commandes pour une combinaison de touches particulière. Cependant, cela sort du cadre de cette question et constitue un sujet différent. Voir this pour un exemple.

P.S.2: Les bureaux basés sur GNOME, tels que Unity, utilisent GSettings et la base de données DConf pour appliquer des paramètres particuliers à chaque utilisateur du bureau. En tant que tels, les raccourcis dans cet environnement peuvent être contrôlés et définis via une ligne de commande, mais le même concept s'applique: ils doivent être des exécutables ou quelque chose que l'environnement de bureau reconnaît, car il fait partie du code de l'environnement de bureau. Voir cet article à propos de l'un de mes scritps pour désactiver Super Key sous Unity et réponse de Jacob Vlijm pour la définition de raccourcis via un terminal (rappelez-vous que cela ne s'applique qu'aux systèmes basés sur GNOME).

Voir également

2