Как запросить разрешения последовательного порта с помощью polkit в Linux?

Я пишу кроссплатформенное приложение, которое я хотел бы запускать в операционных системах на основе Linux, таких как Fedora и Ubuntu. я использую QSerialPort и работает нормально. я могу использовать QSerialPortInfo получить список последовательных портов в системе и представить их пользователю, который может выбрать, какой из них он хочет использовать.

Однако в системах Linux по умолчанию пользователь не имеет прав доступа к последовательным портам. Я знаю, что неправильно запускать мое приложение с sudo и я также знаю, что не удобно просить пользователя запустить chmod 666 на последовательный порт вручную каждый раз, когда приложение используется. Поэтому я оглянулся и мне кажется, что полькит — это ответ, однако я не смог найти ни одного примера, который бы показал мне, как это сделать.

Подскажите, пожалуйста, как использовать polkit (ранее известный как policykit) для запроса разрешения для моего приложения использовать определенный последовательный порт?

РЕДАКТИРОВАТЬ:

То, что я ищу, это способ:

  1. Проверьте, есть ли у пользователя доступ к последовательному порту
  2. Если нет, появится диалоговое окно с запросом разрешения (например, в приложении настроек Gnome)
  3. Если пользователь прошел аутентификацию, сделайте последовательный порт доступным для приложения.

Еще немного мыслей

  • Я не хочу устанавливать правило udev, которое дает разрешение каждому последовательному порту
  • Я не хочу просить пользователя запустить скрипт
  • Я не хочу, чтобы мое приложение запускалось от имени суперпользователя
  • Я не хочу никаких других действий, выполняемых от имени root, только доступ к последовательному порту

Да я нашел официальные документы по полькиту, но они не очень ясно, как это сделать.

1

Решение

Общее мышление:


Не стоит пытаться сделать приложение «универсальным».

Я понимаю, что вы хотите, чтобы ваше программное обеспечение было простым в использовании, но для таких вещей (настройки системы) вы должны полагаться на системных упаковщиков.

В любое время polkit может быть заменен другим решением, или имя ресурса может быть изменено, или что-то еще, и ваше приложение больше не будет использоваться.

Я советую тебе:

  • самое большее, поднимите окна polkit, которые попросят пароль
  • или лучше сделать дистрибутивные пакеты, которые будут выполнять необходимые настройки через обычные скрипты

Идея


Я этого не делал (но я много играл в прошлом с Пэм :-))

Итак, вот ссылки, которые я нашел и что понял:

  • polkit действует так же, как и sudo: он позволяет запускать программу с другим идентификатором (объяснения)
  • так что вы можете запустить вашу программу как с правами суперпользователя или с правами доступа к последовательному порту.

Чтобы вы могли создать:

  • установочный скрипт, который позволяет запускать вашу программу с хорошей идентификацией (например, пример). Таким образом, вы будете запрашивать пароль root один раз (при установке для создания политики polkit), и каждый раз, когда пользователь захочет запустить вашу программу. Эта идентификация может быть корневой или любой идентификацией, если эта идентификация имеет доступ R / W.
  • файл политики: вы можете посмотреть либо 1 или же документация
  • скрипт для запуска вашей программы, содержащий что-то вроде этого: pkexec <path>/<pgm>

Вот несколько указателей:

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]