Не работает эмуляция сенсорного экрана

2695
Dmitry Grigoryev

У меня есть устройство с сенсорным экраном, для которого я включил эмуляцию третьей кнопки в xinput:

Device 'ft5x_ts': ... Evdev Third Button Emulation (257): 1 Evdev Third Button Emulation Timeout (258): 750 Evdev Third Button Emulation Button (259): 3 Evdev Third Button Emulation Threshold (260): 20 ... 

( полный журнал )

Однако эмуляция не работает - события нажатия правой кнопки никогда не появляются. Вот пример xevвывода:

ButtonPress event, serial 45, synthetic NO, window 0x2000001, root 0x44, subw 0x0, time 2058845, (94,90), root:(96,117), state 0x100, button 1, same_screen YES  MotionNotify event, serial 45, synthetic NO, window 0x2000001, root 0x44, subw 0x0, time 2059658, (94,89), root:(96,116), state 0x100, is_hint 0, same_screen YES  MotionNotify event, serial 45, synthetic NO, window 0x2000001, root 0x44, subw 0x0, time 2060101, (94,89), root:(96,116), state 0x100, is_hint 0, same_screen YES  ButtonRelease event, serial 45, synthetic NO, window 0x2000001, root 0x44, subw 0x0, time 2060101, (94,89), root:(96,116), state 0x100, button 1, same_screen YES 

Как вы можете видеть, интервал между ButtonPressи ButtonReleaseбольше 750 мс, а перемещение указателя ниже порога 20 пикселей, однако xevсообщает о нажатии кнопки 1, а не кнопки 3.

По иронии судьбы, когда я настраиваю USB-мышь таким же образом, длинные нажатия на кнопку 1 делают эмуляцию кнопки 3:

ButtonPress event, serial 45, synthetic NO, window 0x2000001, root 0x44, subw 0x0, time 2870367, (48,82), root:(50,109), state 0x0, button 3, same_screen YES  MotionNotify event, serial 45, synthetic NO, window 0x2000001, root 0x44, subw 0x0, time 2870422, (49,81), root:(51,108), state 0x400, is_hint 0, same_screen YES  ButtonRelease event, serial 45, synthetic NO, window 0x2000001, root 0x44, subw 0x0, time 2870590, (49,81), root:(51,108), state 0x400, button 3, same_screen YES 

Кто-нибудь может мне помочь, возможно, указать на некоторые аномалии, которые я не заметил?

PS. Эмуляция третьей кнопки раньше работала с моим сенсорным экраном под Debian Wheezy и перестала работать, когда я обновился до Jessie. На данный момент я вернул свою последнюю резервную копию, чтобы вернуть установку Wheezy, но мне все еще нужно решение, поскольку Wheezy постепенно отключается.

1
Есть ли какая-то разница, если вы установите «Порог эмуляции третьей кнопки Evdev» (260): «50? Leathe 8 лет назад 0
@ Leathe Нету. Кроме того, 20 пикселей - это уже достаточно большой порог, из-за этого иногда трудно выполнить небольшие действия прокрутки / перетаскивания. Dmitry Grigoryev 8 лет назад 0

1 ответ на вопрос

0
Dmitry Grigoryev

В соответствии с этим и этим, эмуляция правого клика является распространенной проблемой в Debian Jessie, не ограничиваясь конкретным дистрибутивом. Обходной путь, который мне помог (на 10-точечном сенсорном экране), заключается в использовании утилиты twofing :

git clone https://github.com/Plippo/twofing sudo apt-get install build-essential libx11-dev libxtst-dev libxi-dev x11proto-randr-dev libxrandr-dev cd twofing; make ./twofing /dev/input/eventXX 

eventXXустройство, соответствующее сенсорному экрану, которое можно найти с помощью xinput list. Событие щелчка правой кнопкой мыши выполняется нажатием двумя пальцами, и в качестве бонуса вы получаете жест прокрутки (перетаскивание двумя пальцами) и жест увеличения / уменьшения масштаба (щепотка двумя пальцами). Я не пробовал twofingс резистивным сенсорным экраном, но я полагаю, что он не будет работать, так как резистивные сенсорные экраны не поддерживают мультитач.

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