Могу ли я запускать макросы и ярлыки со второй клавиатуры в Linux?

Вопрос не показывает измененный сценарий (и не дает никаких подсказок относительно того, как была установлена программа).

Если вы опустите метку и начальные значения для двух полей ввода, Xdialog покажет сообщение об использовании (довольно большой экран) вместо того, чтобы попытаться определить проблему.

Этот сценарий работает для меня (используя одноразовую компиляцию из исходников на CentOS 6):

Xdialog --title "RDP Company" \
        --icon company_logo.xpm \
        --no-cancel \
        --left \
        --password=2 \
        --separator="\n" \
        --2inputsbox "Type your credentials\nto access the system" 20 40 "Login(user): " "" "Password: " ""

4
27.03.2019, 16:21
2 ответа

В принципе, да. Когда я в последний раз делал это в 2012 году , выход состоял в том, чтобы попытаться сказать Linux, что вторая клавиатура очень странная и на самом деле означает XF86VolumeUp , когда она отправляет нажатие клавиши для Число 1 или что-то в этом роде. К счастью, есть довольно много кодов клавиш, которых нет на стандартных клавиатурах, которые вы можете использовать таким образом.

Давайте рассмотрим это для одного ключа:

  • используйте xev | grep -i key, чтобы найти коды клавиш на дополнительной клавиатуре. Я просто наберу keypap 9 , например, с кодом клавиши 81. (NB :на моей дополнительной клавиатуре есть клавиша с надписью «00», но она дважды отправляет «0», у меня нет идея, как справиться с этим.)
      KeyPress event, serial 38, synthetic NO, window 0x4400001,
        state 0x10, keycode 81 (keysym 0xffb9, KP_9), same_screen YES,
      KeyRelease event, serial 39, synthetic NO, window 0x4400001,
        state 0x10, keycode 81 (keysym 0xffb9, KP_9), same_screen YES,
        request MappingKeyboard, first_keycode 8, count 248
  • проверьте setxkbmap -queryправила вашей (основной )клавиатуры. Мы постараемся превратить вашу дополнительную клавиатуру в дюжину или около того мультимедийных клавиш на этой раскладке. Для меня это
rules:      evdev
model:      pc105
layout:     de
variant:    nodeadkeys
  • найти достаточно записей в /usr/share/X11/xkb/symbols/inet. Правая сторона -— это то, что увидит приложение, возможно, с модификаторами клавиши Shift и т. д., левая сторона -— это скан-коды. Я выберу этот, потому что на моей клавиатуре нет клавиши «калькулятор» :
  • .
key <I148>   {      [ XF86Calculator        ]       };
  • создайте файл в /usr/share/X11/xkb/keycodes/, который сопоставляет скан-коды с кодами клавиш (из первого шага ). Да, это кажется задним числом. Мой файл называется trustkeypad и выглядит так:
default xkb_keycodes "trustkeypad" {
    minimum= 8;
    maximum= 255;

    // keypad 9
    <I148> = 81;
};
  • скомпилируйте этот файл сxkbcomp -xkb trustkeypad

  • попробуйте с setxkbmap -v -v -device 17 -keycodes (filename). (17 – это идентификатор вашего xinput.)Результат у меня выглядит так:

Warning! Multiple definitions of keycodes
         Using command line, ignoring rules file
Applied rules from evdev:
rules:      evdev
model:      pc105
layout:     de
variant:    nodeadkeys
Trying to build keymap using the following components:
keycodes:   trustkeypad
types:      complete
compat:     complete
symbols:    pc+de(nodeadkeys)+inet(evdev)
geometry:   pc(pc105)

и это выглядит хорошо, особенно строка кодов клавиш. Если вы запустите xevсейчас, вы должны увидеть генерируемые новые символы. Увы, сейчас я получаю только половину -победы:

KeyPress event, serial 39, synthetic NO, window 0x4600001,
    root 0x168, subw 0x0, time 24043275, (1666,897), root:(1670,950),
    state 0x10, keycode 81 (keysym 0x1008ff1d, XF86Calculator), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 39, synthetic NO, window 0x4600001,
    root 0x168, subw 0x0, time 24043403, (1666,897), root:(1670,950),
    state 0x10, keycode 81 (keysym 0x1008ff1d, XF86Calculator), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 39, synthetic NO, window 0x4600001,
    root 0x168, subw 0x0, time 24043403, (1666,897), root:(1670,950),
    state 0x10, keycode 77 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 39, synthetic NO, window 0x4600001,
    root 0x168, subw 0x0, time 24043411, (1666,897), root:(1670,950),
    state 0x10, keycode 77 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

но после того, как я пару раз случайно разбил X (не думаю, что установка минимального значения в файле кодов клавиш выше поможет ), это ушло. Возможно, в этот момент поможет простая перезагрузка. После того, как вы добьетесь успеха, вы должны получить что-то вроде

KeyPress event, serial 38, synthetic NO, window 0x3e00001,
    root 0x168, subw 0x0, time 26443862, (930,972), root:(934,1025),
    state 0x10, keycode 81 (keysym 0x1008ff1d, XF86Calculator), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 39, synthetic NO, window 0x3e00001,
    root 0x168, subw 0x0, time 26444022, (930,972), root:(934,1025),
    state 0x10, keycode 81 (keysym 0x1008ff1d, XF86Calculator), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

и вы можете проверить в своих пользовательских настройках, что теперь вы можете назначить ярлык для этой клавиши, и он скажет, что он назначен для клавиши «Калькулятор».

Здесь все еще отсутствует :выяснение того, как сделать это стандартной настройкой, в том числе при перезагрузке. Это, вероятно, потребует изучения udev, иhttps://help.ubuntu.com/community/Custom%20keyboard%20layout%20definitionsможет оказаться полезным, даже несмотря на то, что он имеет «устаревший» тег, датируемый 2014 годом.

3
27.01.2020, 20:52

Описанный метод модификации hwdbне будет работать с несколькими подключенными USB-клавиатурами, поскольку скан-код одной и той же кнопки на разных USB-клавиатурах одинаков, вы переназначите кнопку на всех подключенных USB-клавиатурах.

Скан-код отличается только между встроенной -клавиатурой ноутбука и клавиатурой USB.

Вместо этого я бы попробовал этот метод Python (нашел его в комментарии кhttps://www.youtube.com/watch?v=Arn8ExQ2Gjg)

  1. Установите Python и его evdevмодуль (, он понадобится вам позже)

  2. cdв /dev/input/по -id/

  3. Без подключенной клавиатуры, ls.

  4. Подключите клавиатуру и ls. Будет две новые символические ссылки. Обратите внимание на его абсолютную позицию в файловой системе (, например, /dev/input/by -id/usb -0c45 _USB _ПРОВОДНАЯ _KEYBOARD _event -kbd)

  5. Выйдите из терминала. Создайте файл Python и поместите в него это:

    from evdev import InputDevice, categorize, ecodes
    dev = InputDevice('/absolute/position/of/device')
    dev.grab()
    
    
    for event in dev.read_loop():
         if event.type == ecodes.EV_KEY:
              key = categorize(event)
         if key.keystate == key.key_down:
              if key.keycode == 'KEY_ESC':
                   print("Hello, world!")
    
  6. Теперь, если вы нажмете клавишу выхода на второй клавиатуре, будет напечатано «Hello, world!»

2
03.02.2021, 09:56

Теги

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