Xbindkeys ne fonctionnera pas correctement

9

J'ai un petit problème. Je voulais remapper certains raccourcis clavier auxquels je suis habitué à partir de mon système précédent, mais je ne peux pas le faire fonctionner correctement xbindkeys.

xbindkeys reconnaît la combinaison, mais la commande ne se déclenche pas.

Si j'utilise la commande

xdotool key braceleft

Il me sort le bon {signe dans la console. Cependant, si j'utilise la même commande dans xbindkeys, rien ne se passe. Si je remplace la commande par firefoxelle fonctionne correctement et ouvre Firefox, donc je suppose que ça xbindkeysmarche.

Je veux atteindre les objectifs suivants:

Je veux taper le caractère {dans la fenêtre active avec Alt_R+ 7ou Alt_Left+ Ctrl+ 7pour pouvoir utiliser les deux. Je sais que Alt_R(AltGr) est la bonne façon, mais sur les claviers allemands, il est en quelque sorte difficile de taper le braceleft avec la AltGrtouche (Alt_R), donc je dois utiliser Alt_L+ Control+ à la 7place (comme je l'étais dans mon système précédent). J'ai réussi à le faire fonctionner correctement en 12.04, mais je ne peux pas le faire fonctionner en 14.04.

Aucune suggestion? J'ai essayé plusieurs commandes. Tous ont fonctionné dans la console, mais aucun n'a fonctionné 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

Modification de la solution

Comme j'ai essayé plusieurs autres choses, j'ai remarqué que xdotool semble se déclencher trop tôt. J'ai modifié la config comme ceci:

"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7

MAINTENANT, il envoie le bon signe {à la fenêtre active. Maintenant, la seule chose qui reste est de réduire le sommeil et le retard à une valeur réalisable, car 1 seconde semble un peu trop long :)

** Informations sur l'ajout ** Eh bien, maintenant j'ai réussi à trouver des valeurs appropriées. CEPENDANT, cela ne fonctionne que si vous relâchez les touches jusqu'à ce que la durée de sommeil soit terminée. Si vous êtes trop lent ou ne fonctionnera 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

Cependant, si vous voulez taper plusieurs signes @ (par exemple), vous devez appuyer sur Ctrl + Alt + Q comme prévu, mais relâchez toutes les touches et appuyez à nouveau dessus. Cependant, c'est beaucoup, beaucoup mieux que de ne pas avoir l'option Control + Alt au lieu d'AltGr mais ce n'est pas aussi efficace que moi aussi. Je trouverai peut-être aussi une solution à cela.

Ello
la source
C'est une bonne trouvaille! Il n'y a pas de limite de représentant pour répondre à votre propre question, seulement une limite de temps . Ce serait formidable si vous pouviez revenir et poster ceci comme réponse dans 6 heures. Cela vous donnera également un représentant si vous vous souciez de cela. Si vous ne vous souciez vraiment pas, je vais simplement inclure votre solution dans ma réponse dans quelques jours.
terdon
Avez-vous déjà compris comment xdotoolrépéter la touche tout en maintenant la touche enfoncée?
Farzher
Pour être honnête, je ne l'ai pas encore essayé. J'ai réussi à faire fonctionner League of Legends avec 60 images par seconde (en 12.04, cela ne commencerait pas du tout), de sorte que lorsque je suis à la maison, je jouais tout le temps.
Ello
Je n'ai pas eu de raccourcis pendant des jours. La solution était simple: mon bureau Ubuntu avait les raccourcis avant xbindkeys. Modifiez simplement les paramètres du kayboard, ajoutez un nouveau raccourci personnalisé avec actionxdotool getactivewindow key Home
BurninLeo
On dirait que vous essayez de simuler une disposition de clavier allemande. Pourquoi ne changez-vous pas simplement la disposition de votre clavier dans les paramètres système?
Rapti

Réponses:

4

Le problème avec xdotoolest pendant que les vraies touches sont pressées Xorg envoie à plusieurs reprises des événements de pression de touche (regardez la xevsortie). Pour surmonter cela, vous devez désactiver temporairement la fonction de répétition, puis générer un événement KeyRelease sur une clé qui était 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
midenok
la source
Merci pour votre réponse, mais j'utilise Manjaro avec XFCE maintenant et là, cela a fonctionné hors de la boîte, donc pas de sommeil nécessaire.
Ello
@Ello, ces réponses ne sont pas que pour vous, donc la solution la plus universelle est appréciée.
midenok
3

Comme j'ai essayé plusieurs autres choses, j'ai remarqué que xdotool semble se déclencher trop tôt. J'ai modifié la config comme ceci:

"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7

MAINTENANT, il envoie le bon signe {à la fenêtre active. Maintenant, la seule chose qui reste est de réduire le sommeil et le retard à une valeur réalisable, car 1 seconde semble un peu trop long :)

** Informations sur l'ajout ** Eh bien, maintenant j'ai réussi à trouver des valeurs appropriées. CEPENDANT, cela ne fonctionne que si vous relâchez les touches jusqu'à ce que la durée de sommeil soit terminée. Si vous êtes trop lent ou ne fonctionnera 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

Cependant, si vous voulez taper plusieurs signes @ (par exemple), vous devez appuyer sur Ctrl + Alt + Q comme prévu, mais relâchez toutes les touches et appuyez à nouveau dessus. Cependant, c'est beaucoup, beaucoup mieux que de ne pas avoir l'option Control + Alt au lieu d'AltGr mais ce n'est pas aussi efficace que moi aussi. Je trouverai peut-être aussi une solution à cela.

Ello
la source
C'est très étrange, je suis content que vous ayez travaillé, mais je ne peux vraiment pas comprendre pourquoi cela se produit. Quoi qu'il en soit, merci d'avoir pris le temps de poster ceci, cela pourrait aider la prochaine personne avec le même problème.
terdon
Au lieu de sleep, je pense que vous voulez ajouter + releaseaux combos clés. Cela indiquera xbindkeysd'attendre que la touche soit relâchée avant de déclencher la commande.
wjandrea
2

J'ai récemment rencontré ce problème, où j'ai essayé de simuler la clé de lecture / pause multimédia (XF86AudioPlay) à l'aide de Ctrl + G.Après quelques recherches, il est apparu non seulement que j'avais besoin d'annuler le contrôle , mais également la touche g (qui est ce qui avait besoin du sleep 0.1délai pour commencer). Si j'annule ces deux clés en utilisant keyupdans 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
QuickishFM
la source
1

Je ne sais pas pourquoi cela ne fonctionne pas xbindkeys, je suppose que vous devez spécifier la fenêtre dans laquelle écrire. Comme solution de contournement, vous pouvez utiliser à la xvkbdplace.

  1. Installer xvkbd

    sudo apt-get install xvkbd
    
  2. Ajoutez ceci à votre .xbindkeysrcfichier

    "xvkbd -text '{'"
    Control+Alt + 7
    

Cela devrait fonctionner.


REMARQUES

Pour une raison quelconque, sur ma machine, xvkbdj'utilise l'une de mes mises en page secondaires (espagnol) au lieu de ma principale (anglais américain), ce qui entraîne l' {impression ". Si vous rencontrez également ce problème, jouez un peu pour savoir quelle touche correspond à {la disposition utilisée. Alternativement, vous pouvez creuser plus profondément et déterminer d'où proviennent xvkbdses localeparamètres.

terdon
la source
ne fonctionne toujours pas. même avec des caractères appropriés. si j'écris xvkbd -text 'apple' dans la console, il imprime apple, si je l'exécute via xbindkeys, rien ne se passe. si je regarde xbindkeys -v il voit qu'il a reconnu la commande pressée
Ello
je l'ai fait fonctionner, mais avec autre chose
Ello
@Ello génial! Qu'avez-vous utilisé? Cela a bien fonctionné pour moi. Pourriez-vous poster une réponse expliquant votre solution et l'accepter?
terdon
J'ai modifié mon post, je ne peux pas répondre à mes propres questions par manque de réputation. Désolé
Ello