Zamień alt i super


27

Mam Macbook Air z systemem Linux. Chcę zamienić ze sobą klawisze alti superpo obu stronach klawiatury.

Jak to zrobić za pomocą narzędzi CLI?

Aktualizacja

Po odpowiedzi Drava Sloana zastosowałem:

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

1
Dziwne, że rzeczy działały dla mnie (Mac Air), kiedy wziąłem tylko pierwsze 6 linii, a nie bototm raz, do pliku i uruchomiłem na nim plik xmobmap. Z dolnymi liniami miałem błędy.
Lew Ufimcew

Odpowiedzi:


20

Jednym ze sposobów na osiągnięcie tego jest użycie xmodmap. Możesz uruchomić, xevaby uzyskać kluczowe wydarzenia. Po uruchomieniu xevpowinno pojawić się pole, które można ustawić i nacisnąć klawisze, które chcesz zamienić. Powinien wyświetlać szczegóły podobne do Altklucza:

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

Jestem na komputerze i nie mam „klawisza polecenia”, ale mam równoważny „klawisz systemu Windows”, a xev daje:

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

Ponieważ xmodmap nie ma pojęcia statei może łatwo złamać kluczowe mapowania, sugeruję wykonanie:

xmodmap -pke > defaults

Następnie tworzymy plik 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

Zwróć uwagę, jak korzystam ze xevzwróconych kodów . Również tutaj wymieniam tylko lewe klawisze super i alt (i pozostawiam prawe stare). Następnie możemy po prostu uruchomić xmodmap, aby ustawić te klucze:

$ 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

Możesz pracować bez przełącznika -v(verbose) w celu cichego działania, ale uważam to za przydatne, jeśli popełniłeś błędy w pliku modmap. Jeśli coś pójdzie nie tak, ponownie zastosuj ustawienia domyślne:

xmodmap defaults

Modmap jest często uruchamiany przy uruchamianiu X, więc możesz zastosować je jako domyślne, jeśli wstawisz komendy modmap ~/.xmodmaprc.


Czy jest na to sposób setxkbmap? Chciałbym użyć setxkbmap -option compose:raltopcji razem z tym.

Użyłem rozwiązania swap_opt_cmd w innej odpowiedzi, ale ta zasługuje na głosowanie, ponieważ jest tak dokładna i wyraźnie napisana. Brawo, proszę pana.
John Franklin

Dzięki. Mam problem z Xmodmap
Tim

26

Jeśli chcesz to zrobić na klawiaturze Apple, wypróbuj to:

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

Aby to działało w niższej wersji systemu Linux, możesz wypróbować to: http://blog.chaselambda.com/2014/10/09/apple-keyboard-on-linux-3.8.html


Chociaż inne odpowiedzi również działają, jest to rozwiązanie dla Mac Books; działało jak urok!
sinisterstuf

1
Dlaczego to nie jest domyślne ?!
John Franklin

Nie mam dostępu do zapisu do tego pliku. :-(
itmuckel

1
@ Micha90 - musisz użyć tee: echo "1" | sudo tee /sys/module/hid\_apple/parameters/swap\_opt\_cmd
jaustin

2
Poświęć godzinę na konfigurację xmodmap. To działa. Zobacz drugą odpowiedź ...
Bilow

17

Jeśli chcesz tylko zamienić lewy klawisz Alt, a klawisz Super wykonaj polecenie w swoim terminalu:

setxkbmap -option altwin:swap_alt_win

Aby przywrócić domyślne zachowanie, użyj:

setxkbmap -option

Uwaga: jest to tymczasowe. Jeśli chcesz, aby efekty na stałe dodały go do pliku startowego.


4
To powinno być przyjęte rozwiązanie, ponieważ jest czyste i wykorzystuje wbudowaną funkcję. Powinieneś wspomnieć, że aby przywrócić domyślne zachowanie, możesz po prostu użyć setxkbmap -option. A jeśli chcesz tylko wymiany lewy alt i super klucza , a następnie użyć polecenia: setxkbmap -option altwin:swap_lalt_lwin.
erik

1
Mam klawiaturę Logitech i to działało, aby przełączyć klawisz Windows (Super_L) z lewym alt (Alt_L). Dzięki!
Derek

4
$ xmodmap -pke

Zanotuj, z którymi kodami alt i super są powiązane, a następnie w folderze domowym otwórz / stwórz nowy plik .xmodmaprc. Na przykład moje klucze super / alt są jako takie powiązane

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

Ale aby zamienić klucze, umieścisz następujące w .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

Nadpisywanie skojarzeń kodu / roli ... proste i działa. Zastanawiam się, czy jest jakaś wada w porównaniu do remove ...rozwiązania.
Pierścień Ø

Pamiętaj, że możesz użyć grepdo filtrowania danych wyjściowych, dzięki xmodmap -pke | grep -i "super\|alt"czemu łatwiej będzie zobaczyć to, czego potrzebujesz.
Benjamin R

0

Jeśli jesteś jednym z nieszczęśliwych ludzi takich jak ja, którzy nie mogli zmusić xmodmap do zmiany Alt z prawym Ctrl, to może to pomoże.

Jeśli naciśniesz prawy Alt i e, a otrzymasz é, to rozwiązanie jest dla Ciebie (wymaga poprawy).

Uruchom to w terminalu (sprawdź kody dostępu za pomocą xev):

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

następnie umieść ten kod w .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

Ten kod ustawia klucz Alt_Gr na Alt_R, a następnie zamienia Alt_r za pomocą Ctrl_R.

Jeśli chcesz, aby pozostało po wylogowaniu, umieść następujące polecenia w dowolnym pliku powłoki startowej, na przykład ~ / .profile:

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

źródła: pytanie 1 pytanie 2

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.