Непоследовательные события мыши X для монитора мультитач Acer T231H

В качестве альтернативы запустите dconfeditor org -> gnome -> nautilus -> значок, затем выберите уровень масштабирования по умолчанию

2
задан 19 June 2012 в 21:18

5 ответов

Решил это сам

Анализ основной ошибки

Я вырыл источники как evdev, так и основного x-сервера. Оказывается, эта ошибка не в evdev в конце концов, а в xserver-xorg-core. A зафиксировать там (который также включен в Xorg вверх по течению ) удалил единственный фрагмент кода, который когда-либо устанавливал флаг TOUCH_END для события. Без этого флага UpdateDeviceState не удалит кнопку из состояния , что приведет к поведению «Кнопка всегда нажата» из моего исходного вопроса. Простое восстановление этой фиксации восстановило основные функции основных событий, то есть кнопка была отмечена как выпущенная сразу после события ButtonRelease.

Незначительная ошибка при нажатии на кнопку мыши

Одна проблема остается в xev, однако: Событие ButtonPress уже имеет state 0x100, но состояние должно отражать состояние кнопок мыши перед , когда произошло событие. Это, по-видимому, связано с тем, как обрабатываются изменения в собственности на сенсорную последовательность. В одна точка в этом коде управления владением история касаний воспроизводится с помощью TouchEventHistoryReplay, но внутреннее состояние устройства не установлено так, как было до этого воспроизведения. Я еще не сформулировал патч для этого. Когда я это сделаю, я приложу его к отчету об ошибке . Я считаю, что этот вопрос здесь ответил даже без патча для этой второстепенной точки, поскольку это отдельная проблема.

Как отладить этот

Если кто-то читает это с аналогичной проблемой: Я рассматривал использование gdb, но я был далеко не уверен, смогу ли я правильно переключить vt, если X-сервер был остановлен в отладчике, и у меня не было рабочего сервера ssh, настроенного на этой машине. Поэтому я использовал одну из самых старых вспомогательных средств для отладки, когда-либо и разбросанные ErrorF вызовы по всему коду Xi / exevents.c в частности. Затем я перекомпилировал код (который я изначально скомпилировал с помощью debuild ) без его установки и запустил скомпилированный двоичный файл (build-main/hw/xfree86/Xorg) как root:

$ make -C build-main
$ sudo -s
# apt-get install openbox
# ( sleep 3; DISPLAY=:1 exec openbox; ) & build-main/hw/xfree86/Xorg :1

Это перекомпилирует код (требуется возраст даже для незначительной модификации, поэтому кажется, что управление зависимостями в make-файлах является субоптимальным, но мне также не хотелось копаться в этом). Затем, став root, он запускает новый X-сервер и запускает openbox на этом сервере несколько мгновений спустя. Обратите внимание, что вы будете запускать openbox как root, поэтому это строго для тестирования.

2
ответ дан 2 August 2018 в 00:36

Решил это сам

Анализ основной ошибки

Я вырыл источники как evdev, так и основного x-сервера. Оказывается, эта ошибка не в evdev в конце концов, а в xserver-xorg-core. A зафиксировать там (который также включен в Xorg вверх по течению ) удалил единственный фрагмент кода, который когда-либо устанавливал флаг TOUCH_END для события. Без этого флага UpdateDeviceState не удалит кнопку из состояния , что приведет к поведению «Кнопка всегда нажата» из моего исходного вопроса. Простое восстановление этой фиксации восстановило основные функции основных событий, то есть кнопка была отмечена как выпущенная сразу после события ButtonRelease.

Незначительная ошибка при нажатии на кнопку мыши

Одна проблема остается в xev, однако: Событие ButtonPress уже имеет state 0x100, но состояние должно отражать состояние кнопок мыши перед , когда произошло событие. Это, по-видимому, связано с тем, как обрабатываются изменения в собственности на сенсорную последовательность. В одна точка в этом коде управления владением история касаний воспроизводится с помощью TouchEventHistoryReplay, но внутреннее состояние устройства не установлено так, как было до этого воспроизведения. Я еще не сформулировал патч для этого. Когда я это сделаю, я приложу его к отчету об ошибке . Я считаю, что этот вопрос здесь ответил даже без патча для этой второстепенной точки, поскольку это отдельная проблема.

Как отладить этот

