Comment remapper certaines clés ou appareils?

236

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

c'est à dire

J'aimerais changer PgUpen Homeou PgDownen End.

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

NDA
la source
checkout ma réponse ici . Cela ne vaut pas copier et coller la même réponse. Cela vous aiderait peut-être.
Rahul Virpara
1
Des liaisons de type Emacs ici pour CTRL-P / N pour les étapes d'unité?
Léo Léopold Hertz 준영
Depuis quelque temps xmodmapest dépouillé! pour obtenir un réglage à l'échelle du système, vous devez utiliser xkb. Donc, éditez le fichier de langue /usr/share/X11/xkb/symbols/pour y ajouter vos modifications. Voir le site askubuntu.com/a/898462/34298
rubo77

Réponses:

249

Remarque: à partir de 2013, Ubuntu et ses dérivés n'utilisent plus xmodmap, mais utilisent 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 outil de ligne de commande). Les deux devraient être disponibles dans Ubuntu sans installation supplémentaire.

  1. Démarrer la fenêtre du terminal et courir 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. 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, Priorle 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é, c’est- PgDownà- dire donnez cette sortie

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

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

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

     xmodmap -e "keycode 110 = Next"
    

    Cela change la clé avec le code 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 Shifttouche (par exemple, pour les dispositions de clavier britanniques, Shift+ 2donne des guillemets), vous pouvez simplement lister la commande secondaire après la première. Par exemple, si vous souhaitez que la touche portant le code 53 mappe normalement en barre oblique inverse, mais au symbole de barre utilisé avec shift, vous pouvez procéder comme suit:

     xmodmap -e "keycode 53 = backslash bar"
    

Informations complémentaires: La séquence de ces applications est Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key. Pour sauter une colonne, utilisez NoSymbol. De plus, voici 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 façon permanente, vous devez exécuter les commandes suivantes après celles ci-dessus:

xmodmap -pke >~/.Xmodmap

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

Ensuite, vous devez créer un fichier nommé .xinitrcdans votre répertoire de base où vous mettez la commande xmodmap .Xmodmap.

Vous pouvez maintenant modifier .Xmodmapet exécuter à xmodmap .Xmodmappartir de la console pour voir les modifications immédiatement. Les changements dans .Xmodmapvont persister.

source: Ubuntu Foruns

Bonus:

Si le comportement de la touche que vous remappez diffère d'un état à un autre (par exemple, la manière dont les touches du clavier numérique dépendent de NumLock), il vous suffit xmodmap -pmd'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 -pmnous dit que mod2c’est-à- Num_Lockdire que les autres noms sont obtenus en appuyant sur les touches xev.

NDA
la source
3
xevn'est pas capable de saisir Fnles presses
om-nom-nom
3
La réponse sélectionnée ne fonctionnait pas pour remapper la touche Caps-lock pour moi sur Ubuntu 12.10. Je pouvais le faire en allant dans Paramètres système -> Clavier -> Paramètres de présentation -> Options, qui contient une liste de touches et de comportements alternatifs. Travaillé sans faille dans Unity et terminal.
Isocyanate d'allyle
1
Si vous avez plusieurs claviers connectés, ces outils verront-ils une différence entre la même touche sur un autre clavier?
Stommestack
1
Étrange, j'ai tout fait, mais mes mappages de touches sont toujours réinitialisés après le redémarrage.
Costa
1
Je ne pense pas avoir de -eventdrapeau dans Ubuntu 12.04. Il jette une erreur et ne mentionne pas "événement" dans man xev.
isomorphismes
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
cmcginty
la source
+1 La réponse la plus unix-y de toutes les réponses pour un modificateur (je l'avais déjà fait ainsi, il y a bien longtemps avec mon iBook 2, lorsque je souhaitais que la touche Entrée ait la fonction de Control_R, mais j'avais oublié les détails).
vendredi
2
Une réponse importante pour les utilisateurs de claviers sur les ordinateurs portables Lenovo
Einar Ólafsson
16

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 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 y a deux façons générales ReMap rebind 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 clé 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 ce post sur 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... Il s’agit d’un outil très «tactile», mais assez puissant .. Vous pouvez activer en exécutant gconf-editor(via Terminal ou Alt + F2) ... accédez à desktop- gnome- interfaceet sélectionnez can_change_accels.... Vous pouvez ensuite modifier les éléments de menu en virtuels tout ce que vous voulez (par programme / fenêtre) ... Je vous suggère de 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é xbindkeys Installer 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 askubuntu

