web-dev-qa-db-fra.com

Taper en utilisant des combinaisons de touches?

Je suis un utilisateur d’Ubuntu 10.04 qui cherche un moyen, par exemple, de faire taper le caractère "+" sur mon ordinateur lorsque je Windows Key (je pense que ça s'appelle Super dans le monde Linux) et appuyez sur la touche K clé. J'ai besoin que cela fonctionne dans toutes les applications. (Je suis une personne handicapée en dactylographie et je dois adapter Ubuntu à mes besoins.) Merci!

12
Amanda Jones

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

Étape 0 - L'approche

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

L’approche consisterait à mapper une touche de modification (telle que la touche Super ou la touche Alt droite) en tant que touche "commutateur de mode" et à demander 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 clé de commutateur de mode n'est définie et toutes les clés sont configurées pour générer le même code lorsqu'elles sont actionnées avec ou sans commutateur de mode. C'est bien, car cela signifie qu'à l'exception des clés que vous remplacez explicitement, aucune autre clé ne se comportera différemment ni ne nécessitera une configuration supplémentaire.

Toutefois, j'aimerais que vous envisagiez d'utiliser la touche Alt droite comme commutateur de mode, en particulier si vous utilisez également Compiz, car certains plug-ins mappent les raccourcis de la clé (par exemple, le sélecteur de fenêtre, le sélecteur de vitesse, etc.). Si vous n’aimez pas contrôler Compiz via le clavier, alors tout va bien pour Super.

Pour xmodmap, les super-clés sont identifiées comme Super_L ou Super_R. Vous devez en choisir une à utiliser comme clé 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 ce post pour les étapes.

Étape 1 - Configuration de la carte de modificateur

  1. Ouvrez un terminal (Applications -> Accesories -> Terminal) et exécutez la commande suivante pour créer un fichier avec des associations de clé actuelles . Nous allons utiliser cela 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. Supprimer la ligne commençant par "xmodmap: up to 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 j'ai déplacé Mode_switch de la ligne mod5 vers la ligne mod3 car elle était vide. Le tableau modifié devrait ressembler à ceci: le contenu réel sera légèrement différent de celui présenté ci-dessous (cela 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. Remappez la clé de commutation 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" de droite agira toujours comme une super touche normale tandis que la touche de gauche aura des propriétés spéciales.

  7. Nous devons maintenant remapper les touches pour produire différents codes, qu’elles soient appuyées en maintenant Super_L enfoncé ou non. Chaque ligne de notre fichier commençant par keycode spécifie 4 clés d’entraînement pour chaque clé à générer, selon que vous appuyez sur les touches Mod1 (touches majuscules) et Mode switch. ( 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 Super_L + k génère une touche "+", nous devons le modifier pour le lire.

    keycode  45 = k K plus plus
    

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

  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 le tester immédiatement 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 keycodes et keysyms

  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 fichier curkeys.map.

  4. Ouvrez le curkeys.map et éditez la ligne pour le code correspondant.
  5. Renouvelez l'application avec les commandes ci-dessous (la première n'est pas nécessaire si vous avez exécuté l'étape 2)

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

Remarque: 1 : les modifications apportées aux raccourcis clavier (via _, par exemple, System -> Preferences -> Keyboard Shortcuts) affectent la carte de modificateur et seront généralement perdues lors de la prochaine connexion. Alors s'il te plaît, évite ça.

Remarque: 2 : Je reçois parfois des messages d'erreur de ce type lorsque j'utilise cette méthode. Je ne sais pas ce que cela signifie, cependant, ils 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 sur xmodmap est disponible ici .

15
koushik