Taper en utilisant des combinaisons de touches?

12

Je suis un utilisateur d'Ubuntu 10.04 qui cherche par exemple à faire en sorte que mon ordinateur tape un caractère "+" lorsque je maintiens la Windowstouche (je pense que cela s'appelle Superdans le monde Linux) et que j'appuie sur la Ktouche. J'ai besoin de cela pour fonctionner dans toutes les applications. (Je suis une personne ayant un handicap de frappe et j'ai besoin d'adapter Ubuntu à mes besoins.) Merci!

Kris Harper
la source

Réponses:

15

Puisque vous souhaitez remapper les clés pour toutes les applications, la meilleure option est d'utiliser xmodmap. Il est flexible et très puissant mais implique de taper quelques commandes dans un terminal.

Étape 0 - L'approche

Le serveur X gère le clavier et tous les événements clés et les traduit en codes clés pour toutes les applications.

L'approche consisterait à mapper une touche de modification (comme la touche Super ou Alt droite) comme touche de "changement de mode" et à dire au serveur X de générer des codes différents selon que l'on appuie sur une touche avec la touche Mode enfoncée ou non.

Par défaut, aucune touche de changement de mode n'est définie et toutes les touches sont également configurées pour générer le même code lorsqu'elles sont enfoncées avec ou sans changement de mode. C'est bien car cela signifie que, sauf pour les clés que vous remplacez explicitement, aucune autre clé ne se comportera différemment ou n'aura besoin d'une configuration supplémentaire.

Cependant, je voudrais que vous envisagiez d'utiliser la touche Alt droite comme commutateur de mode, surtout si vous utilisez également Compiz, car certains plug-ins Compiz mappent les raccourcis de super-clés (par exemple, sélecteur de fenêtre, commutateur de changement de vitesse, etc.). Si vous ne souhaitez pas contrôler la compiz via le clavier, Super est très bien.

Pour xmodmap, les super clés sont identifiées comme Super_L ou Super_R. Vous devez en choisir un à utiliser comme touche de changement de mode. Alternativement, la touche alt droite est Alt_R. Vous pouvez les confirmer en exécutant xev et en appuyant sur les touches nécessaires de votre clavier. Voir cet article pour les étapes.

