Переназначить функциональные клавиши Microsoft Sculpt Mobile Keyboard под Linux

563
daniel.neumann

ситуация

У меня есть мобильная клавиатура Microsoft Sculpt, подключенная через Bluetooth. На моем ноутбуке работает xUbuntu 16.04.

F1К F12клавишам клавиатуры работы Sculpt Mobile в качестве функциональных клавиш Play / Pause, Mute, .... Чтобы использовать клавиши F1to F12по назначению, нужно нажать Fnклавиши, которые находятся справа. Это довольно неудобно, если вы хотите нажать ALT+ F4.... Я хотел бы постоянно переключаться на Fxключи (или блокировать Fnключ). Кроме того, я хотел бы переключиться PageUpи PageDownключи против Homeи End.

Windows Solution

Используйте AutoHotKey, как описано в

Нерабочее решение

Ответ относится к другой клавиатуре

Решение Linux для других клавиатур (не работает)

Должна быть возможность менять или переключать ключи с помощью инструментов командной строки xkbcompили setxkbmapкак описано здесь:

Основываясь на этих вопросах и ответах, я использовал xevдля поиска имен ключей (идентификаторов XKB) рассматриваемых ключей. Я хотел создать следующее отображение:

# F1 to F5 (F5 probably does not work) I172 -> FK01 MUTE -> FK02 VOL- -> FK03 VOL+ -> FK04 FIND -> FK05  # F11 and F12 FK22 -> FK11 FK23 -> FK12  # switch Page Up and Page Down with Home and End PGUP -> HOME HOME -> PGUP PGDN -> END END -> PGDN 

Таким образом, я создал соответствующий код:

xkb_symbols "remote" { key <I172> { type= "CTRL+ALT", symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ] }; key <MUTE> { type= "CTRL+ALT", symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ] }; key <VOL-> { type= "CTRL+ALT", symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ] }; key <VOL+> { type= "CTRL+ALT", symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ] }; key <FIND> { type= "CTRL+ALT", symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ] }; key <FK22> { type= "CTRL+ALT", symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ] }; key <FK23> { type= "CTRL+ALT", symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ] }; key <PGDN> { [ End ] }; key <END> { [ Next ] }; key <PGUP> { [ Home ] }; key <HOME> { [ Prior ] }; }; 

И добавил его в существующее определение карты ключей с помощью xkbcompи добавил +custom(remote)в xkb_symbolsпеременную отображение ключей устройства соответствующего устройства. Это не работает.

Я думаю, что они, возможно, не работают, потому что клавиатура распознается как указатель, а не как клавиатура. xinput listВыход говорит:

⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ Logitech USB Mouse id=11 [slave pointer (2)] ⎜ ↳ AlpsPS/2 ALPS DualPoint TouchPad id=14 [slave pointer (2)] ⎜ ↳ AlpsPS/2 ALPS DualPoint Stick id=15 [slave pointer (2)] ⎜ ↳ Microsoft Sculpt Mobile Keyboard id=17 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Video Bus id=8 [slave keyboard (3)] ↳ Power Button id=9 [slave keyboard (3)] ↳ Sleep Button id=10 [slave keyboard (3)] ↳ Laptop_Integrated_Webcam_E4HD id=12 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=13 [slave keyboard (3)] ↳ Dell WMI hotkeys id=16 [slave keyboard (3)] 

Альтернативные решения (не пробовали)

Я читал о некоторых мышах, которые были распознаны как клавиатура, а не как указатель. Изменение кода ядра Linux + перекомпиляция его было одним из решений. Я не хочу перекомпилировать Ядро только для того, чтобы моя клавиатура нормально работала ...

Аппаратное решение (работает)

enter image description here

Вопрос

  • Мое предположение в «Linux Solution for other Keyboards» неверно?
  • Если ответ на первый вопрос - нет : как мне решить описанную проблему программно (переключать и заменять ключи) без перекомпиляции моего ядра?
0
Случайное применение других решений без понимания деталей редко работает. Первый шаг - выяснить, какие события генерируются для F1-F12, как с ключом Fn, так и без него. Для этого используйте `evtest` на входном слое ядра и` xev` на слое X, и соответственно отредактируйте вопрос. * После того, как * это станет известно, можно придумать правильное сопоставление клавиш (и вы также можете сделать это самостоятельно, поискать учебники / объяснения). Перекомпилирование ядра никогда не требуется для сопоставления клавиатуры. dirkt 5 лет назад 0
@dirkt Спасибо за комментарий. Я отредактировал вопрос и добавил измененное сопоставление клавиш, которое я попробовал вчера. Я также извлек текущее сопоставление клавиш с помощью `xkbcomp -xkb $ DISPLAY my_xkbmap`, изменил его вручную и загрузил измененное сопоставление с помощью xkbcomp (я забыл команду). Новое сопоставление клавиш не работает. Однако повторное извлечение сопоставления клавиш с помощью `xkbcomp` вернуло мне новое измененное сопоставление (таким образом, новое сопоставление ключей было сохранено, но по какой-то причине не работало). Поскольку моя клавиатура распознается как указатель, а не как клавиатура, я считаю, что она может работать только для клавиатур daniel.neumann 5 лет назад 0
Я попробую evtest позже. daniel.neumann 5 лет назад 0
Даже если клавиатура по умолчанию классифицируется как указатель, она все равно может генерировать ключевые события, так что это не проблема. Определенно посмотрите также на evtest и входной слой, потому что первое решение, которое нужно сделать, - использовать ли входной слой или слой X для изменения отображения. dirkt 5 лет назад 0
@dirkt `evtest` дает аналогичные результаты, чем` xev`. Функциональная клавиша «F1» - «Воспроизведение / Пауза», «F2» - «Без звука» и т. Д. Функциональные клавиши с «F5» по «F12» запускают комбинации клавиш (например, нажатие «F10» приводит к событиям «CTRL_L + Windows_L»). + Tab ') - в этом случае `xev` и` evtest` согласуются. daniel.neumann 5 лет назад 0
@dirkt ОК. Поскольку я не работал с помощью слоя x (что я когда-либо делал неправильно), я попробую это через слой ввода. Я быстро выполнил поиск по «раскладке клавиатуры слоя ввода», и мне было трудно найти отправную точку ... Можете ли вы дать мне несколько ключевых слов или название инструмента командной строки? daniel.neumann 5 лет назад 0

0 ответов на вопрос