Как временно отключить aa, включают клавиатуру после нажатия его?

Я пролил пиво в своей механической клавиатуре и с тех пор, как это имеет тенденцию повторять "a" ключ каждый раз, когда я нажимаю его (да, я несколько раз чистил его, использовал алкоголь, и т.д.). Я пытался смягчить эту проблему с помощью "ключи возврата", но эта функция временно отключает все ключи после того, как они нажатый Ааре. Другими словами, "ключи возврата" вмешиваются в мою способность ввести быстро каждый раз, когда я должен ввести слово с повторной буквой (<как "t" в слове "буква") или неоднократно нажимать клавишу Backspace быстро.

(хорошо я не оставлю повторения в оставшемся тексте, но Вы видите, что он происходит с maadenning частотой),

В случае, если это помогает, я использовал xev для определения точно, какую последовательность команд ОС получает, и похоже, что каждый раз "a" повторяется, это - потому что клавиатура отправляет желаемую последовательность многократно (KeyPress, сопровождаемый KeyRelease, затем KeyPress, сопровождаемым KeyRelease снова). Другими словами, ключ не всовывает состояние "Нажатия клавиши". Это повторяется, как будто я нажал и выпустил его многократно.

Я видел, что другие люди задают этот тот же вопрос, но решениями не является на самом деле то, которое я ищу. Например, решение, предложенное в первом ответе на этот вопрос, отключает автоповтор, но это не будет работать на меня, потому что "a" не становится всунутым "Нажатое" состояние. Второй ответ в том же самом вопросе не работает также, потому что он отключает всю клавиатуру после того, как проблемная клавиша нажата. Я просто хочу временно отключить "a" ключ и только "a" ключ в течение очень краткого промежутка времени (~50ms).

К счастью, я редко должен повторять букву "a" при вводе, поэтому даже решение, которое использует что-то как автозамена, работало бы на меня. Предпочтительно, я хотел бы использовать решение, которое использует xbindkeys хотя, потому что я уже использую тот пакет для переотображения моих кнопок мыши.

Править: В ответ на комментарий ниже, вот выводы 'xinput список' и 'xev':

$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SINOWEALTH Game Mouse                     id=9    [slave  pointer  (2)]
⎜   ↳ EST Gaming keyboard                       id=12   [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)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ SINOWEALTH Game Mouse Keyboard            id=10   [slave  keyboard (3)]
    ↳ EST Gaming keyboard                       id=11   [slave  keyboard (3)]
    ↳ EST Gaming keyboard                       id=13   [slave  keyboard (3)]
    ↳ Eee PC WMI hotkeys                        id=15   [slave  keyboard (3)]
    ↳ EST Gaming keyboard                       id=16   [slave  keyboard (3)]

$ xev
KeyPress event, serial 37, synthetic NO, window 0x7c00001,
    root 0x4e5, subw 0x0, time 188722500, (165,-16), root:(4636,676),
    state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XmbLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x7c00001,
    root 0x4e5, subw 0x0, time 188722576, (165,-16), root:(4636,676),
    state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

В попытке реализовать предложение @Raffa, я использовал "3" для идентификатора клавиатуры, и я оставил код клавиши как 38. Однако ключ все еще копирует.

1
задан 24 April 2020 в 00:26

1 ответ

Попробуйте это в a bash файл сценария:

#!/bin/bash

xinput test 11 |

while read pkc

        do
                if [[ "$pkc" =~ "key press   38" ]]
                        then
                                xmodmap -e 'keycode 38 = ';
                                sleep 0.5;
                                xmodmap -e 'keycode 38 = a A';
                fi

done
  • Измените число 11 в xinput test 11 к Вашему номеру устройства клавиатуры. Можно найти это число путем выполнения xinput list. Вы, возможно, должны были бы проверить если id число является правильным для Вашей клавиатуры. Сделать, которые выбирают клавиатуру id числа с slave keyboard перед ними затем проверяют id в терминале путем выполнения xinput test id_number и нажмите на Вашей клавиатуре. Если Вы получаете вывод как key press 38 затем это - корректное id число для Вашей текущей клавиатуры и если никакой вывод, продолжите тестировать другой id числа, пока Вы не видите вывода.

  • Измените nuber 38 в "key press 38" и xmodmap -e 'keycode 38 = '; и xmodmap -e 'keycode 38 = a A'; к коду клавиши ключ. Можно найти это число путем выполнения xev и нажатие ключ.

  • Измените число 0.5 в sleep 0.5; к желаемому периоду в секундах для ключ, который будет отключен.


Шаги к созданию и использованию файла сценария:

  1. Создайте и откройте файл в редакторе путем выполнения следующей команды в терминале:
nano ~/no_aa.sh
  1. Скопируйте и вставьте вышеупомянутый код (после изменения его) в редактора.

  2. Сохраните файл сценария и выйдите, редактор путем нажатия Ctrl + X затем нажимают Y.

  3. Сделайте исполняемый файл файла сценария путем выполнения следующей команды в терминале:

chmod +x ~/no_aa.sh
  1. Запустите скрипт путем выполнения следующей команды в терминале:
bash ~/no_aa.sh
  1. Сохраните терминал, открывают и тестируют ключ в других приложениях как запись в устройстве записи LibreOffice.
1
ответ дан 25 April 2020 в 10:42

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

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