Échanger alt et super

27

J'ai un Macbook Air qui fonctionne sous Linux. Je souhaite échanger les touches altet des superdeux côtés du clavier.

Comment faire cela avec les outils cli?

Mise à jour

Suite à la réponse de Drav Sloan, j'ai utilisé ce qui suit:

keycode 64 = Alt_L
keycode 133 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

keycode 108 = Alt_R
keycode 134 = Super_R
remove Mod1 = Alt_R
remove Mod4 = Super_R
add Mod1 = Super_R
add Mod4 = Alt_R

la source
1
Curieusement, les choses ont fonctionné pour moi (mac air) car je n'ai pris que les 6 premières lignes et non le bototm une fois dans un fichier et j'ai exécuté le fichier xmobmap dessus. Avec les résultats, j'ai eu des erreurs.
Leo Ufimtsev

Réponses:

20

Une façon d'y parvenir est via xmodmap. Vous pouvez exécuter xevpour obtenir des événements clés. Lors de l'exécution, xevune boîte doit apparaître et vous pouvez la focaliser et appuyer sur les touches que vous souhaitez permuter. Il devrait afficher des détails similaires à ceux de la Altclé:

KeyPress event, serial 28, synthetic NO, window 0x8800001,
  root 0x25, subw 0x0, time 2213877115, (126,91), root:(1639,475),
  state 0x0, keycode 14 (keysym 0xffe9, Alt_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

Je suis sur un PC et je n'ai pas de "clé de commande", mais j'ai la "clé Windows" équivalente, et xev donne:

KeyPress event, serial 28, synthetic NO, window 0x8000001,
  root 0x25, subw 0x0, time 2213687746, (111,74), root:(1624,98),
  state 0x0, keycode 93 (keysym 0xffeb, Super_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

Parce que xmodmap n'a aucune idée stateet peut facilement casser les mappages de touches, je vous suggère de faire un:

xmodmap -pke > defaults

Ensuite, nous créons un fichier xmodmap:

keycode 14 = Alt_L
keycode 93 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

Notez comment j'utilise les codes clés xevretournés. Ici aussi, je ne remplace que les touches gauche et super (et laisse les bonnes à leur ancien comportement). Ensuite, nous pouvons simplement exécuter xmodmap, pour définir ces clés:

$ xmodmap -v modmap.file
! modmap:
! 1:  keycode 14 = Alt_L
        keycode 0xe = Alt_L
! 2:  keycode 93 = Super_L
        keycode 0x5d = Super_L
! 3:  remove Mod1 = Alt_L
! Keysym Alt_L (0xffe9) corresponds to keycode(s) 0xe
        remove mod1 =  0xe
! 4:  remove Mod4 = Super_L
! Keysym Super_L (0xffeb) corresponds to keycode(s) 0x5d
        remove mod4 =  0x5d
! 5:  add Mod1 = Super_L
        add mod1 = Super_L
! 6:  add Mod4 = Alt_L
        add mod4 = Alt_L
!
! executing work queue
!
        keycode 0xe = Alt_L
        keycode 0x5d = Super_L
        remove mod1 =  0xe
        remove mod4 =  0x5d
        add mod1 = Super_L
        add mod4 = Alt_L

Vous pouvez exécuter sans le -vcommutateur (verbose) pour un fonctionnement silencieux, mais je trouve cela utile si vous avez fait des erreurs dans votre fichier modmap. Si les choses tournent mal, réappliquez simplement vos valeurs par défaut:

xmodmap defaults

Modmap est souvent exécuté au démarrage de X, vous pouvez donc les appliquer comme valeurs par défaut si vous placez vos commandes modmap ~/.xmodmaprc.

Drav Sloan
la source
Existe-t-il un moyen de le faire avec setxkbmap? Je voudrais utiliser l' setxkbmap -option compose:raltoption avec cela.
J'ai utilisé la solution swap_opt_cmd dans une autre réponse, mais celle-ci mérite un vote positif car elle est si complète et clairement écrite. Bravo, monsieur.
John Franklin
Merci. J'ai eu un problème avec xmodmap et j'apprécie si vous pouviez aider askubuntu.com/questions/1026246/…
Tim
26

Si vous souhaitez le faire sur un clavier Apple, essayez ceci:

echo 1|sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd

Pour que cela fonctionne pour une version inférieure de Linux, vous pouvez essayer ceci: http://blog.chaselambda.com/2014/10/09/apple-keyboard-on-linux-3.8.html

theicfire
la source
Bien que les autres réponses fonctionnent également, c'est la solution pour Mac Books; travaillé comme un charme!
sinisterstuf
1
Pourquoi n'est-ce pas la valeur par défaut?!
John Franklin du
Je n'ai aucun accès en écriture à ce fichier. :-(
itmuckel
1
@ Micha90 - vous devez utiliser tee: echo "1" | sudo tee /sys/module/hid\_apple/parameters/swap\_opt\_cmd
jaustin
2
Passez une heure à configurer xmodmap. Ça marche. Alors voyez la 2e réponse ...
Bilow
17

Si vous souhaitez uniquement permuter l'alt gauche et la super touche, exécutez la commande dans votre terminal:

setxkbmap -option altwin:swap_alt_win

Pour restaurer le comportement par défaut, utilisez simplement:

setxkbmap -option

Remarque: Ceci est temporaire. Si vous voulez que les effets l'ajoutent définitivement à votre fichier de démarrage.

coljamkop
la source
4
Cela devrait être la solution acceptée, car elle est propre et utilise une fonction intégrée. Vous auriez dû mentionner que pour restaurer le comportement par défaut, vous pouvez simplement utiliser setxkbmap -option. Et si vous voulez seulement Permutation gauche alt et super clé , utilisez cette commande: setxkbmap -option altwin:swap_lalt_lwin.
erik
1
J'ai un clavier Logitech et cela a fonctionné pour changer ma touche Windows (Super_L) avec l'alt gauche (Alt_L). Merci!
Derek
4
$ xmodmap -pke

Prenez note des codes clés auxquels alt et super sont liés, puis dans votre dossier de départ, ouvrez / créez un nouveau fichier .xmodmaprc. Par exemple, mes clés super / alt sont liées en tant que telles

keycode  64 = Alt_L Meta_L Alt_L Meta_L
keycode 108 = Alt_R Meta_R Alt_R Meta_R
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R

Mais pour échanger les clés, vous mettriez ce qui suit dans .xmodmaprc

keycode  64 = Super_L NoSymbol Super_L
keycode 108 = Super_R NoSymbol Super_R
keycode 133 = Alt_L Meta_L Alt_L Meta_L
keycode 134 = Alt_R Meta_R Alt_R Meta_R
cepkos
la source
Remplacer les associations code clé / rôle ... simple, et cela fonctionne. Je me demande s'il y a un inconvénient par rapport à la remove ...solution.
Anneau Ø
N'oubliez pas que vous pouvez utiliser greppour filtrer la sortie, ce qui xmodmap -pke | grep -i "super\|alt"devrait permettre de voir plus facilement ce dont vous avez besoin.
Benjamin R
0

Si vous êtes l'une des malheureuses personnes comme moi qui n'a pas réussi à faire en sorte que xmodmap commute Alt à droite avec Ctrl à droite, alors cela peut aider.

Si vous appuyez sur Alt et e à droite et que vous obtenez é, cette solution est pour vous (nécessite une amélioration).

Exécutez ceci dans le terminal (vérifiez vos codes clés avec xev):

xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"

puis mettez ce code dans votre .Xmodmap:

remove Control = Control_R
remove Mod1 = Alt_R
keycode 105 = Alt_R
keycode 108 = Control_R
add Control = Control_R
add Mod1 = Alt_R

Ce code définit votre clé Alt_Gr sur Alt_R, puis il échange Alt_r avec Ctrl_R.

Si vous souhaitez que cela reste après votre déconnexion, placez les commandes suivantes dans l'un de vos fichiers shell de démarrage, par exemple ~ / .profile:

if [ -f $HOME/.Xmodmap ]; then
  xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"
  /usr/bin/xmodmap $HOME/.Xmodmap
fi

sources: question1 question2

Mugur 'Bud' Chirica
la source