MyTetra Share
Делитесь знаниями!
Как проверить клик мышки по экранным кнопкам в Linux, если нажатия не срабатывают в какие-то моменты
Время создания: 13.11.2017 16:45
Автор: xintrea
Текстовые метки: linux, мышка, клик, событие, устройство ввода, пропуск нажатия клавиш
Раздел: Компьютер - Linux - Манипуляторы - Мышка
Запись: xintrea/mytetra_syncro/master/base/15105807015f4pvrjblc/text.html на raw.github.com

Чтобы понять, что происходит, надо выяснить, на каком уровне возникает проблема. Уровни можно условно разделить вот так:


1. Проблемы в мышке (аппаратно)

2. Проблемы в USB-контроллере материнки (аппаратно)

3. Проблемы в ядре Linux

4. Проблемы в подсистеме отлова событий устройств X11

5. Проблемы в Desktop Enviroment


Пойдем от верхнего уровня абстрации к нижнему.



Уровень 5


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



Уровень 4


Для диагностики можно установить программу xinput. Ее можно запустить от обычного пользователя. Данная программа сыпет в консоль коды событий устройств ввода. Чтобы видеть только события кликов мышкой, плюс добавить нумерацию событий (чтобы в длинном листинге отличать каждое событие), можно воспользоваться следующими командами.


Выяснить номер устройства мышки:


$ xinput

⎡ Virtual core pointer                          id=2    [master pointer  (3)]

⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]

⎜   ↳ USB OPTICAL MOUSE                         id=10   [slave  pointer  (2)]

⎜   ↳ SIGMACHIP USB 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)]

   ↳ Sleep Button                              id=8    [slave  keyboard (3)]

   ↳ Logitech Logitech USB Headset             id=9    [slave  keyboard (3)]

   ↳ SIGMACHIP USB Keyboard                    id=11   [slave  keyboard (3)]

   ↳ SIGMACHIP USB Keyboard                    id=13   [slave  keyboard (3)]


Запустить отображение событий мышки с нумерацией и фильтрацией по кликам:


$ xinput test 10 | grep -n button

29:button press   1  

30:button release 1  

49:button press   1  

50:button release 1  

62:button press   1  

63:button release 1  

73:button press   1  

79:button release 1  

100:button press   1  

101:button release 1


Для визуализации того факта, что сама DE увидела событие (то есть сравнить события на 4-м и на 5-м уровне), можно воспользоваться тестовым окном в настройках мышки. В MATE в этом окне есть лампочка, которая загорается при одинарном клике, и ярко включается при двойном клике:





В других DE тоже есть нечто подобное. Далее надо разместить консольный вывод и лампочку как можно ближе друг к другу и можно начать кликать по картинке с лампочкой. Лучше снимать это дело на видео. Если событие отобразилось, а лампочка не загорелась, значит проблема где-то в глубинах DE, а сервер X11 работает исправно.


Если же при клике мышкой возникает ситуация, что физический клик был, но событие X11 не появилось и лампочка не загорелась, то нужно спускаться на уровень ниже.



Уровень 3


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


Чтобы прописать правильный файл устройства мышки в конфиг LoloSwitcher, можно посмотреть файлы устройств в каталоге /dev/input/by-id:


$ cd /dev/input/by-id

$ ls -l

итого 0

lrwxrwxrwx 1 root root 9 ноя 13 14:47 usb-275d_USB_OPTICAL_MOUSE-event-mouse -> ../event1

lrwxrwxrwx 1 root root 9 ноя 13 14:47 usb-275d_USB_OPTICAL_MOUSE-mouse -> ../mouse0

lrwxrwxrwx 1 root root 9 ноя 13 14:47 usb-Logitech_Logitech_USB_Headset-event-if03 -> ../event0

lrwxrwxrwx 1 root root 9 ноя 13 14:47 usb-SIGMACHIP_USB_Keyboard-event-if01 -> ../event3

lrwxrwxrwx 1 root root 9 ноя 13 14:47 usb-SIGMACHIP_USB_Keyboard-event-kbd -> ../event2


В данном случае файл событий на устройстве ввода мышки - usb-275d_USB_OPTICAL_MOUSE-event-mouse. Его и нужно прописать в файле конфигурации LoloSwitcher /home/user/.config/loloswitcher/config.ini:


InputDevice=/dev/input/by-id/usb-275d_USB_OPTICAL_MOUSE-event-mouse


Опцию DeviceType надо оставить равной 0 (события клавиатуры и мышки генерируются в одинаковом формате), а значение EventFilter надо уставить вот таким:


EventFilter=^[14],[0-9]+,[0-9]+;$


Данный фильтр будет пропускать коды событий только начинающиеся на 1 или на 4, что соответствует различным событиям мышки как устройства.


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


$ /sbin/loloswitcher -t1

Event code test.

If you see typed symbols without codes, you should

configure parameter InputDevice in your config.ini file.

Note! This codes with previous filtration by EventFilter value: '^[14],[0-9]+,[0-9]+;$'

Type CTRL+C for exit.


[1]:

4,4,589825;


[2]:

1,272,1;


[3]:

4,4,589825;


[4]:

1,272,0;


Теперь можно разместить окно с выводом loloswitcher рядом с окном вывода xinput и рядом с окном с лампочкой.





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


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



Уровни 2 и 1


Проверить уровень 2 (стек USB на материнке) очень проблематично, поэтому можно проверить уровень 1 (сама мышка), и методом исключения понять, на каком уровне идет сбой. Хотя, тут проблема может оказаться в частичной несовместимости USB-контроллера компьютера и самой мышки. И кто тут работает неправильно - выяснить очень сложно.


Саму мышку можно проверить единственным способом: заменить на другую мышку.


Способ перетыкания мышки в другой компьютер не всегда показательный: на другом компьютере проблемная мышка может работать четко. Это возникает из-за того, что тут важна совокупность устройств: USB-контроллер на материнке может криво работать с какой-то моделью мышки, но та же мышка может нормально работать с другим USB-контроллером.


Так произошло в моем случае: мышка нормально работала на двух ноутбуках и на компьютере товарища, при этом глючила на новом компьютере. Поэтому был сделан неправильный вывод о том, что проблема в новой материнке.


Зато когда была вставлена другая мышка, на ней пропадания кликов исчезли вообще.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования