J'ai un petit problème. Je souhaitais remapper des touches de raccourci auxquelles je suis habitué de mon système précédent, mais je ne parviens pas à le faire fonctionner correctement avec xbindkeys
.
xbindkeys
reconnaît la combinaison mais la commande ne se déclenche pas.
Si j'utilise la commande
xdotool key braceleft
Le résultat est le signe {
correct dans la console. Cependant, si j'utilise la même commande dans xbindkeys, rien ne se passe. Si je remplace la commande par firefox
cela fonctionne correctement et ouvre Firefox, donc je suppose que xbindkeys
fonctionne.
Je veux atteindre les objectifs suivants:
Je souhaite saisir le caractère {
dans la fenêtre active avec Alt_R + 7 ou Alt_Left+Ctrl+7 afin que je puisse utiliser les deux. je connais Alt_R (AltGr) est la bonne façon, mais sur les claviers allemands, il est difficile de taper le braceleft avec le AltGr (Alt_R) clé donc je dois utiliser Alt_L+Control+7 au lieu de cela (comme j'étais habitué dans mon système précédent). Je l'ai en quelque sorte fonctionné correctement en 12.04, mais je ne peux pas le faire fonctionner en 14.04.
Aucune suggestion? J'ai essayé plusieurs commandes. Tous travaillaient dans la console mais aucun d'eux ne fonctionnait lorsqu'il était exécuté par xbindkeys
xdotool type '{'
xdotool key braceleft
xdotool key ISO_Level3_Shift+7
xvkbd -xsendevent -text '{'
xvkbd -xsendevent -text '\[Alt_R]+7'
Ceci est ma config, qui ne fonctionnera pas
"xdotool key braceleft"
Control+Alt + 7
Cependant, cela fonctionne:
"firefox"
Control+Alt + 7
Solution Edit
Comme j'ai essayé plusieurs autres choses, j'ai remarqué que xdotool semble se déclencher trop tôt. J'ai modifié la configuration comme ceci:
"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7
MAINTENANT, il envoie le {signe correct à la fenêtre active. Il ne reste plus qu’à réduire le sommeil et les retards à une valeur raisonnable, car 1 seconde semble un peu trop long :)
** Ajout Info ** Eh bien, maintenant, j'ai réussi à trouver des valeurs appropriées. CEPENDANT, cela ne fonctionne que si vous relâchez les touches jusqu'à la fin de la durée du sommeil. Si vous êtes trop lent si cela ne fonctionne pas.
Ceci est ma configuration actuelle pour tous les caractères AltGr allemands peu pratiques
"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7
"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q
"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e
"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8
"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9
"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0
"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus
Toutefois, si vous souhaitez saisir plusieurs signes @ (par exemple), vous devez appuyer sur Ctrl + Alt + Q comme prévu, mais relâchez toutes les touches, puis appuyez à nouveau dessus. C’est cependant beaucoup mieux que de ne pas avoir l’option Ctrl + Alt au lieu de AltGr mais ce n’est pas aussi efficace que j’ai été utilisé aussi. Peut-être que je trouverai une solution à cela aussi.
Le problème avec xdotool
survient lorsque de vraies touches sont enfoncées. Xorg envoie à plusieurs reprises des événements de pression de touche (consultez la sortie xev
.). Pour résoudre ce problème, vous devez désactiver temporairement la fonction de répétition, puis générer un événement KeyRelease sur une clé en panne.
Au lieu de
"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7
essayez ce qui suit:
"xset r off; xdotool keyup --window 0 7 type --clearmodifiers --window 0 '{'; xset r on"
Control+Alt + 7
Comme j'ai essayé plusieurs autres choses, j'ai remarqué que xdotool semble se déclencher trop tôt. J'ai modifié la configuration comme ceci:
"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7
MAINTENANT, il envoie le {signe correct à la fenêtre active. Il ne reste plus qu’à réduire le sommeil et les retards à une valeur raisonnable, car 1 seconde semble un peu trop long :)
** Ajout Info ** Eh bien, maintenant, j'ai réussi à trouver des valeurs appropriées. CEPENDANT, cela ne fonctionne que si vous relâchez les touches jusqu'à la fin de la durée du sommeil. Si vous êtes trop lent si cela ne fonctionne pas.
Ceci est ma configuration actuelle pour tous les caractères AltGr allemands peu pratiques
"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7
"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q
"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e
"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8
"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9
"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0
"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus
Toutefois, si vous souhaitez saisir plusieurs signes @ (par exemple), vous devez appuyer sur Ctrl + Alt + Q comme prévu, mais relâchez toutes les touches, puis appuyez à nouveau dessus. C’est cependant beaucoup mieux que de ne pas avoir l’option Ctrl + Alt au lieu de AltGr mais ce n’est pas aussi efficace que j’ai été utilisé aussi. Peut-être que je trouverai une solution à cela aussi.
Comme indiqué dans des questions similaires ( Pourquoi ces commandes xte fonctionnent-elles dans un terminal, mais pas lorsqu'elles sont liées à xbindkeys? ), vous pouvez demander à xbindkeys
de déclencher des événements à la sortie (touche en haut):
"xdotool key braceleft"
Release+Control+Alt + 7
De cette manière, il n'y a pas de conflit entre les touches utilisées pour le raccourci et celles envoyées.
Vous ne savez pas pourquoi cela ne fonctionne pas avec xbindkeys
, je suppose que vous devez spécifier la fenêtre dans laquelle vous souhaitez écrire. Pour résoudre ce problème, vous pouvez utiliser xvkbd
à la place.
Installer xvkbd
Sudo apt-get install xvkbd
Ajoutez ceci à votre fichier .xbindkeysrc
"xvkbd -text '{'"
Control+Alt + 7
Cela devrait fonctionner.
REMARQUES
Pour une raison quelconque, sur ma machine, xvkbd
utilise l'une de mes dispositions secondaires (espagnol) à la place de la version principale (anglais américain), ce qui entraîne que {
imprime réellement "
. Si vous rencontrez également ce problème, il vous suffit de vous amuser un peu pour savoir quelle touche correspond à {
avec la présentation utilisée. Vous pouvez également creuser plus profondément et déterminer où xvkbd
sige ses paramètres locale
.
J'ai récemment eu ce problème, où j'ai essayé de simuler la touche multimédia Lecture/Pause (XF86AudioPlay) à l'aide de Ctrl + G. Après quelques recherches, il est apparu que je devais non seulement annuler la Control, mais aussi aussi la touche g (qui est ce qui avait besoin du délai sleep 0.1
pour commencer). Si j'annule ces deux clés en utilisant keyup
dans xdotool ainsi que le commutateur --clearmodifiers, cela fonctionne. Voici ma nouvelle commande, dans mon fichier .xbindkeys.rc:
"xdotool keyup g key --clearmodifiers XF86AudioPlay"
Control + g