276 votes

Comment remapper certaines touches ou certains dispositifs ?

Je cherche un moyen de remapper certaines touches dans ubuntu.

c'est-à-dire

J'aimerais changer PgUp a Home o PgDown a End .

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

280voto

Rodent43 Points 697

Avis : Depuis 2013, Ubuntu et ses dérivés n'utilisent plus de xmodmap mais utilisez 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 touches, vous avez besoin de deux outils. D'abord xev (outil en ligne de commande) et le second xmodmap (également outil en ligne de commande). Les deux devraient être disponibles dans Ubuntu sans installation supplémentaire.

  1. Démarrez une fenêtre de terminal et exécutez xev . Maintenant, il est actif et attend que vous appuyiez sur une touche. Ensuite, appuyez sur la touche dont vous voulez modifier le comportement, par exemple PgUp .

  2. xev donnera quelques informations sur la touche pressée. La troisième ligne est importante. Elle doit ressembler à :

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

    dans cet exemple Prior est le nom du comportement auquel la clé est assignée en ce moment, le numéro keycode est l'identifiant interne pour reconnaître la clé. Faites maintenant la même chose avec une autre clé, c'est-à-dire PgDown donne ce résultat

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

    Là encore, la partie intéressante pour nous est keycode 115 y Next - le nom du comportement.

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

     xmodmap -e "keycode 110 = Next"

    Cela change la touche avec le code 110 sur votre clavier pour l'action Next . C'est assez simple.

    Notez que si la clé que vous mappez doit avoir une signification différente lorsqu'elle est utilisée avec la fonction Shift (par exemple pour les claviers britanniques), Shift + 2 donne des guillemets), vous pouvez simplement énumérer la commande secondaire après la première. Par exemple, si vous voulez que la touche avec le code 53 corresponde à la barre oblique inverse normalement, mais au symbole de la barre lorsqu'elle est utilisée avec shift, vous pouvez le faire :

     xmodmap -e "keycode 53 = backslash bar"

Informations complémentaires : La séquence de ces mappings est Key , Shift+Key , mode_switch+Key , mode_switch+Shift+Key , AltGr+Key , AltGr+Shift+Key . Pour sauter une colonne, utilisez NoSymbol . De plus, aquí est une liste complète de tous les keysyms.

Note : Ces changements ne concernent que la session X active et seront perdus après un redémarrage. Si vous voulez sauvegarder les changements de façon permanente, vous devez exécuter les commandes suivantes après les commandes 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 dans.

Vous pouvez maintenant modifier .Xmodmap et exécuter xmodmap .Xmodmap depuis la console pour voir les changements immédiatement. Les changements dans .Xmodmap persistera.

source : Ubuntu Foruns

Des trucs en prime :

Si la touche que vous remappez a un comportement différent en fonction d'un état ( comme la façon 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 à la place d'une virgule sur le clavier numérique (utile pour la plupart des programmeurs), mais que vous souhaitiez conserver le comportement de "suppression" lorsque NumLock est désactivé.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2 parce que xmodmap -pm nous dit que mod2 es Num_Lock les autres noms s'obtiennent en appuyant sur les touches en xev .

25voto

thelsdj Points 3344

Si vous essayez de déplacer une touche Shift, 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

16voto

Peter Hilton Points 10580

J'ai juste eu une idée après coup... Je pense que vous voulez dire quelque chose de complètement différent par "remap"... mais je vais laisser ma réponse telle quelle... (Je ne sais pas comment réassigner une touche pour qu'elle se comporte comme une autre).

UPDATE J'ai répondu à la mauvaise question :)... veuillez consulter la réponse du Wiki communautaire de NES (acceptée ci-dessus).

Il existe deux façons générales de remap 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 tous les Windows)

Pour les méthodes "locales à un programme", il existe parfois un moyen de modifier les raccourcis clavier proposés par l'application elle-même... ex.

Firefox a un addon appelé keyconfig ... pour plus d'informations, voir ceci Poste de MozillZine

La plupart des programmes Ubuntu sont basés sur Gnome et il existe un utilitaire spécifique permettant de modifier la combinaison de touches pour tout élément de menu de ces applications Gnome... Il s'appelle Editable Menu Accelerator ... Il s'agit d'un outil très sensible, mais assez puissant. Vous pouvez l'activer en exécutant gconf-editor (via le Terminal ou Alt+F2)... naviguez jusqu'à desktop -- gnome -- interface et sélectionnez can_change_accels .... Vous pouvez alors changer les éléments de menu pour virtuellement ce que vous voulez (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 touches de raccourci globales. J'utilise un programme appelé xbindkeys Install xbindkeys Il existe également une option disponible via le menu principal -- Préférences, appelée Keyboard Shortcuts

Si vous utilisez xbindkeys, vous devrez l'ajouter à vos "Startup Applications" (Menu principal -- Préférences) ... En outre (comme suggéré par Stefano Palazzo), j'ai déjà écrit une description plus détaillée de xbindkeys dans une réponse sur ce site. page askubuntu

12voto

Bill Davis Points 121

Voici comment j'ai essayé de modifier le mappage de la fonction ENTER sur la touche 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 lignes suivantes 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

Ce qui est important, c'est la troisième ligne de chaque 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".

INVERSER LE MAPPAGE :

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

SAUVEGARDER LES RÉSULTATS :

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

ADD

 xmodmap ~/.Xmodmap

$ sudo reboot

Le principal problème était que l'inversion ne fonctionnait PAS. Le site ENTER a été mis en correspondance avec la clé SHIFT_R mais la touche SHIFT_R n'a pas été mis en correspondance avec la clé ENTER clé. Allez comprendre.

8voto

arand Points 790

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

Dans mon cas, je voulais remapper Caps Lock pour D puisque mon D -La clé est cassée :)

J'ai d'abord utilisé dumpkeys(1) pour obtenir un modèle pour un mappage, dans le cas de l D -La partie intéressante est le mappage pour le code de touche 32 (sur mon clavier) ; Notez qu'il y a deux espaces dans le motif 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 modifier la carte à appliquer à Caps Lock (code 58 sur mon clavier) au lieu de

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

Maintenant, il se lit comme suit

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

Pour ajouter cette remappage à la carte par défaut, il suffit de l'ajouter au fichier d'inclusion de remap pour console-setup

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

und console-setup doit être reconfiguré (en sautant les questions de faible priorité avec des -phigh )

sudo dpkg-reconfigure console-setup -phigh

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X