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.

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

4 ответа4

10

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

6

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

2

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

Чтобы получить номера кодов клавиш, введите в командной строке $ 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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .