Поміняйте на альт і супер


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повернулися. Також тут я замінюю лише ліву клавішу супер та альт (а праву залишаю до їх старої поведінки). Тоді ми можемо просто запустити 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


Хоча інші відповіді також робити роботу, це рішення для Mac книг; працював як шарм!
sinisterstuf

1
Чому це не за замовчуванням ?!
Джон Франклін

У мене немає доступу до цього файлу. :-(
itmuckel

1
@ Micha90 - вам потрібно скористатися tee: echo "1" | sudo tee /sys/module/hid\_apple/parameters/swap\_opt\_cmd
jaustin

2
Витратьте одну годину на налаштування xmodmap. Це працює. Тоді дивіться другу відповідь ...
Білоу

17

Якщо ви хочете лише поміняти місцями на лівий alt та super key, виконайте команду у своєму терміналі:

setxkbmap -option altwin:swap_alt_win

Для відновлення поведінки за замовчуванням просто використовуйте:

setxkbmap -option

Примітка. Це тимчасово. Якщо ви хочете, щоб ефекти постійно додавали їх у файл запуску.


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

Переписування асоціацій ключів / ролей ... просто, і це працює. Задумайтеся, чи є якийсь недолік порівняно з 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.