Tauschen Sie alt und super

27

Ich habe ein Macbook Air, auf dem Linux läuft. Ich möchte die Tasten altund superauf beiden Seiten der Tastatur miteinander tauschen .

Wie mache ich das mit cli tools?

Aktualisieren

Im Anschluss an die Antwort von Drav Sloan habe ich Folgendes verwendet:

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

quelle
1
Seltsamerweise funktionierten die Dinge für mich (Mac Air), als ich nur die ersten 6 Zeilen und nicht den Bototm einmal in eine Datei packte und eine xmobmap-Datei darauf ausführte. Mit dem Endergebnis hatte ich Fehler.
Leo Ufimtsev

Antworten:

20

Ein Weg, dies zu erreichen, führt über xmodmap. Sie können ausführen xev, um wichtige Ereignisse abzurufen. Beim Laufen sollte xeveine Box erscheinen und Sie können sie fokussieren und die Tasten drücken, die Sie tauschen möchten. Es sollte Details ähnlich wie für den AltSchlüssel ausgeben :

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

Ich bin auf einem PC und habe keine "Befehlstaste", aber die entsprechende "Windows-Taste", und xev gibt:

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

Da xmodmap keine Ahnung davon statehat und Tastenzuordnungen leicht aufheben kann, empfehle ich Folgendes:

xmodmap -pke > defaults

Dann erstellen wir eine xmodmap-Datei:

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

Beachten Sie, wie ich die zurückgegebenen Schlüsselcodes verwende xev. Auch hier ersetze ich nur die linken Super- und Alt-Tasten (und überlasse die rechten ihrem alten Verhalten). Dann können wir einfach laufen xmodmap, um diese Schlüssel zu setzen:

$ 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

Sie können ohne den -v(ausführlichen) Schalter für die automatische Ausführung ausgeführt werden, aber ich finde es nützlich, wenn Sie Fehler in Ihrer Modmap-Datei gemacht haben. Wenn die Dinge chaotisch werden, wenden Sie einfach Ihre Standardeinstellungen erneut an:

xmodmap defaults

Modmap wird häufig beim Start von X ausgeführt, sodass Sie diese standardmäßig anwenden können, wenn Sie Ihre Modmap-Befehle eingeben ~/.xmodmaprc.

Drav Sloan
quelle
Gibt es eine Möglichkeit, dies zu tun setxkbmap? Ich möchte setxkbmap -option compose:raltOption zusammen damit verwenden.
Ich habe die swap_opt_cmd-Lösung in einer anderen Antwort verwendet, aber diese verdient eine Aufwertung, weil sie so gründlich und klar geschrieben ist. Bravo, Sir.
John Franklin
Vielen Dank. Ich habe xmodmap durcheinander gebracht und freue mich,
Tim
26

Wenn Sie dies auf einer Apple-Tastatur tun möchten, probieren Sie Folgendes aus:

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

Um dies für eine niedrigere Linux-Version zum Laufen zu bringen, können Sie dies ausprobieren: http://blog.chaselambda.com/2014/10/09/apple-keyboard-on-linux-3.8.html

theicfire
quelle
Auch wenn die anderen Antworten funktionieren, ist dies die Lösung für Mac Books. Lief wie am Schnürchen!
sinisterstuf
1
Warum ist das nicht die Standardeinstellung ?!
John Franklin
Ich habe keinen Schreibzugriff auf diese Datei. :-(
itmuckel
1
@ Micha90 - Sie müssen verwenden tee: echo "1" | sudo tee /sys/module/hid\_apple/parameters/swap\_opt\_cmd
Jaustin
2
Verbringen Sie eine Stunde mit der Konfiguration von xmodmap. Es klappt. Dann sehen Sie die 2. Antwort ...
Bilow
17

Wenn Sie nur Alt und Super-Taste nach links tauschen möchten, führen Sie den Befehl in Ihrem Terminal aus:

setxkbmap -option altwin:swap_alt_win

Um das Standardverhalten wiederherzustellen, verwenden Sie einfach:

setxkbmap -option

Hinweis: Dies ist vorübergehend. Wenn Sie die Effekte dauerhaft benötigen, fügen Sie sie Ihrer Startdatei hinzu.

coljamkop
quelle
4
Dies sollte die akzeptierte Lösung sein, da es sauber ist und eine eingebaute Funktion verwendet. Sie sollten erwähnt haben, dass Sie zum Wiederherstellen des Standardverhaltens nur verwenden können setxkbmap -option. Und wenn Sie nur wollen Swap links alt und Superschlüssel , dann diesen Befehl verwenden: setxkbmap -option altwin:swap_lalt_lwin.
Erik
1
Ich habe eine Logitech-Tastatur und diese hat funktioniert, um die Windows-Taste (Super_L) mit der linken Alt-Taste (Alt_L) zu wechseln. Vielen Dank!
Derek
4
$ xmodmap -pke

Notieren Sie sich, an welche Keycodes alt und super gebunden sind, und öffnen / erstellen Sie dann in Ihrem Home-Ordner eine neue Datei .xmodmaprc. Zum Beispiel sind meine Super / Alt-Tasten als solche gebunden

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

Aber um die Schlüssel zu tauschen, würden Sie Folgendes in .xmodmaprc einfügen

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
quelle
Überschreiben der Tastenkürzel / Rollenzuordnungen ... einfach und es funktioniert. Ich frage mich, ob es im Vergleich zur remove ...Lösung einen Nachteil gibt .
Ring Ø
Denken Sie daran, dass Sie die grepAusgabe filtern können, xmodmap -pke | grep -i "super\|alt"um leichter zu erkennen, was Sie benötigen.
Benjamin R
0

Wenn Sie einer der unglücklichen Menschen wie ich sind, die xmodmap nicht dazu bringen konnten, die rechte Alt-Taste und die rechte Strg-Taste zu drücken, hilft dies möglicherweise.

Wenn Sie Alt und E drücken und é erhalten, ist diese Lösung für Sie (verbesserungsbedürftig).

Führen Sie dies im Terminal aus (überprüfen Sie Ihre Schlüsselcodes mit xev):

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

Dann füge diesen Code in deine .Xmodmap ein:

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

Dieser Code setzt Ihre Alt_Gr-Taste auf Alt_R und tauscht dann Alt_r mit Ctrl_R aus.

Wenn Sie möchten, dass dies nach dem Abmelden erhalten bleibt, fügen Sie die folgenden Befehle in eine Ihrer Start-Shell-Dateien ein, z. B. ~ / .profile:

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

Quellen: Frage1 Frage2

Mugur 'Bud' Chirica
quelle