Jak zamienić klawisze Alt i Windows za pomocą xmodmap?

9

Mam klawiaturę Mac, na której klawisze Alt / Win (tj. Option / Command) są odwrócone w porównaniu ze zwykłą klawiaturą PC i chciałbym je zamienić. Do tej pory nie miałem szczęścia z Xmodmap. Standardowa konfiguracja wygląda następująco:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

Obecnie lewy / prawy klawisz Alt to kody 64 i 108, natomiast lewy / prawy klawisz Windows to 133 i 134.

Doceniam każdą pomoc!

Daniel Schuler
źródło
Dla mnie ta zamienia obie pary Alt i Win: setxkbmap -device 8 dvorak -option altwin:swap_alt_win,ctrl:nocaps. Chcę tylko zamienić odpowiednie Alt i Win. To nie „znoszą” lewy swapa: setxkbmap -device 8 dvorak -option altwin:swap_lalt_lwin,altwin:swap_alt_win,ctrl:nocaps. Według, najwyraźniej nie ma altwin:swap_ralt_rwinopcji man xkeyboard-config.
Peter Becich,

Odpowiedzi:

11

To jest mój Xmodmaprc:

! Exchange left Alt and left Win
remove mod1 = Alt_L
remove mod4 = Super_L
add mod1 = Super_L
add mod4 = Alt_L
! Exchange tilde and lesser/greater
keycode  94 = grave asciitilde dead_grave dead_tilde grave asciitilde
keycode  49 = less greater less greater bar brokenbar bar brokenbar
! Steve, your keyboard sucks

Będziesz musiał zmodyfikować swoją .xsession lub .xinitrc, aby wywoływać xmodmap .Xmodmaprc

Christophe Devine
źródło
7

Osiągnąłem to w Ubuntu 13.04, łącząc odpowiedź Christophe'a (co pomogło mi, ale nie działało dla modyfikatorów i nie potrzebuję grave i tyld, aby być martwymi klawiszami), kolejna odpowiedź na temat setxkbmap , granie z różnymi opcjami w ustawieniach - opcje układu klawiatury (nawet patrząc na kod źródłowy ) i sprawdzanie bieżącej konfiguracji za pomocą polecenia setxkbmap -query(które należy również uruchomić, aby sprawdzić konkretny model klawiatury i kody układu, ponieważ mogą się różnić).

Mam jeden skrypt, który wywołuję po przełączeniu na klawiaturę Apple (najważniejszą opcją jest altwin:swap_lalt_lwinzamiana klawiszy modyfikatora Alt i Super):

# clear all options
setxkbmap -model "pc105" -layout "hr,us" -option ""  

# set the Apple keyboard
setxkbmap -rules "evdev" -model "pc105" -layout "hr,us" -option "terminate:ctrl_alt_bksp,lv3:rwin_switch,grp:shifts_toggle,caps:ctrl_modifier,altwin:swap_lalt_lwin"

# swap the grave-tilde with less-greater key
#  - variant without dead keys
xmodmap -e "keycode  94 = grave asciitilde"
xmodmap -e "keycode  49 = less greater less greater bar brokenbar bar brokenbar"

I kolejny, do którego dzwonię, kiedy wracam na normalną klawiaturę:

# clear settings
setxkbmap -model "pc105" -layout "hr,us" -option ""

# pc keyobard
setxkbmap -rules "evdev" -model "pc105" -layout "hr,us" -option "terminate:ctrl_alt_bksp,lv3:rwin_switch,grp:shifts_toggle,caps:ctrl_modifier"

Pamiętaj, że dodałem ustawienia

terminate:ctrl_alt_bksp,lv3:rwin_switch,grp:shifts_toggle,caps:ctrl_modifier

aby włączyć ctrl + alt + backspace Zakończenie sesji Gnome, dostęp do poziomu 3 za pomocą prawego klawisza Win, przesuwanie układu przez naciśnięcie obu klawiszy Shift i zamieniłem mój Caps Lock w dodatkowy Ctrl (odpowiednio). Możesz wykluczyć niektóre lub wszystkie z nich.

Możesz użyć AutoKey, aby powiązać połączenie z jakimś skrótem klawiaturowym lub zadzwonić z klawiatury .profilelub .bashrcjeśli używasz klawiatury Apple cały czas.

metakermit
źródło
1
Dużo bla bla. Jeśli tylko chcesz, aby zamienić lewy alt i super klucza , użyj polecenia: setxkbmap -option altwin:swap_lalt_lwina jeśli chcesz, aby przełączyć zarówno lewy i prawy alt i Super klucze, użyj polecenia: setxkbmap -option altwin:swap_alt_win.
erik
Dobra odpowiedź. Ale jak mam to zrobić tylko dla właściwej wygranej i właściwej alt (AltGr)? Niedawno dostałem Unicomp, w którym właściwa wygrana znajduje się obok spacji zamiast AltGr, jak zwykle
procesor
6

