2

我正在编写一个跨平台应用程序,我想在基于 Linux 的操作系统(如 Fedora 和 Ubuntu)上运行。我使用QSerialPort它,它工作正常。我可以QSerialPortInfo用来获取系统中的串行端口列表,并将它们呈现给可以选择他/她想要使用的用户。

但是,在 Linux 系统上,默认情况下用户没有串行端口的权限。我知道运行我的应用程序是错误的,而且我也知道每次使用应用程序时sudo要求用户手动在串行端口上运行是不友好的。chmod 666所以我环顾四周,在我看来 polkit 是答案,但是我找不到任何可以告诉我如何做到这一点的示例。

你能告诉我如何使用 polkit(以前称为 policykit)来请求我的应用程序使用特定串行端口的权限吗?

编辑:

我正在寻找的是一种方法:

  1. 检查用户是否可以访问串口
  2. 如果没有,弹出一个请求权限的对话框(例如 Gnome 设置应用程序)
  3. 如果用户成功通过身份验证,则使串行端口可用于应用程序。

还有一些想法

  • 我不想设置一个允许每个串行端口的 udev 规则
  • 我不想让用户运行脚本
  • 我不希望我的应用以超级用户身份运行
  • 我不希望以 root 身份执行任何其他操作,只是串行端口访问

是的,我找到了官方的 polkit 文档,但他们对如何做到这一点不是很清楚。

4

1 回答 1

1

总体思路:


尝试使应用程序“通用”并不是一个好主意。

我了解您希望您的软件易于使用,但对于这样的事情(系统设置),您应该依赖系统打包程序。

在任何时候,polkit 都可以替换为另一个解决方案,或者可以更改资源的名称,或者其他任何事情,您的应用程序将不再可用。

我建议你:

  • 最多,提出一个要求输入密码的 polkit 窗口
  • 或者更好的是,制作将通过常规脚本进行必要调整的分发包

一个主意


我没有这样做(但我过去和 pam 玩了很多 :-))

所以这里是我找到的和我理解的链接:

  • polkit 的行为方式与 sudo 相同:它允许您以另一个身份运行程序(解释
  • 因此,您可以以 root 身份运行程序,也可以以具有足够权限访问序列号的身份运行程序

所以你可以创建:

  • 一个安装脚本,允许以良好的身份运行您的程序(例如example)。这样,您将询问一次 root 密码(在安装时创建 polkit 策略),并且每次用户想要运行您的程序时。该身份可能是 root 或任何身份,只要该身份具有 R/W 访问权限。
  • 策略文件:您可以查看1文档
  • 用于启动您的程序的脚本,其中包含以下内容:pkexec <path>/<pgm>

这里有一些提示:

于 2016-08-04T14:49:30.997 回答