Étape 1 - Configuration de la carte des modificateurs

  1. Ouvrez un terminal ( Applications -> Accesories -> Terminal) et exécutez la commande suivante pour créer un fichier avec les raccourcis clavier actuels . Nous l'utiliserons comme point de départ.

    xmodmap -pke > curkeys.map
    xmodmap -pm >> curkeys.map
    
  2. Ouvrez-le dans votre éditeur de texte préféré. gedit curkeys.map &l'ouvre dans gedit. Vers la fin du fichier, vous verrez quelques lignes comme celle-ci:

    keycode 253 =
    keycode 254 =
    keycode 255 =
    xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
    
    shift       Shift_L (0x32),  Shift_R (0x3e)
    lock        Caps_Lock (0x42)
    control     Control_L (0x25),  Control_R (0x69)
    mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
    mod2        Num_Lock (0x4d)
    mod3      
    mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
    mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
    
  3. Supprimez la ligne commençant par "xmodmap: jusqu'à 4 ..."

  4. Modifiez la carte des modificateurs pour qu'elle ressemble à ceci. Mettez le mot "ajouter" au début de chaque ligne et insérez "=" après le nom du modificateur. Supprimez ensuite les codes entre parenthèses et virgules. Notez également que je suis passé Mode_switchd'une mod5ligne à l'autre mod3car elle était vide. Le tableau modifié devrait ressembler à ceci - le contenu réel variera légèrement dans votre cas de ceux ci-dessous (dépend de la disposition de votre clavier).

    add shift =      Shift_L  Shift_R
    add lock  =      Caps_Lock
    add control =    Control_L  Control_R
    add mod1    =    Alt_L Meta_L Alt_R 
    add mod2    =    Num_Lock
    add mod3    =    Mode_switch
    add mod4    =    Super_L Super_R Super_L Hyper_L 
    add mod5    =    ISO_Level3_Shift
    
  5. Remapper la touche de changement de mode physique. Ajoutez une ligne comme celle-ci à la fin (remplacez Super_L par Super_R ou Alt_R si nécessaire).

    keysym Super_L = Mode_switch
    
  6. Supprimez le nom de clé (Super_L) de toute définition de modificateur. Pour Super_L, cela signifie le supprimer de la ligne mod4.

    add mod4    =    Super_R Hyper_L 
    

    Maintenant, la touche "Super" droite agira toujours comme une super touche normale tandis que la touche gauche aura des propriétés spéciales.

  7. Maintenant, nous devons remapper les touches pour produire des codes différents, qu'ils soient enfoncés tout en maintenant Super_L enfoncé ou non. Chaque ligne de notre fichier commençant par keycodespécifie 4 clés pour chaque touche à générer, selon que les touches Mod1 (touches Maj) et Changement de mode sont enfoncées. ( Lien )

    !...........................................................................
    !        Key            Base              Shift           Mode    Mode+Shift
    !---------------------------------------------------------------------------
    keycode  13             = 4               dollar          4       quotedbl
    keycode  14             = 5               percent         5       colon
    keycode  15             = 6               asciicircum     6       comma
    keycode  16             = 7               ampersand       7       period
    ...
    keycode  45             = k               K               k       K
    

    Si nous voulons que la touche Super_L + k génère une touche "+", nous devons la modifier pour la lire

    keycode  45 = k K plus plus
    

    Le plus final mappe également Shift + Super_L + k à plus, mais cela peut être mappé à autre chose. Pour chaque touche, il y a exactement 1 ligne à modifier. Modifiez plus de lignes pour remapper plus de touches - laissez les 2 premières entrées intactes pour conserver le comportement normal de la touche.

  8. Enregistrez le fichier et quittez l'éditeur.

  9. Installez le clavier en exécutant les commandes suivantes dans un terminal. Le premier le configure pour cette session, le second le rend permanent pour les sessions futures.

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    
  10. Vous pouvez immédiatement le tester en appuyant sur les touches modifiées (Super_L + k par exemple).

Étape 3 - Ajout / révision de la carte

Une fois la carte modifiée installée, il est facile d'ajouter de nouvelles clés.

  1. Utilisez xev pour trouver les codes et les keyymes

  2. testez-le en exécutant cette commande pour mapper la clé:

    xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
    

    Remplacez les éléments entre crochets (comme <code> <base>etc.) par les valeurs appropriées.

  3. Sauvegardez le curkeys.mapfichier.

  4. Ouvrez le curkeys.mapet modifiez la ligne du code clé correspondant.
  5. Réappliquez avec les commandes ci-dessous (la première n'est pas nécessaire si vous avez fait l'étape 2)

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    

Remarque: 1 : les modifications apportées aux raccourcis clavier (par exemple, System -> Preferences -> Keyboard Shortcuts) affectent la carte des modificateurs et seront généralement perdues lors de la prochaine connexion. Veuillez donc éviter cela.

Remarque: 2 : Je reçois parfois des messages d'erreur comme celui-ci lorsque j'utilise cette méthode. Je ne sais pas ce que cela signifie, cependant, ceux-ci sont généralement inoffensifs.

X Error of failed request:  BadValue (integer parameter out of range for operation)
Major opcode of failed request:  118 (X_SetModifierMapping)
Value in failed request:  0x17
Serial number of failed request:  263
Current serial number in output stream:  263

Une aide détaillée pour xmodmap est disponible ici .

koushik
la source
une chance avec celui-ci? Si cela n'aide pas ou en tout cas pas clair, veuillez réviser et le rendre plus utile.
koushik
1
S'il vous plaît noter que dans Linux Mint 17 Xfce (ou au moins là - bas), il doit être ~/.Xmodmap, ~/.xmodmapsera ignorée.
2014
2
N'oubliez pas clearles clés qui sont en cours de réinitialisation selon unix.stackexchange.com/a/4526/2512
Andy