как отправить нажатия клавиш программно (как “sendkeys” в Windows) в окно Wayland Linux (KDE/GNOME)?

Вопрос или проблема

Я пишу программное обеспечение для автоматизации рабочего стола, которое управляет графическим интерфейсом на Linux. Оно работает довольно хорошо, но Wayland блокирует межокно communication, особенно при вводе не-ASCII символов в текстовые поля.

Для сравнения, на Windows я использовал API “sendkeys”, и большинство программ подчинялись.

В системах X есть pyautogui, xdotool и другие средства, так как нет изоляции между окнами.

Программные решения, которые я тестировал для управления и имитации пользовательского ввода:

  1. uinput (python-uinput)
  2. pyAutoGui –
  3. ydotool игнорирует не ASCII (официально). Однако он запускает свой собственный демон, поэтому он медленнее, чем любой прямой API или dbus вариант.
  4. wtype не работает на KDE и Gnome.
  5. dotool не работает для emoji, искажает не ASCII.
  6. kdotool не может вводить символы.

Существует строгая проблема с разрешениями в Wayland и тем, как он (не) разрешает межокно communication. Но даже с root эти инструменты не позволяют вводить не-ASCII.

Я знаю несколько неудачных обходных путей, но все они имеют свою цену, например, использование буфера обмена и вызов события Ctrl+V.

Идеи, как отправить или эмулировать событие клавиатуры для юникода не-ASCII?

(я использую производные от Arch с KDE, но то же самое применимо и к Gnome, и возможно к другим рабочим окружениям)

Ответ или решение

Отправка нажатий клавиш программным способом в окружениях Wayland Linux (таких как KDE и GNOME) представляет собой сложную задачу, связанную с ограничениями безопасности и изоляцией приложений. В отличие от X-систем, где существует множество инструментов для эмуляции нажатий клавиш, таких как xdotool или pyautogui, Wayland вводит серьезные ограничения для межоконного взаимодействия, что усложняет разработку автоматизации рабочего стола.

Общие проблемы

Ваша проблема, связанная с отправкой не-ASCII символов, обостряется особенностями архитектуры Wayland. Эти ограничения обеспечивают более высокий уровень безопасности, но в то же время мешают таким инструментам, как ydotool, wtype, и даже kdotool, успешно эмулировать клавиатурный ввод для не-ASCII символов. Давайте рассмотрим предлагаемые вами решения и варианты, а затем перейдем к возможным обходным путям для вашей проблемы.

Решения и обходные пути

  1. uinput: Использование библиотеки python-uinput может быть полезно для создания пользовательского устройства ввода, однако она не всегда будет работать с определенными графическими окружениями Wayland.

  2. Клипборд: Хотя это не является идеальным решением, использование буфера обмена в качестве временного хранилища для текста — один из наиболее реалистичных подходов. Вы можете скопировать ваш текст с помощью вызовов DBus и затем запустить эмуляцию нажатия клавиш, таких как Ctrl+V, для вставки.

  3. DBus: Работая с окружениями KDE и GNOME, вы можете использовать DBus для взаимодействия с приложениями. Вы можете вызвать методы определённых приложений через DBus, если они предоставляют такую возможность. Это даст вам доступ к функциям, которые могут позволить вам вводить текст.

  4. Создание собственного сервиса: Если вы хотите иметь гораздо больше контроля, вы можете попробовать написать собственный сервис на основе Wayland, используя библиотеки, такие как libwayland или libinput. Это может быть сложно, но в перспективе обеспечит наилучший результат.

  5. Использование GTK/Qt решений: Если ваше приложение имеет GUI на базе GTK или Qt, вы можете использовать внутренние механизмы этих библиотек для эмуляции ввода. Например, это можно делать с помощью вызовов событий, которые будут инициировать ввод.

Советы по разработке

  • Исследуйте существующие библиотеки и API: Убедитесь, что вы исследовали все доступные библиотеки, такие как Wayland, libinput, GTK+ и Qt, поскольку они часто обеспечивают уровень абстракции, который может облегчить вам задачу отправки символов.

  • Обсуждение с сообществом: Вы можете внедрять свои идеи и получать советы от сообщества разработчиков через тематические форумы или каналы обсуждений, такие как Stack Overflow или Reddit. Там можно найти мнения разработчиков, которые столкнулись с аналогичными проблемами.

  • Тестирование и отладка: Убедитесь, что вы проводите тщательное тестирование вашей программы в различных окружениях. Иногда решение может оказаться специфичным для конкретной версии сред, с которыми вы работаете.

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

Оцените материал
Добавить комментарий

Капча загружается...