#linux #input #evdev
#linux #ввод #evdev
Вопрос:
У меня есть конвертируемый ноутбук, для которого нет большой поддержки Linux: среда рабочего стола не может определить, когда устройство находится в режиме планшета, поэтому клавиатура и тачпад всегда активны, что делает режим планшета практически бесполезным. Я решил эту проблему, написав простой скрипт на Python, который захватывает устройства ввода с клавиатуры и мыши и передает события в систему, пока не будет получена определенная последовательность клавиш. На этом этапе он прекращает проксирование событий до тех пор, пока снова не появится та же последовательность клавиш.
Код фактически представляет собой немного более сложную версию этого примера (которая воспроизводит проблему):
import evdev
import selectors
dev = evdev.InputDevice('/dev/input/event5')
ui = evdev.UInput.from_device(dev)
dev.grab()
selector = selectors.DefaultSelector()
selector.register(dev, selectors.EVENT_READ)
while True:
for key, mask in selector.select(0.1):
dev = key.fileobj
for event in dev.read():
cat = evdev.categorize(event)
print(cat)
ui.write_event(event)
/dev/input/event5
это сенсорная панель. В системе есть следующие устройства:
Available devices:
/dev/input/event0: Lid Switch
/dev/input/event1: Power Button
/dev/input/event2: Sleep Button
/dev/input/event3: Power Button
/dev/input/event4: AT Translated Set 2 keyboard
/dev/input/event5: SynPS/2 Synaptics TouchPad
/dev/input/event6: Wacom HID 5072 Pen
/dev/input/event7: Wacom HID 5072 Finger
/dev/input/event8: HDA Intel PCH Mic
/dev/input/event9: HDA Intel PCH Headphone
/dev/input/event10: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event11: PC Speaker
/dev/input/event12: ThinkPad Extra Buttons
/dev/input/event13: Integrated Camera: Integrated C
/dev/input/event14: Video Bus
При выполнении этого кода движения и обычные действия с щелчком работают нормально, но щелчок двумя пальцами, который обычно действует как щелчок правой кнопкой мыши, больше не работает. Поскольку этот код просто принимает события и повторно отправляет их, почему это поведение отличается? Как мне заставить щелчок двумя пальцами работать должным образом?
Ответ №1:
Я думаю, что то, что вам нужно, очень похоже на это, изменено, конечно, в соответствии с вашими потребностями
Python_Touchscreen_RightClick.py
если это не сработает для вас, вы также можете попробовать использовать событие Gesture из python-libinput
Комментарии:
1. Я не думаю, что в этом коде конкретно рассматривается вопрос, который больше касается того, почему при проксировании всех событий с реальных устройств ввода я теряю функциональность.
2. ваш первый вопрос был — почему это поведение отличается?, а второй — как мне заставить щелчок двумя пальцами работать должным образом? Я подумал, что если вы прочитаете код, вы сами ответите на свой первый вопрос. итак, вы идете — это теряет функциональность, потому что у вас нет проверки на касание двумя пальцами перед прокси-сервером события
3. Но я не пытаюсь имитировать щелчок двумя пальцами. Я пытаюсь понять, почему я не вижу этого в первую очередь . Код, на который вы ссылаетесь, не приносит никакой пользы, если я не могу сказать, когда получу приглашение с несколькими касаниями, и это вся проблема, которую я пытаюсь решить.