如何在Linux上使用polkit请求串行端口权限
How to request serial port permissions with polkit on Linux?
我正在编写一个跨平台应用程序,我想在Fedora和Ubuntu等基于Linux的操作系统上运行。我使用QSerialPort
,它运行良好。我可以使用QSerialPortInfo
获得系统中串行端口的列表,并将它们呈现给用户,用户可以选择要使用的端口。
但是,在Linux系统上,默认情况下,用户没有串行端口的权限。我知道用sudo
运行我的应用程序是错误的,我也知道每次使用应用程序时都要求用户在串行端口上手动运行chmod 666
是不友好的。所以我环顾四周,在我看来polkit就是答案,但我还没有找到任何例子来告诉我如何做到这一点
你能告诉我如何使用polkit(以前称为policykit)来请求我的应用程序使用特定串行端口的权限吗?
编辑:
我正在寻找一种方法:
- 检查用户是否可以访问串行端口
- 如果没有,则弹出一个请求权限的对话框(例如Gnome设置应用程序)
- 如果用户身份验证成功,请使串行端口可用于应用程序
更多想法
- 我不想设置一个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
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 如何在boost beast http请求中设置http头
- 发送一个带有libcurl C++问题的帖子请求:s
- 在多个核心中处理一个HTTP请求
- 错误:请求非类类型为"MULTIMEDIA_FILME [500]"的成员|
- 使用 Winsock2.h C++向不和谐 API 发送 HTTP 请求时出现问题
- 每个服务器请求的内存预算
- std::getline没有在while循环中重新请求用户输入
- 请求最简单的 OpenMP 目标 GPU 示例
- 请求有关C++中嵌入 for 循环的帮助
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 使用 winsock 接收 http 请求
- QNetworkAccessManager 稍后在添加请求时删除
- 为什么我收到来自谷歌的错误请求?
- 从网链套接字请求连接设备的列表
- libcurl :C++处理多个异步请求
- 对于 http 请求,python 比 c++ 快吗?
- 通过引用传递向量是请求 std::分配器
- 为什么当通过 TCP 发送的消息速率增加时,请求-响应消息对的延迟会降低?
- 如何在Linux上使用polkit请求串行端口权限