没看上一篇的需要看上一篇 QDBus之路———-Hello DBus
我们都知道linux下有些惭怍需要root运行,然后通常直接sudo,但是,对于linux小白用户而言,总不能一运行软件就弹出要求用户sudo xxx重新运行软件吧,估计别人连sudo是啥都不知道
所以,软件要进行root操作,就需要利用polkit
其实polkit也没那么神圣,不过是读取对应的配置文件来验证用户下罢了。
实现root操作的大致原理就是写一个daemon,所以的root操作都写到这里,然后用dbus吧接口暴露出去,不过daemon暴露出去的接口都需要自行调用polkit(这里使用的是qt风格的polkit-qt5)进行验证,验证通过再继续操作
然后这个daemon还要在systemBus注册dbus服务,并且要手动sudo运行或者让他开机自启(dbus运行时自启动死活启动不了,sessionBus上注册能自启,但是明明指定了root用户结果还是普通用户运行,没权限)
polkit验证请求
Authority::Result result; // 第一个参数是需要验证的action,和规则文件写的保持一致 result = Authority::instance()->checkAuthorizationSync(actionId, UnixProcessSubject(applicationPid), Authority::AllowUserInteraction); if (result == Authority::Yes) { //验证通过,进行root操作 }else { //验证不通过,不进行任何操作并return }
源码:
https://github.com/1377195627/polkit-qt-example.git
发表回复