Odkryłem, że na Ubuntu 16.04, który używa xkb i gnome, potrzebujesz kilku dodatkowych kroków w porównaniu z powyższą odpowiedzią Christophera Devine'a, jeśli chcesz zachować wszystkie skróty dla klawiszy Alt i Super. To było najłatwiejsze rozwiązanie, jakie znalazłem.

Aby uzyskać numery kodów klawiszy, w wierszu polecenia $ xev wpisz klucze, dla których chcesz uzyskać numer. Aby uzyskać więcej informacji na ten temat, zobacz ten post: użycie xev i xmodmap

Takie postępowanie daje mi: Super_Lma kod dostępu 133 Alt_Lma kod dostępu 64

Aby więc zamienić Windows aka Command (na Macu) aka Super klawisz z lewym klawiszem Alt, robię:

remove mod1 = Alt_L
remove mod4 = Super_L
keycode 133 = Alt_L
keycode 64 = Super_L
add mod1 = Alt_L  
add mod4 = Super_L

Ostatnie dwa wiersze dodają mod1 i mod4 z powrotem do kluczy dla Alt_L i Super_L, gdy zostały usunięte. Jeśli tak się nie stanie, tracę skróty związane z super klawiszem (wyszukiwanie), a także łamie kombinację klawiszy Alt + Tab, aby przełączać się między oknami.

Możesz dodać te polecenia do pliku takiego jak .xmodmap, a następnie $ xmodmap .xmodmapje uruchomić.

Możesz też uruchomić je sekwencyjnie w wierszu poleceń, np .: $ xmodmap -e <expression here>

Jeśli chcesz powrócić do domyślnych mapowań klawiszy, możesz odwrócić liczby w powyższym kodzie, na przykład:

remove mod1 = Alt_L
remove mod4 = Super_L
keycode 64 = Alt_L
keycode 133 = Super_L
add mod1 = Alt_L  
add mod4 = Super_L

lub w Ubuntu po prostu uruchamiam: $ setxkbmap

Trevor Owens
źródło
Wystąpił problem w programie Intellij, w którym klawisz Alt nie jest rozpoznawany po zamianie kluczy z mod1 i mod4. Ale to zresetowanie kodu działa pięknie w intellij. Świetna robota
Jimubao
2

Możesz także ustawić hid_appleopcje modułu jądra, aby modyfikować tylko klawiaturę Apple, ale nie normalne klawiatury PC. Nie musisz używać xkbmap ani Xmodmapr. Wystarczy utworzyć plik /etc/modules.d/hid_apple.confz zawartością

options hid_apple iso_layout=0 fnmode=2 swap_opt_cmd=1

fnmode=2mapuje klawisze funkcyjne F1...F12bez konieczności naciskania Fn. Pomiń, jeśli wolisz klawisze multimedialne. Zobacz Arch Wiki, aby uzyskać więcej.

Na stałe w Ubuntu :

echo options hid_apple iso_layout=0 fnmode=2 swap_opt_cmd=1 | sudo tee -a /etc/modprobe.d/hid_apple.conf
sudo update-initramfs -u -k all
sebastian
źródło
0

Odradzam korzystanie z xmodmap w przyszłości, ponieważ nie będzie on działał w Wayland, ale poza tym setxkbmap lub xkbcomp byłoby najlepszą metodą do wykorzystania w przyszłości i mój projekt Kinto używa go.

Kinto zamienia wybrane klawisze, ale także nasłuchuje używanej aplikacji, dzięki czemu możesz zachować odpowiednią mapę klawiszy dla aplikacji terminalowych, tak aby pasowała do twoich wrażeń z bycia na komputerze Mac.

Oto odpowiednie linki, ale uwzględnię także sedno tego, co robi Kinto - minus niestandardowe mapy klawiszy i naprzemienne możliwości mapowania klawiszy, więc masz pojęcie o tym, co faktycznie robi Kinto.

https://github.com/rbreaves/kinto

https://medium.com/@benreaves/kinto-a-mac-inspired-keyboard-mapping-for-linux-58f731817c0

https://gist.github.com/rbreaves/f4cf8a991eaeea893999964f5e83eebb

Treść merytoryczna

# permanent apple keyboard keyswap
echo "options hid_apple swap_opt_cmd=1" | sudo tee -a /etc/modprobe.d/hid_apple.conf
update-initramfs -u -k all

# Temporary & instant apple keyboard keyswap
echo '1' | sudo tee -a /sys/module/hid_apple/parameters/swap_opt_cmd

# Windows and Mac keyboards - GUI (Physical Alt is Ctrl, Physical Super is Alt, Physical Ctrl is Super)
setxkbmap -option;setxkbmap -option altwin:ctrl_alt_win

# Windows and Mac keyboards - Terminal Apps (Physical Alt is Super, Physical Super is Alt, Physical Ctrl is Ctrl)
setxkbmap -option;setxkbmap -option altwin:swap_alt_win

#
# If you want a systemd service and bash script to help toggle between
# GUI and Terminal applications then look at project Kinto.
# https://github.com/rbreaves/kinto
#
# Note: The above may not work for Chromebooks running Linux, please look
# at project Kinto for that.
#
# If anyone would like to contribute to the project then please do!
#
R Ben R.
źródło