Перемотування ключів, які генерують кілька кодів сканування


33

У мене є ThinkPad W540. На його клавіатурі чотири мультимедійні клавіші над цифровою клавіатурою. Два з цих ключів генерують клавішні (і, мабуть, скан-коди), які відповідають комбінації клавіш, Win_L+ Lі Win_L+ E. Іншими словами, для ключа, який генерує Win_L+ L,
showkey --scancodesповертається це:

0xe0 0x5b 0x26 0xa6 0xe0 0xdb

setkeycodesКоманда вимагає жоден байт Unescaped або втекли два байта послідовностей позначають коди сканування, і showkeyдає мені набагато більше , ніж це, так що я можу не зовсім повторно карту , що ключ до однієї з вільних кодів клавіш в моїй системі з проста setkeycodes <scancode> <keycode>.

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



1
Я думаю, що це може бути складним: принаймні, на старих Thinkpads подібне відображення робиться бортовим контролером, а не ОС.
mirabilos

1
У мене медіа-клавіатура Microsoft All-in-One Media, яка має ту саму проблему, чи вдалося ви знайти рішення?
osolmaz

5
Я щось подібне робив на Thinkpad t61 деякий час тому, зіставляючи клавіші, за допомогою /etc/acpi/events яких є acpidпакет, і просто визначав дію, коли ці функціональні клавіші були натиснуті.
цезар

2
У вас є налаштування Win_L як модифікатор у X-windows? Для мене це за замовчуванням.
mcr

Відповіді:


1

Це можна зробити в два етапи:

  1. ловити комбінації клавіш
  2. для імітації введення різних клавіш.

Ви можете використовувати xchainkeysдля 1. і [xdotool][2]для 2 .:

Для того, щоб створити імітацію новий ключ xdotool, варіант --clearmodifiersз keyможе бути важливо , щоб нейтралізувати оригінальну імітацію модифікатора натисніть:

xdotool key --clearmodifiers Shift+a

Це має набрати капітал Aяк тест.

У конфігурації xchainkeysв ~/.config/xchainkeys/xchainkeys.conf, ми можемо прив’язати команду до комбінації клавіш:

W-l :exec xdotool key --clearmodifiers Shift+a

Тепер комбінація клавіш Winі l( Winліворуч або праворуч зробити те саме), а також ключ, що генерує Win_L + L, повинні створити велику літеру A.

(Існує багато інших програм, доступних для обох частин. Для першої можна використовувати конфігурацію гарячої клавіші середовища робочого столу, але я вважаю за краще тримати її незалежно від DE.)


2
Проблема з цим рішенням, якщо я не помиляюся, була б такою ж, як просто використовувати вказану комбінацію клавіш, щоб викликати дію - ця дія не була б запущена саме цією клавішею, натисканням фактичної комбінації клавіш, яка генерує те саме коди також дають такий же результат. Іншими словами, він не задовольняє умові "перезавантажити цей ключ до чогось іншого, що не просто дублює одну з існуючих комбінацій клавіш". Але я ціную зусилля.
moonwalker

3
Так, це правда - я не був впевнений, що ви мали на увазі під цим реченням, тепер я розумію. Але схоже, що ваш ключ виробляє два ключових коду в апаратному забезпеченні (тобто в програмному забезпеченні клавіатур) - тому я не бачу війни навколо, крім того, як ви виявляєте часові натискання клавіш штучного клавіша "модифікатор вниз", "інший ключ", "модифікатор вгору". Гм ... може бути, рішення, пов’язане з пайкою, простіше;)
Volker Siegel

1
@moonwalker Чи можете ви спробувати перевстановити програму Win_L замість іншої клавіші та перевірте, чи перезавантажує модифікатор іншого?
Volker Siegel

1
гм, чи не втрачав би я такі комбінації, як Win_L + R, Win + Break, Win + L, Win + тощо. в такому разі?
moonwalker

1
Ні, я не думаю. Win-L - Win-Shift-lАле ви також можете зіставити ланцюги комбінацій клавіш до команди. Як Win-aі після цього b. З поза Win-a, bповодиться нормально. Це, безумовно, найкорисніша особливість xchainkeysі досить унікальна, я думаю.
Волкер Зігель

-2

Це те, що я зробив на своїй Thinkpad Yoga, щоб повернути клавішу зворотної косої риски / трубу до потрібної клавіші. Оскільки чомусь у кожній віртуальній машині Linux він інтерпретував клавішу \ backslash \ pipe (\ |) як клавішу менше (<).

Спочатку виконайте команду: xev

Натисніть потрібну клавішу, щоб отримати код клавіші для ключа, який ви хочете повторно пов’язати:

Вихід події xev KeyPress

У цьому прикладі Keycode дорівнює 94, а дія "менше", але ми хочемо, щоб він мав дію зворотної косої риски і штрих "aka" pipe

Повторне введення коду 94 на нахил та клавішу рядка, так званий "труба":

xmodmap -e 'keycode 94 = backslash bar'

Тепер давайте зробимо це стійким:

xmodmap -pke | egrep "backslash|bar" | grep 94 > ~/.Xmodmap`

Повертає у файл таке ~/.Xmodmap:

keycode  94 = backslash bar backslash bar

Тоді вам слід створити такий файл, щоб закінчити його збереження:

echo "xmodmap .Xmodmap" > ~/.xinitrc

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