
Я использую RHEL 8.9 на ноутбуке Dell Precision 7560 со встроенным 3-кнопочным трекпадом (левая, средняя и правая кнопки расположены между трекпадом и передним краем ноутбука). У меня есть приложение gtk3, которому необходимо считывать и обрабатывать события нажатия и перетаскивания средней кнопки. Приложение отлично работает, когда я использую среднюю кнопку трекпада, но НЕ работает, когда я использую внешнюю 3-кнопочную мышь. (Средняя кнопка внешней мыши, как подтверждено, работает на другой системе, и я также попробовал вторую внешнюю мышь, которая тоже не сработала.) Когда я нажимаю и удерживаю среднюю кнопку трекпада, перемещая курсор мыши либо через трекпад, либо через мышь, курсор на дисплее перемещается, как и ожидалось, и все работает нормально в моем приложении, тогда как курсор дисплея НЕ перемещается при перетаскивании средней кнопки внешней мыши, и мое приложение не видит событий движения. Однако простые нажатия и отпускания средней кнопки внешней мыши работают нормально. Я пробовал работать с каждым из различных серверов отображения (X11 против Wayland, Classic против Unclassic(?) и т. д.), но все они ведут себя здесь одинаково.
Я попробовал отладку с помощью xev и увидел именно то, что можно было бы ожидать от использования средней кнопки трекпада, то есть нажатие кнопки, затем кучу MotionNotifys, затем ButtonRelease. Когда я пробую щелкнуть и перетащить среднюю кнопку внешней мыши, первоначальное нажатие и удержание средней кнопки не вызывает никаких событий, последующее перетаскивание генерирует пару событий ButtonPress/Release каждый раз, когда я ожидал бы увидеть событие MotionNotify, и, наконец, когда кнопка отпускается, никакого события не сообщается.
Если вышеописанное поведение недостаточно странное, то вишенкой на торте является обратное поведение по крайней мере двух разных терминальных приложений (gnome-terminal и xfce4-terminal) в этом отношении. Щелчок средней кнопкой мыши и перетаскивание внешней мыши заставит содержимое окна терминала прокручиваться (т. е. события движения каким-то образом передаются на терминалы), хотя курсор дисплея снова не перемещается. Однако щелчок средней кнопкой мыши и перетаскивание трекпада не прокручивает содержимое окна терминала, хотя курсор дисплея перемещается.
Я немного покопался в xinput, но не обнаружил никаких устройств или свойств устройств, которые могли бы оказать какое-либо очевидное влияние:
% xinput --list
Virtual core pointer id=2 [master pointer (3)]
↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
↳ xwayland-pointer:17 id=6 [slave pointer (2)]
↳ xwayland-relative-pointer:17 id=7 [slave pointer (2)]
Virtual core keyboard id=3 [master keyboard (2)]
...
% xinput --list-props xwayland-pointer:17
Device 'xwayland-pointer:17':
Device Enabled (121): 1
Coordinate Transformation Matrix (123): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (247): 0
Device Accel Constant Deceleration (248): 1.000000
Device Accel Adaptive Deceleration (249): 1.000000
Device Accel Velocity Scaling (250): 10.000000
Мне кажется немного странным, что в списке устройств xinput я не вижу ничего, что четко указывало бы на отдельные устройства — трекпад и мышь.
Кто-нибудь знает, что здесь происходит? Я хочу работать с внешней мышью и закрытым ноутбуком. Я гуглил несколько похожих ситуаций на этом сайте и в других местах, но не нашел решения, которое, казалось бы, применимо ко мне. На ноутбуке нет указателя, и я не создавал ярлыков в ~/.config, о которых мне известно.
Спасибо!