Если кто-то читает это с аналогичной проблемой: Я рассматривал использование gdb, но я был далеко не уверен, смогу ли я правильно переключить vt, если X-сервер был остановлен в отладчике, и у меня не было рабочего сервера ssh, настроенного на этой машине. Поэтому я использовал одну из самых старых вспомогательных средств для отладки, когда-либо и разбросанные ErrorF вызовы по всему коду Xi / exevents.c в частности. Затем я перекомпилировал код (который я изначально скомпилировал с помощью debuild ) без его установки и запустил скомпилированный двоичный файл (build-main/hw/xfree86/Xorg) как root:

$ make -C build-main
$ sudo -s
# apt-get install openbox
# ( sleep 3; DISPLAY=:1 exec openbox; ) & build-main/hw/xfree86/Xorg :1

Это перекомпилирует код (требуется возраст даже для незначительной модификации, поэтому кажется, что управление зависимостями в make-файлах является субоптимальным, но мне также не хотелось копаться в этом). Затем, став root, он запускает новый X-сервер и запускает openbox на этом сервере несколько мгновений спустя. Обратите внимание, что вы будете запускать openbox как root, поэтому это строго для тестирования.

2
ответ дан 4 August 2018 в 16:07

Решил это сам

Анализ основной ошибки

Я вырыл источники как evdev, так и основного x-сервера. Оказывается, эта ошибка не в evdev в конце концов, а в xserver-xorg-core. A зафиксировать там (который также включен в Xorg вверх по течению ) удалил единственный фрагмент кода, который когда-либо устанавливал флаг TOUCH_END для события. Без этого флага UpdateDeviceState не удалит кнопку из состояния , что приведет к поведению «Кнопка всегда нажата» из моего исходного вопроса. Простое восстановление этой фиксации восстановило основные функции основных событий, то есть кнопка была отмечена как выпущенная сразу после события ButtonRelease.

Незначительная ошибка при нажатии на кнопку мыши

Одна проблема остается в xev, однако: Событие ButtonPress уже имеет state 0x100, но состояние должно отражать состояние кнопок мыши перед , когда произошло событие. Это, по-видимому, связано с тем, как обрабатываются изменения в собственности на сенсорную последовательность. В одна точка в этом коде управления владением история касаний воспроизводится с помощью TouchEventHistoryReplay, но внутреннее состояние устройства не установлено так, как было до этого воспроизведения. Я еще не сформулировал патч для этого. Когда я это сделаю, я приложу его к отчету об ошибке . Я считаю, что этот вопрос здесь ответил даже без патча для этой второстепенной точки, поскольку это отдельная проблема.

Как отладить этот

Если кто-то читает это с аналогичной проблемой: Я рассматривал использование gdb, но я был далеко не уверен, смогу ли я правильно переключить vt, если X-сервер был остановлен в отладчике, и у меня не было рабочего сервера ssh, настроенного на этой машине. Поэтому я использовал одну из самых старых вспомогательных средств для отладки, когда-либо и разбросанные ErrorF вызовы по всему коду Xi / exevents.c в частности. Затем я перекомпилировал код (который я изначально скомпилировал с помощью debuild ) без его установки и запустил скомпилированный двоичный файл (build-main/hw/xfree86/Xorg) как root:

$ make -C build-main
$ sudo -s
# apt-get install openbox
# ( sleep 3; DISPLAY=:1 exec openbox; ) & build-main/hw/xfree86/Xorg :1

Это перекомпилирует код (требуется возраст даже для незначительной модификации, поэтому кажется, что управление зависимостями в make-файлах является субоптимальным, но мне также не хотелось копаться в этом). Затем, став root, он запускает новый X-сервер и запускает openbox на этом сервере несколько мгновений спустя. Обратите внимание, что вы будете запускать openbox как root, поэтому это строго для тестирования.

2
ответ дан 6 August 2018 в 00:45

Решил это сам

Анализ основной ошибки

Я вырыл источники как evdev, так и основного x-сервера. Оказывается, эта ошибка не в evdev в конце концов, а в xserver-xorg-core. A зафиксировать там (который также включен в Xorg вверх по течению ) удалил единственный фрагмент кода, который когда-либо устанавливал флаг TOUCH_END для события. Без этого флага UpdateDeviceState не удалит кнопку из состояния , что приведет к поведению «Кнопка всегда нажата» из моего исходного вопроса. Простое восстановление этой фиксации восстановило основные функции основных событий, то есть кнопка была отмечена как выпущенная сразу после события ButtonRelease.

Незначительная ошибка при нажатии на кнопку мыши

