Перезапись позиции события мыши CGEventTap возможна только при запуске приложения от имени пользователя root?
Я разрабатываю приложение MacOS, которое берет под свой контроль курсор. Я использую CGEvent Tap и добавляю некоторую арифметику к CGEvents, чтобы сместить конечную позицию мыши. Хотя приложение в принципе работает, как и ожидалось, в некоторых случаях, а точнее: при запуске приложения с определенным популярным программным обеспечением для иллюстрации и с использованием стилуса, приложение создает мерцающие "призрачные" позиции для мыши в исходном месте. Хорошо, что эта проблема может быть решена при запуске приложения, когда вы вошли в систему как пользователь root. Я прочитал довольно много постов ТАК, но этот пост лучше всего решает эту проблему:
Как описано в этом посте, проблема, вероятно, такова:
К сожалению, документ CGEventTapCreate() сообщает: только процессы, работающие от имени пользователя root, могут обнаружить отвод события в точке, где события HID попадают на сервер окна; для других пользователей эта функция возвращает NULL.
Ну, функция определенно не возвращает ноль, потому что нажатие действует. Также я попробовал все возможные комбинации аргументов для этой функции, но все они действуют одинаково. Далее в этом посте предлагается решить проблему следующим образом:
Возможно, вы можете выделить эту функцию в отдельный процесс с правами суперпользователя, оставив остальную часть вашего приложения в обычном пользовательском режиме? Я полагаю, что есть также способ запрашивать полномочия root только для конкретного действия, выполняемого вашей программой.
Теперь, если это возможное решение, я бы с удовольствием его реализовал! Итак, мой вопрос: как? Я наткнулся на запуск сценариев с повышенными правами, но не только на код CoreGraphics, например, на CGEventTap. Это возможно? Кто-нибудь может дать мне пример того, как это может быть достигнуто, или какое-либо другое решение проблемы?
Любая помощь приветствуется, большое спасибо.
1 ответ
Из документации Apple:
Сигналы событий получают события "вверх" и "вниз", если выполняется одно из следующих условий:
- Текущий процесс выполняется от имени пользователя root.
- Доступ для вспомогательных устройств включен. В OS X v10.4 вы можете включить эту функцию, используя Системные настройки, панель универсального доступа, вид клавиатуры.
Так что предоставление приложения Доступность прав решило это для меня (не нужно запускать с правами администратора). Это может быть достигнуто Системные настройки -> Безопасность и конфиденциальность -> Специальные возможности и добавить свою программу там.