Поменяйте местами супер и супер

27

У меня есть Macbook Air с Linux. Я хочу поменять altи superключи в обе стороны от клавиатуры друг с другом.

Как мне это сделать с помощью инструментов Cli?

Обновить

После ответа Драва Слоана я использовал следующее:

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
Как ни странно, у меня (Mac Air) все получалось, когда я взял в файл только первые 6 строк, а не ботот, и запустил на нем файл xmobmap. С нижними строчками у меня были ошибки.
Лев Уфимцев

Ответы:

20

Один из способов добиться этого - через xmodmap. Вы можете бежать, xevчтобы получить ключевые события. При запуске xevокно должно появиться, и вы можете сфокусировать его и нажать клавиши, которые вы хотите поменять местами. Должны быть выведены подробности, похожие на Altключ:

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

Я на ПК, и у меня нет «Командного ключа», но есть эквивалентный «Ключ Windows», и xev дает:

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

Поскольку xmodmap не имеет представления stateи может легко нарушать сопоставления клавиш, я предлагаю вам сделать следующее:

xmodmap -pke > defaults

Затем мы создаем файл 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

Обратите внимание, как я использую xevвозвращенные коды клавиш . Также здесь я заменяю только левые клавиши super и alt (и оставляю правые на прежнее поведение). Тогда мы можем просто запустить xmodmap, чтобы установить эти ключи:

$ 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

Вы можете работать без -v(многословного) переключателя для тихого запуска, но я считаю, что это полезно, если вы допустили ошибки в файле modmap. Если что-то пошло не так, просто примените настройки по умолчанию:

xmodmap defaults

Modmap часто запускается при запуске X, так что вы можете применить их как значения по умолчанию, если поместите свои команды modmap в ~/.xmodmaprc.

Драв Слоан
источник
Есть ли способ сделать это с setxkbmap? Я хотел бы использовать setxkbmap -option compose:raltвариант вместе с этим.
Я использовал решение swap_opt_cmd в другом ответе, но этот заслуживает одобрения, потому что оно так тщательно и четко написано. Браво, сэр.
Джон Франклин
Спасибо. Я запутался в xmodmap и благодарен, если вы могли бы помочь askubuntu.com/questions/1026246/…
Тим
26

Если вы хотите сделать это на клавиатуре Apple, попробуйте это:

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

Чтобы заставить это работать для более низкой версии Linux, вы можете попробовать это: http://blog.chaselambda.com/2014/10/09/apple-keyboard-on-linux-3.8.html

theicfire
источник
Хотя другие ответы также делать работу, это решение для Mac книг; работал как шарм!
sinisterstuf
1
Почему это не по умолчанию ?!
Джон Франклин
У меня нет прав на запись в этот файл. :-(
itmuckel
1
@ Micha90 - вам нужно использовать tee: echo "1" | sudo tee /sys/module/hid\_apple/parameters/swap\_opt\_cmd
Jaustin
2
Потратьте один час на настройку xmodmap. Оно работает. Тогда посмотрите 2-й ответ ...
Bilow
17

Если вы хотите просто поменять местами левый alt и super key, выполните команду в своем терминале:

setxkbmap -option altwin:swap_alt_win

Чтобы восстановить поведение по умолчанию, просто используйте:

setxkbmap -option

Примечание: это временно. Если вы хотите, чтобы эффекты постоянно добавлялись в ваш файл запуска.

coljamkop
источник
4
Это должно быть приемлемым решением, так как оно чисто и использует встроенную функцию. Вы должны были упомянуть, что для восстановления поведения по умолчанию вы можете просто использовать setxkbmap -option. И если вы хотите только своп левого Alt и супер ключ , а затем использовать эту команду: setxkbmap -option altwin:swap_lalt_lwin.
Эрик
1
У меня есть клавиатура Logitech, и это сработало для переключения моей клавиши Windows (Super_L) с помощью левой клавиши Alt (Alt_L). Благодарность!
Дерек
4
$ xmodmap -pke

Обратите внимание на то, с какими кодами клавиш связаны alt и super, затем в вашей домашней папке откройте / создайте новый файл .xmodmaprc. Например, мои ключи super / alt связаны как таковые

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

Но чтобы поменять местами ключи, вы должны поместить в .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
cepkos
источник
Перезаписать ассоциации кода ключа / роли ... просто, и это работает. Интересно, есть ли какой-либо недостаток по сравнению с remove ...решением.
Кольцо Ø
Помните, что вы можете использовать grepдля фильтрации выходных данных, поэтому xmodmap -pke | grep -i "super\|alt"должно быть легче увидеть, что вам нужно.
Бенджамин Р
0

Если вы один из тех несчастных людей, как я, которые не смогли заставить xmodmap переключать правый Alt с правым Ctrl, то, возможно, это поможет.

Если вы нажмете правую клавишу Alt и e и вы получите é, то это решение для вас (нуждается в улучшении).

Запустите это в терминале (проверьте коды клавиш с помощью xev):

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

затем поместите этот код в ваш .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

Этот код устанавливает ключ Alt_Gr в Alt_R, а затем заменяет Alt_r на Ctrl_R.

Если вы хотите, чтобы это оставалось после выхода из системы, поместите следующие команды в любой из ваших файлов оболочки запуска, например ~ / .profile:

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

источники: вопрос1 вопрос2

Мугур Буд Будь Чирица
источник