Переназначение ключей в Ubuntu 17

Пожалуйста, помогите мне решить следующую проблему: У меня есть педаль USB, которую я хочу использовать в качестве клавиши управления своей работой. До сих пор система определяет, что эта педаль работает как клавиша F2 (я использую Ubuntu 17), и я хотел бы переназначить систему, чтобы понимать клавишу F2 как клавишу управления. Я перепробовал несколько руководств, некоторые из которых относятся к решению Xmodmap, которое кажется устаревшим, другое к XKB, которое я из-за своей глупости не смог понять. Я смотрю на некоторые предложения от вас, как я могу это сделать. Заранее спасибо.

0
задан 10 December 2017 в 13:52

1 ответ

Метод XKB

XKB, возможно, не лучший способ изменить поведение этого устройства, но это должно быть возможно в традиционных средах X. Более новые контексты XKB, такие как Wayland или kmscon, могут не обеспечивать гранулярность, необходимую для настройки отдельных макетов XKB на произвольных устройствах. Он также не будет работать под традиционной консолью.

Применение переопределения udev hwdb для внесения этого изменения должно работать при всех этих условиях.


В традиционных средах X setxkbmap принимает флаг -device, а xkbcomp использует -i:

-device device

Определяет числовой идентификатор устройства ввода, который будет обновлен с новой раскладкой клавиатуры.

Используйте xinput -list, чтобы найти идентификаторы устройства.


Чтобы доказать этот функционал, используйте setxkbmap ... -print, чтобы сгенерировать базовый макет, сохранить его в файл, а затем загрузить его с помощью xkbcomp filename.xkb $DISPLAY. Возможно, вам потребуется отключить демоны настроек клавиатуры GNOME / KDE во время тестирования.

$ setxkbmap -layout us -option '' -print > f2toctrl.xkb

Отредактируйте файл f2toctrl.xkb - мы только меняем строку xkb_symbols:

// generated with `setxkbmap -print` and modified
// load: xkbcomp -i DeviceID# filename $DISPLAY
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete" };
    xkb_compat    { include "complete" };
    xkb_symbols   {
        include "pc+us+inet(evdev)"

        // existing key definition (see `xkbcomp $DISPLAY - | grep -A 3 FK02`)
        // key <FK02> {
        //    type= "CTRL+ALT",
        //    symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]
        // };

        // patterned after ctrl:nocaps option
        // see /usr/share/X11/xkb/symbols/ctrl
        replace key <FK02> { [ Control_L, Control_L ] };
        modifier_map  Control { <FK02>, <LCTL> };

    };
    xkb_geometry  { include "pc(pc105)" };
};

Теперь загрузите его (замените N идентификатором устройства, который вы нашли в xinput -list):

$ xkbcomp -i N f2toctrl.xkb $DISPLAY

Вы можете проверить свои изменения с помощью xkbcomp -i N $DISPLAY - | less и физически проверить кнопку в различных приложениях, чтобы убедиться, что она распознается.


В обычных (не DE) средах X команду загрузки можно добавить в ~/.xinitrc или другие сценарии запуска WindowManager. Вам нужно было бы добавить это переопределение в системную базу данных XKB для использования с большинством Wayland-композиторов и DE, таких как GNOME / KDE, но в этом контексте я не уверен, как вы примените переопределение только к педальному устройству. Если бы это было возможно, я бы создал /usr/share/X11/xkb/symbols/pedal для хранения переопределения Ctrl, показанного выше (и потенциально других полезных переопределений для устройства).

Очень упрощенный файл макета может выглядеть так:

// /usr/share/X11/xkb/symbols/pedal

// convert F2 key operation to Ctrl
default partial modifier_keys
xkb_symbols "basic" {
    name[Group1]= "USB Pedal as Ctrl";
    replace key <FK02> { [ Control_L, Control_L ] };
    modifier_map Control { <FK02>, <LCTL> };
};
0
ответ дан 10 December 2017 в 13:52

Другие вопросы по тегам:

Похожие вопросы: