Перезапись позиции события мыши CGEventTap возможна только при запуске приложения от имени пользователя root?

Я разрабатываю приложение MacOS, которое берет под свой контроль курсор. Я использую CGEvent Tap и добавляю некоторую арифметику к CGEvents, чтобы сместить конечную позицию мыши. Хотя приложение в принципе работает, как и ожидалось, в некоторых случаях, а точнее: при запуске приложения с определенным популярным программным обеспечением для иллюстрации и с использованием стилуса, приложение создает мерцающие "призрачные" позиции для мыши в исходном месте. Хорошо, что эта проблема может быть решена при запуске приложения, когда вы вошли в систему как пользователь root. Я прочитал довольно много постов ТАК, но этот пост лучше всего решает эту проблему:

/questions/34024459/predotvratit-obratnyij-vyizov-mousemovedevent-ot-obrabotki-dvizheniya-ili-globalno-skryit-kursor-na-mgnovenie/34024471#34024471

Как описано в этом посте, проблема, вероятно, такова:

К сожалению, документ CGEventTapCreate() сообщает: только процессы, работающие от имени пользователя root, могут обнаружить отвод события в точке, где события HID попадают на сервер окна; для других пользователей эта функция возвращает NULL.

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

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

Теперь, если это возможное решение, я бы с удовольствием его реализовал! Итак, мой вопрос: как? Я наткнулся на запуск сценариев с повышенными правами, но не только на код CoreGraphics, например, на CGEventTap. Это возможно? Кто-нибудь может дать мне пример того, как это может быть достигнуто, или какое-либо другое решение проблемы?

Любая помощь приветствуется, большое спасибо.

1 ответ

Из документации Apple:

Сигналы событий получают события "вверх" и "вниз", если выполняется одно из следующих условий:

- Текущий процесс выполняется от имени пользователя root.

- Доступ для вспомогательных устройств включен. В OS X v10.4 вы можете включить эту функцию, используя Системные настройки, панель универсального доступа, вид клавиатуры.

Так что предоставление приложения Доступность прав решило это для меня (не нужно запускать с правами администратора). Это может быть достигнуто Системные настройки -> Безопасность и конфиденциальность -> Специальные возможности и добавить свою программу там.

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