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

У меня есть клавиатура 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.

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

4 ответа

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

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

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

Это дает мне:Super_L имеет код ключа 133Alt_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

Я достиг этого в 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 все время.

Вы также можете установить 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

Я бы порекомендовал не использовать 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!
#
Другие вопросы по тегам