ситуация

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

Клавиши Sculpt Mobile Keyboard от F1 до F12 работают как функциональные клавиши Play/Pause, Mute, .... Чтобы использовать клавиши от F1 до 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 + перекомпиляция его было одним из решений. Я не хочу перекомпилировать Ядро только для того, чтобы моя клавиатура нормально работала ...

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

Вопрос

  • Мое предположение в "Linux Solution for other Keyboards" неверно?
  • Если ответ на первый вопрос - нет: как мне решить описанную проблему программно (переключать и заменять ключи) без перекомпиляции моего ядра?

0