Одна проблема остается в xev, однако: Событие ButtonPress уже имеет state 0x100, но состояние должно отражать состояние кнопок мыши перед , когда произошло событие. Это, по-видимому, связано с тем, как обрабатываются изменения в собственности на сенсорную последовательность. В одна точка в этом коде управления владением история касаний воспроизводится с помощью TouchEventHistoryReplay, но внутреннее состояние устройства не установлено так, как было до этого воспроизведения. Я еще не сформулировал патч для этого. Когда я это сделаю, я приложу его к отчету об ошибке . Я считаю, что этот вопрос здесь ответил даже без патча для этой второстепенной точки, поскольку это отдельная проблема.

Как отладить этот

Если кто-то читает это с аналогичной проблемой: Я рассматривал использование gdb, но я был далеко не уверен, смогу ли я правильно переключить vt, если X-сервер был остановлен в отладчике, и у меня не было рабочего сервера ssh, настроенного на этой машине. Поэтому я использовал одну из самых старых вспомогательных средств для отладки, когда-либо и разбросанные ErrorF вызовы по всему коду Xi / exevents.c в частности. Затем я перекомпилировал код (который я изначально скомпилировал с помощью debuild ) без его установки и запустил скомпилированный двоичный файл (build-main/hw/xfree86/Xorg) как root:

$ make -C build-main
$ sudo -s
# apt-get install openbox
# ( sleep 3; DISPLAY=:1 exec openbox; ) & build-main/hw/xfree86/Xorg :1

Это перекомпилирует код (требуется возраст даже для незначительной модификации, поэтому кажется, что управление зависимостями в make-файлах является субоптимальным, но мне также не хотелось копаться в этом). Затем, став root, он запускает новый X-сервер и запускает openbox на этом сервере несколько мгновений спустя. Обратите внимание, что вы будете запускать openbox как root, поэтому это строго для тестирования.

2
ответ дан 7 August 2018 в 18:10

Решил это сам

Анализ основной ошибки

Я вырыл источники как evdev, так и основного x-сервера. Оказывается, эта ошибка не в evdev в конце концов, а в xserver-xorg-core. A зафиксировать там (который также включен в Xorg вверх по течению ) удалил единственный фрагмент кода, который когда-либо устанавливал флаг TOUCH_END для события. Без этого флага UpdateDeviceState не удалит кнопку из состояния , что приведет к поведению «Кнопка всегда нажата» из моего исходного вопроса. Простое восстановление этой фиксации восстановило основные функции основных событий, то есть кнопка была отмечена как выпущенная сразу после события ButtonRelease.

Незначительная ошибка при нажатии на кнопку мыши

Одна проблема остается в xev, однако: Событие ButtonPress уже имеет state 0x100, но состояние должно отражать состояние кнопок мыши перед , когда произошло событие. Это, по-видимому, связано с тем, как обрабатываются изменения в собственности на сенсорную последовательность. В одна точка в этом коде управления владением история касаний воспроизводится с помощью TouchEventHistoryReplay, но внутреннее состояние устройства не установлено так, как было до этого воспроизведения. Я еще не сформулировал патч для этого. Когда я это сделаю, я приложу его к отчету об ошибке . Я считаю, что этот вопрос здесь ответил даже без патча для этой второстепенной точки, поскольку это отдельная проблема.

Как отладить этот

Если кто-то читает это с аналогичной проблемой: Я рассматривал использование gdb, но я был далеко не уверен, смогу ли я правильно переключить vt, если X-сервер был остановлен в отладчике, и у меня не было рабочего сервера ssh, настроенного на этой машине. Поэтому я использовал одну из самых старых вспомогательных средств для отладки, когда-либо и разбросанные ErrorF вызовы по всему коду Xi / exevents.c в частности. Затем я перекомпилировал код (который я изначально скомпилировал с помощью debuild ) без его установки и запустил скомпилированный двоичный файл (build-main/hw/xfree86/Xorg) как root:

$ make -C build-main
$ sudo -s
# apt-get install openbox
# ( sleep 3; DISPLAY=:1 exec openbox; ) & build-main/hw/xfree86/Xorg :1

Это перекомпилирует код (требуется возраст даже для незначительной модификации, поэтому кажется, что управление зависимостями в make-файлах является субоптимальным, но мне также не хотелось копаться в этом). Затем, став root, он запускает новый X-сервер и запускает openbox на этом сервере несколько мгновений спустя. Обратите внимание, что вы будете запускать openbox как root, поэтому это строго для тестирования.

2
ответ дан 10 August 2018 в 06:56

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

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