Как поменять местами клавиши Alt и Windows с xmodmap?

9

У меня есть клавиатура Mac, где клавиши Alt / Win (то есть Option / Command) инвертированы по сравнению с обычной клавиатурой ПК, и я бы хотел поменять их местами. Мне пока не повезло с xmodmap. Стандартная конфигурация следующая:

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)

В настоящее время левая / правая клавиши Alt являются кодами клавиш 64 и 108, в то время как клавиши левого / правого окон - 133 и 134.

Я ценю любую помощь!

Даниэль Шулер
источник
Для меня это свопы обе пары Alt и Win: setxkbmap -device 8 dvorak -option altwin:swap_alt_win,ctrl:nocaps. Я только хочу, чтобы право Alt и Win поменялись местами. Это не отменяет левую замену setxkbmap -device 8 dvorak -option altwin:swap_lalt_lwin,altwin:swap_alt_win,ctrl:nocaps. По-видимому, нет никакой altwin:swap_ralt_rwinвозможности, согласно man xkeyboard-config.
Питер Бечич

Ответы:

11

Это мой 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

Вам нужно изменить .xsession или .xinitrc, чтобы вызвать xmodmap .Xmodmaprc

Кристоф Девайн
источник
7

Я достиг этого в Ubuntu 13.04, объединив ответ Кристофа (который помог мне, но не работал для модификаторов, и мне не нужны могилы и тильды, чтобы быть мертвыми ключами), еще один ответ о setxkbmap , играя с различными опциями в настройках - параметры раскладки клавиатуры (даже глядя на исходный код ) и проверку текущей конфигурации с помощью команды setxkbmap -query(которую также следует выполнить, чтобы проверить конкретную модель клавиатуры и коды раскладки, поскольку они могут отличаться).

У меня есть один сценарий, который я вызываю, когда переключаюсь на клавиатуру Apple (важнейший вариант - altwin:swap_lalt_lwinзамена клавиш-модификаторов Alt и 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"

И еще один, который я вызываю, когда возвращаюсь на обычной клавиатуре:

# 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"

Обратите внимание, что я добавил настройки

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

чтобы включить ctrl + alt + backspace завершение сеанса Gnome, доступ к клавише уровня 3 с помощью правой клавиши win, сдвиг макета нажатием обеих клавиш Shift и превращение моего Caps Lock в дополнительный Ctrl (соответственно). Вы можете исключить некоторые или все из них.

Вы можете использовать AutoKey, чтобы привязать вызов к какому-либо сочетанию клавиш, или вызвать его с вашего компьютера, .profileили .bashrcесли вы все время используете клавиатуру Apple.

metakermit
источник
1
Много бла-бла. Если вы просто хотите поменять местами левый Alt и супер ключ , используйте следующую команду: setxkbmap -option altwin:swap_lalt_lwinи если вы хотите , чтобы переключить левый и правый альт и супер ключи, используйте следующую команду: setxkbmap -option altwin:swap_alt_win.
Эрик
Хороший ответ. Но как мне сделать это только для правильной победы и правильного alt (AltGr)? Недавно я получил unicomp, где правильный выигрыш находится рядом с пробелом, а не AltGr, как я привык
cess
6

Я обнаружил, что в Ubuntu 16.04, которая использует xkb и gnome, вам нужно сделать несколько дополнительных шагов по сравнению с ответом Кристофера Девайна, приведенным выше, если вы хотите сохранить все быстрые действия для клавиш alt и super. Это было самое простое решение, которое я нашел.

Чтобы получить номера $ xev кодов клавиш, введите в командной строке ключи, для которых вы хотите получить номер. Для получения дополнительной информации об этом см. Этот пост: использование xev и xmodmap

Это дает мне: Super_Lимеет ключевой код 133 Alt_Lимеет ключевой код 64

Таким образом, чтобы поменять местами Windows, известную как «Command» (на Mac) или «Super», левой клавишей Alt, я делаю:

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

Последние две строки добавляют mod1 и mod4 обратно в keysym для Alt_L и Super_L так же, как они были удалены. Если это не сделано, я теряю ярлыки, связанные с супер ключом (поиск), и это также нарушает комбинацию alt + tab для переключения между окнами.

Вы можете добавить эти команды в файл, подобный .xmodmap, а затем $ xmodmap .xmodmapзапустить их.

Кроме того, вы можете запустить их последовательно в командной строке, как: $ xmodmap -e <expression here>

Если вы хотите вернуться к отображению клавиш по умолчанию, то вы можете поменять числа в приведенном выше коде, например:

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

или в Ubuntu я просто запускаю: $ setxkbmap

Тревор Оуэнс
источник
возникла проблема внутри intellij, когда alt key не распознается при замене ключей на mod1 и mod4. Но это сброс ключа работает прекрасно в intellij. Отличная работа
Jimubao
2

Вы также можете установить параметры hid_appleмодуля ядра, чтобы изменять только клавиатуру Apple, но не обычные клавиатуры ПК. Нет необходимости использовать xkbmap или Xmodmapr. Просто создайте файл /etc/modules.d/hid_apple.confс контентом

options hid_apple iso_layout=0 fnmode=2 swap_opt_cmd=1

fnmode=2сопоставляет функциональные клавиши F1...F12без необходимости нажатия Fn. Опустите его, если вы предпочитаете медиа-клавиши. Смотрите Arch Wiki для большего.

Постоянно на 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
Себастьян
источник
0

Я бы порекомендовал не использовать xmodmap в будущем, потому что он не работает в Wayland, но кроме setxkbmap или xkbcomp будет лучшим методом для дальнейшего развития, и мой проект Kinto использует его.

Kinto поменяет нужные вам клавиши, но также будет слушать, какое приложение вы используете, чтобы вы могли сохранять правильную раскладку клавиш для терминальных приложений, чтобы она соответствовала вашему опыту работы на Mac.

Вот соответствующие ссылки, но я также включу суть того, что делает Kinto - минус пользовательские комбинации клавиш и возможность чередования клавиш, так что у вас есть представление о том, что на самом деле делает 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

Содержание

# 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!
#
Р Бен Р
источник