CapsLock як ключ модифікатора для клавіш додатків


11

Я розробник, і в даний час я використовую Ubuntu Linux з PyCharm IDE для розробки веб-сайту. Для підвищення ефективності набору тексту я розглядаю можливість змінити CapsLock на Hyper_L і призначити його mod3 за допомогою xmodmap. Після цього я хочу відобразити mod3 для клавіші 'i' на 'Up'. Поки що я зробив:

xmodmap -e "keysym Caps_Lock = Hyper_L"

вихід такий:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Hyper_L (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)

то я видаляю Hyper_L з mod4

xmodmap -e "remove Mod4 = Hyper_L"

Після цього я спробував призначити Hyper_L до mod3

xmodmap -e "add Mod3 = Hyper_L"

Однак я отримав помилку наступним чином:

X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  11
  Current serial number in output stream:  11

Отже, у чому тут була проблема? Як я можу змусити його працювати? Чи правильний мій підхід? Або я повинен використовувати інший підхід, щоб використовувати mod3 для користувацьких ключів?

PS Я використовую клавіатуру Microsoft Natural Ergonomic 7000

Відповіді:


20

В Інтернеті є мільйони відповідей, більшість з яких заплутані.

Ключ полягає в тому, що вам потрібно зіставити 'keycode 66' на ваш гіпер-ключ, видалити відображення цього ключа з інших мод {1,2,4,5} 's (лише за наявності), а потім встановити mod3.

Відкрийте ~ / .Xmodmap та поставте наступне:

! Unmap capslock
clear Lock
keycode 66 = Hyper_L

! Leave mod4 as windows key _only_
remove mod4 = Hyper_L

! Set mod3 to capslock
add mod3 = Hyper_L

Виконати це

xmodmap ~/.Xmodmap

Якщо щось піде не так, ви можете скинути клавіатуру за допомогою:

setxkbmap -layout us

Ймовірно, причина чогось вибуху полягає в тому, що Hyper_L відображається десь ще. Виправте це, запустивши xmodmap без аргументів, щоб зрозуміти, що ще пов'язане з Hyper_L. Коли ви знаєте, що вам потрібно видалити, увімкніть "видалити BINDING = Hyper_L" у вашому файлі .Xmodmap.

Файл .Xmodmap буде завантажений, коли ви відкриваєте сесії X11, ви повинні мати це відображення наступного разу при вході або перезавантаженні.

Ця конфігурація працює для моєї установки ubuntu 14.04. Якщо у вас інший * nix і це не працює, напишіть, що ви зробили, щоб обійти його тут, і я включу його у відповідь.


@antindexer це працювало для вас?
heymatthew

Я спробував досить багато відповідей, і це той, який працював на мене. Принаймні, це було зроблено під час встановлення голого металу Linux. Як не дивно, це не в QEMU / KVM, працюючи лише на почергових натисканнях клавіші блокування ковпачків.
Діагон

0

Я знаю, що це питання досить давнє, але мені потрібно поділитися своїм рішенням, оскільки (розчаровуюче) відповідь гейманта не для мене спрацювала. Що закінчилося для мене:

setxkbmap -layout us -option lv3:caps_switch -variant intl

Це ввімкне функцію caplock як ключ mod3, встановить макет на "us" і встановить варіант на "intl". Якщо ви використовуєте інтерактивну оболонку на зразок риби, ви можете натиснути вкладку після "-лайт", "-опція" або "-варіант", щоб отримати повний список можливих параметрів.

Подальша інформація: Я спробував підхід xmodmap рік тому на машині Ubuntu, що працює під керуванням вікон i3 i3, переходячи зі стандартного середовища gnome. Я змінив розкладку клавіатури xkb «us», зокрема міжнародну з мертвими клавішами - вона справно працювала при використанні gnome-desktop-manager (є можливість встановити cap-lock як mod3-клавішу), але я не зміг змусити його працювати з xmodmap. Це була моя помилка: я думав, що графічний інтерфейс gdm використовує xmodmap для відображення блокування шапок на mod3, але насправді він встановлював цю опцію X11. Тепер, коли я перейшов на Arch, я був змушений зрозуміти це.

Рекомендую всім, хто планує зіткнутися з цим, читати довідкові сторінки на localectl, xmodmap, setxkbmap та тестування макетів, додаючи частину сну та повернення:

setxkbmap ... ; sleep 10; setxkbmap <INSERT DEFAULT SETTINGS>

це заощадило мені гарну кількість часу.

Я все ще не розумію, наскільки підхід xmodmap не працює. Сподіваюся, що це комусь допоможе.

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