Перезапуск Caps Lock для керування та втечі (не звичайним способом)


28

Я знаю, як використовувати xmodmap для перестановки ключа блокування Caps, щоб він діяв як ключ управління, або як ключ Escape. Я хотів би поєднати обидві функції так:

Коли я натискаю, потім відпускаю, клавішу Caps lock, він посилає Escape. Коли я утримую Caps lock і натискаю іншу клавішу (скажімо A), він надсилає Control-A.

Чи є комбінація xkb, xmodmap та щось інше, що могло б змусити Caps lock поводитись так у X?

Я використовую Ubuntu Precision в Macbook Air 3,1.

Відповіді:


-2

Ви можете зробити перше (відображення Caps Lockдо Esc), але не можете зробити друге.

Просте пояснення: Caps Lock просто не розроблено, щоб щось робити при натисканні.

Детальне пояснення: Існує багато типів ключів. Два з них - модифікаційні ключі та блокування ключів .

Caps Lockє Key Lock в той час як клавіші , такі як Ctrl, Altі Shiftє клавіші - модифікатори .

З їхніх імен видно, що кнопки модифікатора змінюють функцію наступної натиснутої клавіші, а клавіші блокування виконують функцію перемикача, щоб увімкнути або вимкнути якусь конкретну функцію.

Тепер, оскільки Caps Lock це ключ блокування , ви не можете його поводити як ключ модифікатора, не зіставляючи його на один. Caps Lockсам по собі не може функціонувати як ключ модифікатора .


Дякую, що підтвердили, що X не призначений робити те, що я хочу. Якщо X гуру хоче щось зламати, щоб змусити його працювати, будь ласка, зв’яжіться зі мною.
користувач372737

4
Як відповідь неприйнято нижче, ви, звичайно, можете виконати другу частину з численними утилітами, такими як xcape або At-Home-Modifier.
Sparhawk

35

У мене це налаштування на моєму Mac, і я без спроби намагався знайти спосіб для Ubuntu.

Ну, зараз це працює. Дякую tungd за те, що наділи мене на xcape . Те, що я зробив, є дійсно простим і простим.

  1. У розділі Налаштування системи> Розкладка клавіатури> Опції ...> Положення клавіші Ctrl, я поставив галочку "Caps Lock as Ctrl".

  2. xcape -e 'Control_L = Втеча'

Виконано, Caps Lock працює як Ctrl, коли використовується як модифікатор, і як Esc при натисканні самостійно (є невелика затримка на кілька сотень мілісекунд, як зазначено у файлі xcape README, тому він все ще не такий оптимальний, як рішення Mac, яке використовує KeyRemap4MacBook.)


4
Я використовував gnome-tweak-toolдля відображення Caps Lockв Ctrlякості немає Keyboard layoutв System Settingsна Ubuntu 14.04. Тоді xcape -e 'Control_L=Escape'не робота, але після використання xcape -dя виявив , що Caps Lockгенерує код ключа 66 і перепризначений його відповідно: xcape -e '#66=Escape'.
Сергій Белозеров

3
Відповідно до цієї публікації в блозі , це можна зробити за допомогою xcape поодинці: setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape' setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape;Control_L=Escape;Control_R=Escape'
Луї Сімоно,

Це справді має бути прийнятою відповіддю @ user372737
Assaf Lavie

@LouisSimoneau це тисяча разів більше цього.
Спенсер Баучер

1
Будь-який прогрес із проблемою затримки?
Зубник

6

Я теж це шукаю. Станом на тиждень тому я знайшов своє часткове рішення, використовуючи xmodmap:

add Control = Caps_Lock
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

Це, звичайно, не працює ідеально, воно ефективно надсилає і Escape, і Ctrl одночасно, коли я натискаю CapsLock, але я був задоволений цим деякий час.

Нарешті я знайшов цю маленьку утиліту https://github.com/alols/xcape . Тепер я можу просто перевстановити CapsLock на Ctrl і дозволити xcape зробити свою роботу.


Інший варіант - At-Home-Modifier. Він не знаходиться в активному розвитку і трохи відрізняється від xcape за допомогою установки в root. Однак він спрацьовує через xorg.conf, а значить, може діяти лише на певних клавіатурах, використовуючи одночасно інші клавіатури.
Sparhawk

4

EDIT: Виправлено це для більшості розумних (новіших) менеджерів дисплеїв.

За коментарями Луї та Сергія я придумав таке рішення, яке працює для мене на Ubuntu 16.04 (Xenial) з LightDM та Unity.

Наступний рядок коду я помістив у свій .xprofileфайл у своєму домашньому каталозі.

setxkbmap -option 'caps:ctrl_modifier' && xcape -e 'Caps_Lock=Escape' &

Trailing & ставить команду xcape на задній план, щоб вона не блокувала ваш сеанс. Setxkbmap вносить свої зміни негайно.

Сергій:

Я використовував інструмент gnome-tweak, щоб зіставити Caps Lock на Ctrl, оскільки в системних налаштуваннях Ubuntu 14.04 відсутня розкладка клавіатури. Тоді xcape -e 'Control_L = Escape' не працював, але після використання xcape -d я виявив, що Caps Lock генерує клавішний код 66 та перезаписав його відповідно: xcape -e '# 66 = Escape'. - Сергій Бієлозьоров 4 вересня '14 о 10:08

Луї:

Відповідно до цієї публікації в блозі, це можна зробити лише за допомогою xcape поодинці: setxkbmap -option 'caps: ctrl_modifier' xcape -e 'Caps_Lock = Escape' setxkbmap -option 'caps: ctrl_modifier' xcape -e 'Caps_Lock = Escape; Control_L = Втеча; Control_R = Втеча '- Луї Сімоно, 4 серпня 15, о 10:06


3

Встановити xcape

sudo apt-get install xcape

Додайте два рядки у свій ~/.bashrc

/usr/bin/setxkbmap -option 'caps:ctrl_modifier'⏎
/usr/bin/xcape -e 'Caps_Lock=Escape' -t 100

Помітьте деталь -t 100, якщо ви її не встановите, ви можете помітити затримку Esc, якщо ви використовуєте vim.


sudo apt-get install xcape(друкарська помилка)
Девід Шейк

1

Я створив інструмент в C спеціально для цієї мети, який подолав багато проблем із рішенням xcape / xmodmap :


Чи є спосіб вимкнути "заміну" Esc на Caps, я вважаю за краще взагалі не мати Caps, а старий і новий Esc обидва ведуть себе як Escape.
dragon788


Дякую, мені доведеться покласти посилання, щоб автоматично зібрати це в мої dotfiles. Я також можу PR-файл README.md, оскільки для Ubuntu 16.04 для компіляції знадобилися libudev-dev та libevdev-dev.
dragon788

@ dragon788 приходь до Arch (можна навіть спробувати Antergos). Я переїхав з Ubuntu років назад і ніколи не повернусь, це просто набагато краще.
pepper_chico
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.