如何在Linux上使用polkit请求串行端口权限

How to request serial port permissions with polkit on Linux?

本文关键字:polkit 请求 串行端口 权限 Linux      更新时间:2023-10-16

我正在编写一个跨平台应用程序,我想在Fedora和Ubuntu等基于Linux的操作系统上运行。我使用QSerialPort,它运行良好。我可以使用QSerialPortInfo获得系统中串行端口的列表,并将它们呈现给用户,用户可以选择要使用的端口。

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

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

编辑:

我正在寻找一种方法:

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

更多想法

  • 我不想设置一个udev规则,给每个串行端口权限
  • 我不想要求用户运行脚本
  • 我不希望我的应用程序以超级用户身份运行
  • 我不想以root用户身份执行任何其他操作,只想访问串行端口

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

总体思路:


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

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

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

我建议你:

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

一个想法


我没有这么做(但我过去和帕姆打过很多比赛:-)

以下是我发现的链接和我所理解的内容:

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

所以你可以创建:

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

以下是一些提示:

  • polkit的管理指南:3(我是debian用户,但我喜欢他们的文档)
  • 官方文件:https://www.freedesktop.org/software/polkit/docs/master/index.html