web-dev-qa-db-fra.com

Comment remapper certaines clés ou appareils?

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

c'est à dire.

Je voudrais changer PgUp à Home ou PgDown à End.

Existe-t-il une commande intégrée ou un outil qui réaffecte les clés dans Ubuntu/GNOME?

232
NES

Remarque: À partir de 2013, Ubuntu et ses dérivés n'utilisent plus xmodmapname__, mais plutôt xkbname__. 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 second xmodmap (également 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 xevname__. 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. xevaffichera 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, Priorest le nom du comportement auquel la clé est affectée pour le moment, le numéro keycode est l'identifiant interne permettant de reconnaître la clé. Maintenant, faites cela avec une autre clé, c'est-à-dire 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 xmodmapname__.

     xmodmap -e "keycode 110 = Next"
    

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

    Notez que si la clé que vous mappez doit avoir une signification différente lorsqu’elle est utilisée avec le Shift touche (par exemple pour les dispositions de clavier britanniques, Shift+2 donne des guillemets), vous pouvez simplement énumérer 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 KeyShift+Keymode_switch+Keymode_switch+Shift+KeyAltGr+KeyAltGr+Shift+Key. Pour ignorer une colonne, utilisez NoSymbolname__. 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 celles ci-dessus:

xmodmap -pke >~/.Xmodmap

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

Ensuite, vous devez créer un fichier nommé .xinitrc dans votre répertoire personnel 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 apportées à .Xmodmap persisteront.

source: buntu Foruns

Bonus:

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

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, parce que xmodmap -pm nous indique que mod2 est Num_Lock, les autres noms sont obtenus en appuyant sur les touches dans xevname__.

248
NES

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
20
cmcginty

Je viens d’avoir une réflexion après coup. Je pense que vous pouvez vouloir dire quelque chose de complètement différent par "remapper" .. mais je vais laisser ma réponse telle quelle ... (Je ne sais pas comment réaffecter une clé à se comporter comme un autre)

UPDATE: ma "réflexion a posteriori" 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 y a deux manières générales de remapper relier 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 combinaisons de touches proposées par l'application elle-même ... par exemple.

Firefoxa un addon appelé keyconfig ... pour quelques informations, voir ceci post 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 puissant .. Vous pouvez activez-le en exécutant gconf-editor (via Terminal ou Alt + F2) ... naviguez vers desktopname __ - gnomename __ - interfaceet sélectionnez can_change_accels ... Vous pouvez ensuite modifier les éléments de menu en virtuellement tout ce que vous aimez (par programme/fenêtre). .. Je vous suggère de le désactiver dès que vous avez fait ce dont vous avez besoin ..

Sinon, vous pouvez configurer des raccourcis clavier globaux. J'utilise un programme appelé xbindkeysInstall xbindkeys , et une option est également disponible via le menu principal - Préférences, appelé Keyboard Shortcuts

Si vous utilisez xbindkeys, vous devrez l’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éponse à ce sujet. page askubunt

16
Peter.O

Voici comment j’ai essayé de changer la cartographie du ENTER clé de la SHIFT clé (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 les cinquante prochaines lignes environ)

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 LA CARTOGRAPHIE:

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

CONSERVER LES RÉSULTATS:

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

AJOUTER

 xmodmap ~/.Xmodmap

$ Sudo reboot

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

9
Bill Davis

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

Dans mon cas je voulais remapper Caps Lock la clé de D, depuis ma Dla clé est cassé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 keycode 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...)

Afin de changer la carte à appliquer à Caps Lock (code 58 sur mon clavier) à la place

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

Maintenant il lit

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

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

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

et la configuration de la console doit être reconfigurée (en sautant les questions de faible priorité avec -phigh)

Sudo dpkg-reconfigure console-setup -phigh

Maintenant, le remappage doit être terminé et chargé automatiquement au démarrage.

7
arand

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

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

J'ai ensuite essayé xbindkeysavec xmacroname__. Ce type de travail fonctionne, mais xbindkeysn'est pas en mesure de capturer certaines combinaisons de touches sur mon système, telles que Alt + ___.

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

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

3
HRJ

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

  1. Ajouter un nom, cliquez sur OK
  2. Dans la section "Paramètres de phrase", assurez-vous que le collage avec est défini sur clavier.
  3. Ajouter le raccourci que vous voulez utiliser
  4. Ajoutez une commande dans le champ de texte, par exemple pour émuler la flèche gauche - ce serait <left> (la liste des clés spéciales est ici ).
2
bruddha

Si vous avez besoin de remapper une clé pour un programme spécifique uniquement, j'ai viens d'ajouter cette fonctionnalité sur hax11.

Je voudrais changer PgUp à Home ou PgDown à End.

Pour ce faire avec hax11, ouvrez le fichier de configuration du profil du programme sous ~/.config/hax11/profiles (par exemple, ~/.config/hax11/profiles/usr\lib\firefox\firefox) et ajoutez:

Enable=1
MapK112=K110
MapK117=K115
0
Vladimir Panteleev