Comment remapper certaines clés ou périphériques?

220

Je cherche un moyen de remapper certaines clés dans Ubuntu.

i.e.

J'aimerais changer PgUp en Accueil ou PgDown en Fin .

Existe-t-il une commande intégrée ou un outil permettant de réaffecter des clés dans Ubuntu / GNOME?

    
posée NES 05.02.2011 - 14:20
la source

7 réponses

239

Avis: Depuis 2013, Ubuntu et ses dérivés n'utilisent plus xmodmap , mais plutôt xkb . Pour plus d'informations, voir cette réponse . La réponse ci-dessous n'est plus pertinente pour les versions actuelles.

Pour remapper certaines clés, vous avez besoin de deux outils. Premier xev (outil de ligne de commande) et deuxième xmodmap (également un outil de ligne de commande) . Les deux devraient être disponibles dans Ubuntu sans installation supplémentaire.

  1. Démarrez la fenêtre du terminal et exécutez xev . Maintenant, il est actif et attend que vous appuyiez sur une touche. Appuyez ensuite sur la touche dont vous souhaitez modifier le comportement. c'est-à-dire PgUp .

  2. xev affichera des informations sur la touche enfoncée. La troisième ligne est importante. Il devrait ressembler à:

    state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
    

    dans cet exemple Prior est le nom du comportement auquel la clé est affectée pour le moment, le code clé numérique est l'identifiant interne permettant de reconnaître la clé. Maintenant, faites ceci avec une autre clé, à savoir PgDown donner cette sortie

    state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
    

    Ici encore, la partie intéressante pour nous est keycode 115 et Next - le nom du comportement.

  3. maintenant, lorsque vous voulez échanger les deux clés, utilisez xmodmap .

     xmodmap -e "keycode 110 = Next"
    

    Ceci change la clé avec le code de touche 110 sur votre clavier en action Next . C'est assez simple.

    Notez que si la touche que vous mappez doit avoir une signification différente lorsqu'elle est utilisée avec la touche Shift (par exemple, pour les dispositions de clavier britanniques, Shift + 2 donne des guillemets), vous pouvez simplement lister la commande secondaire après la première. Par exemple, si vous souhaitez que la clé portant le code 53 mappe normalement en barre oblique inverse, mais au symbole de barre utilisé avec shift, vous pouvez effectuer les opérations suivantes:

     xmodmap -e "keycode 53 = backslash bar"
    

Informations complémentaires: La séquence de ces mappages est la clé , Maj + clé , mode_switch + clé , mode_switch + Shift + Key , AltGr + Key , AltGr + Shift + Key . Pour ignorer une colonne, utilisez NoSymbol . De plus, ici est une liste complète de tous les Keysyms.

Remarque: ces modifications concernent uniquement la session X active et seront perdues après le redémarrage. Lorsque vous souhaitez enregistrer les modifications de manière permanente, vous devez exécuter les commandes suivantes après les précédentes:

xmodmap -pke >~/.Xmodmap

(il crée un fichier nommé .Xmodmap dans votre répertoire personnel ( ~ ))

Vous devez ensuite créer un fichier nommé .xinitrc dans votre répertoire de base où vous avez placé la commande xmodmap .Xmodmap .

Vous pouvez maintenant modifier .Xmodmap et exécuter xmodmap .Xmodmap à partir de la console pour voir les modifications immédiatement. Les modifications dans .Xmodmap seront persistantes.

source: Ubuntu Foruns

Bonus:

Si la clé que vous remappez a un comportement différent en fonction de l'état ( comment les touches du clavier numérique dépendent de NumLock), il vous suffit de faire xmodmap -pm pour obtenir une liste de modificateurs, puis:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

Supposons, par exemple, que vous souhaitiez obtenir un point au lieu d'une virgule sur le clavier numérique (utile pour la plupart des programmeurs), mais que vous souhaitiez conserver le comportement "supprimer" lorsque NumLock est désactivé.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2 , car xmodmap -pm nous dit que mod2 est Num_Lock , les autres noms sont obtenus en appuyant sur les touches de xev .

    
réponse donnée NES 08.02.2015 - 11:17
la source
20

Si vous essayez de déplacer une touche Maj, il y a quelques étapes supplémentaires:

 xmodmap -e "keycode 62 = Up" # Shift => Up
 xmodmap -e "keycode 111 = Shift_R" # Up => Shift
 xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
 xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
 xset r 62 # Make the new Up key autorepeat
 xset -r 111 # Prevent the new Shift key from autorepeating
    
réponse donnée cmcginty 17.12.2012 - 19:46
la source
16

Je viens de réfléchir après coup… Je pense que vous pouvez vouloir dire quelque chose de complètement différent par "reconfigurer" .. mais je vais laisser ma réponse telle quelle ... (je ne sais pas comment réaffecter une clé pour se comporter comme une autre)