Peter.O
la source
+1, très sympa! Une suggestion: vous devriez intégrer votre excellente réponse à une autre question dans celle-ci, peut-être aussi expliquer un peu le format de configuration de xbindkeys.
Stefano Palazzo
1
Pour ce qui est d’attribuer d’autres clés xdotool, consultez la page de manuel, je l’ai utilisée pour résoudre ce problème .
Stefano Palazzo
J'ai récemment trouvé une autre approche avec un outil appelé xmodmap en combinaison avec un outil appelé xev. Je ne sais pas quelles sont les différences entre xmodmap et xbindkeys, mais cela fonctionne plutôt bien pour moi. quelques conseils avec outil à préférer des deux nommés? Voici une étape très utile par étape qui décrit xmodmap et xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
NES
@NES .. Il semble que j'ai mal adressé le point .. Vous semblez vouloir remapper la façon dont une clé particulière est interprétée par le système d'exploitation, c'est-à-dire une interprétation de clavier non standard, alors que je me suis référé à un interprétation standard par clavier, et simplement surcharge des assignations de touches par défaut. (Je pense que ce que vous cherchez est similaire à permuter les boutons gauche et droit de la souris) .. Eh bien, il semble que ma réponse était bonne pour la mauvaise chose :)
Peter.O
oui, mais pas de problème. la réponse est également intéressante. Le guide étape par étape, j’ai posté le lien ci-dessus, était la bonne façon. je vais donc poster une réponse courte avec la solution que les autres utilisateurs ont un bon guide. merci fred
NES
9

Voici comment j'ai essayé de basculer le mappage de la ENTERclé sur la SHIFTclé (et inversement):

$ 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. La ENTERclé a été associée à la SHIFT_Rclé; mais la SHIFT_Rclé n'a pas été mappée à la ENTERclé. Allez comprendre.

Bill Davis
la source
7

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

Dans mon cas, je voulais remapper la Caps Lockclé Dcar ma clé Dest cassée :)

J'ai d'abord utilisé dumpkeys (1) pour obtenir un modèle pour un mappage; dans le cas de la Dclé, le bit intéressant est le mappage du code clé 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 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 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 priorité basse avec -phigh)

sudo dpkg-reconfigure console-setup -phigh

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

environ
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é 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' Controlévénement.

J'ai ensuite essayé xbindkeysavec xmacro. Ce type de travail fonctionne, mais xbindkeysn'est pas capable de capturer certaines combinaisons de clés 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 cela xmacro, j'ai maintenant utilisé un xvkbdprogramme pour générer les événements de clavier, mais ce n'est qu'une préférence personnelle. Les deux xmacroet xvkbdfonctionnent presque les mêmes. Une astuce supplémentaire consiste à ajouter un paramètre de délai xmacroou xvkbdà vous assurer que les événements ne sont pas perdus.

HRJ
la source
2

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. Ajouter 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 ).
ego
la source
Cela a fonctionné Perfekt pour mettre en place Super+Cet Super+Và Ctrl+Cet Ctrl+V. La solution idéale pour utiliser Ubuntu via VirtualBox sur un mac
Ben
Toutefois, cela ne désactive pas les autres commandes qui écoutent ces raccourcis. Pour désactiver Super+Vl’affichage de la liste de notifications, accédez à Paramètres -> Périphériques -> Clavier et désactivez-le
Ben
@ Ben ben, ce serait bien si elle affichait des liens avec d'autres applications, mais c'était plutôt la cerise sur le gâteau. Mon problème est qu'il n'est pas possible de remapper la clé "Fn". J'ai décidé d'essayer le clavier uhk - cette chose programmable indépendamment de l'os, va voir comment ça se passe.
ego
0

Si vous devez remapper une clé pour un programme spécifique uniquement, je viens d'ajouter cette fonctionnalité à hax11.

J'aimerais changer PgUpen Homeou PgDownen 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
Vladimir Panteleev
la source