MISE À JOUR : ma "réflexion après coup" a été confirmée; (J'ai répondu à la mauvaise question:) ... veuillez consulter la réponse du wiki communautaire de NES (acceptée ci-dessus).

Il existe deux méthodes générales pour remapper une nouvelle liaison d'une clé.

  • localement à un programme particulier
    (une clé peut être utilisée pour différentes choses dans différentes applications / fenêtres)
  • globalement pour un utilisateur spécifique
    (une touche a la même fonction dans toutes les fenêtres)

Pour les méthodes "locales à un programme", il existe parfois un moyen de modifier les associations de touches proposées par l'application elle-même ... par exemple.

Firefox a un addon appelé keyconfig ... pour des informations, consultez ceci Publication de MozillZine

La plupart des programmes Ubuntu sont basés sur Gnome et il existe un utilitaire spécifique pour modifier le raccourci clavier de tout élément de menu de ces applications Gnome ... Il s’appelle Editable Menu Accelerator ... C’est un outil très sensible, mais assez complexe. puissant .. Vous pouvez l'activer en exécutant gconf-editor (via Terminal ou Alt + F2) ... naviguez vers desktop - gnome - interface et sélectionnez can_change_accels .... Vous pouvez ensuite changez les éléments de menu pour virtuellement tout ce que vous aimez (par programme / fenêtre) ... Je vous suggère de le désactiver dès que vous aurez réalisé ce dont vous avez besoin.

Sinon, vous pouvez configurer des raccourcis clavier globaux. J'utilise un programme appelé xbindkeys . ,uneoptionestégalementdisponiblevialemenuprincipal-Préférences,appeléeKeyboardShortcuts

.

Sivousutilisezxbindkeys,vousdevrezl’ajouteràvos"Applications de démarrage" (menu principal - Préférences) ... Aussi (comme suggéré par Stefano Palazzo), j’ai déjà écrit une description plus détaillée de xbindkeys dans une Répondez à cette page askubuntu

.     
réponse donnée Peter.O 05.02.2011 - 15:04
la source
8

Voici comment j'ai essayé de changer le mappage de la touche ENTER sur la touche SHIFT (et vice versa):

$ uname -a

RAPPORTS:

Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux

$ which xmodmap

RAPPORTS:

/usr/bin/xmodmap

$ which xev

RAPPORTS:

/usr/bin/xev

$ xev

(ignorez la cinquantaine de lignes ou plus)

PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XmbLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
    state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
    state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

L'important est la troisième ligne de chaque pression de touche:

FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".

state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".

INVERSEZ LE MAPPAGE:

$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"

CONSERVEZ LES RÉSULTATS:

$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc

AJOUTER

 xmodmap ~/.Xmodmap

$ sudo reboot

Le problème principal était que l'inversion ne fonctionnait PAS. La clé ENTER a été mappée sur la clé SHIFT_R ; mais la clé SHIFT_R n'a pas été mappée sur la clé ENTER . Allez comprendre.

    
réponse donnée Bill Davis 27.01.2012 - 04:04
la source
7

Pour effectuer des remappages globaux indépendamment de X, vous pouvez utiliser console-setup (5) .

Dans mon cas, je souhaitais remapper la touche de verrouillage des majuscules en D , car ma D clé est brisée:)

J'ai d'abord utilisé dumpkeys (1) pour obtenir un modèle de mappage. Dans le cas de la D -key, le bit intéressant est le mappage du code clé 32. (sur mon clavier); Notez qu'il y a deux espaces dans le modèle grep!

$ sudo dumpkeys | grep "keycode  32" > tempfile
$ cat tempfile
keycode  32 = +d
    shift   keycode  32 = +D
    altgr   keycode  32 = +eth
    shift   altgr   keycode  32 = +ETH
    control keycode  32 = Control_d
    shift   control keycode  32 = Control_d
    altgr   control keycode  32 = Control_d
    shift   altgr   control keycode  32 = Control_d
(121 lines total...)

Pour modifier la carte à appliquer à Verrouillage majuscule (code 58 sur mon clavier) à la place

sed 's/32/58/' -i tempfile

Maintenant, il se lit

keycode  58 = +d
    shift   keycode  58 = +D
    altgr   keycode  58 = +eth
(etc...)

Pour ajouter ce remappage à la carte par défaut, il suffit simplement de l'ajouter au fichier d'inclusion de remappage pour configuration de la console

.
sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'

et la configuration de la console doivent être reconfigurés (en ignorant les questions de faible priorité avec -phigh )

sudo dpkg-reconfigure console-setup -phigh

Le remappage doit maintenant être terminé et chargé automatiquement au démarrage.

    
réponse donnée arand 09.01.2014 - 13:09
la source
3

J'ai passé une journée entière à essayer de créer un raccourci pour Ctrl+Pageup .

J'ai d'abord essayé xmodmap mais cela ne peut pas générer d'événements modificateur. Il est donc impossible de créer un raccourci qui génère par exemple l'événement Control .

J'ai ensuite essayé xbindkeys avec xmacro . Cela fonctionne, mais xbindkeys ne peut pas capturer certaines combinaisons de touches sur mon système, telles que Alt + ___ .

J'ai donc finalement utilisé les raccourcis clavier de Unity - > Raccourcis personnalisés pour configurer mon raccourci.

Et au lieu de xmacro , j’ai maintenant utilisé le programme xvkbd pour générer les événements de clavier, mais ce n’est qu’une préférence personnelle. xmacro et xvkbd fonctionnent presque de la même manière. Une astuce supplémentaire consiste à ajouter un paramètre de délai dans xmacro ou xvkbd pour vous assurer que les événements ne sont pas perdus.

    
réponse donnée HRJ 20.01.2014 - 06:30
la source
0

Pour moi, AutoKey de Software Center a fonctionné au mieux. Il a une interface graphique intuitive, pour ajouter une nouvelle liaison cliquez sur Nouveau - > Phrase et

  1. Ajoutez un nom, cliquez sur OK
  2. Dans la section "Paramètres de phrase", assurez-vous que le collage à l'aide est défini sur le clavier
  3. Ajouter le raccourci que vous souhaitez utiliser
  4. Ajoutez une commande dans le champ de texte, par exemple pour émuler la flèche vers la gauche - ce serait <left> (la liste des clés spéciales est ici ).
réponse donnée bruddha 28.07.2018 - 14:15
la source

Lire d'autres questions sur les étiquettes