• 社区首页
  • 版块
【整活时间】如何更优雅地使用 pkexec
深度杂谈652个浏览 ·8个评论
电梯直达到第
忘记、过去
deepin^6
发表于2020-09-27 07:56
楼主
本帖最后由 zty199 于 2020-9-27 15:59 编辑

前情提要:记得刚开始魔改显卡切换插件的时候,因为外部脚本调用的时候要用到 sudo,但是 QProcess 执行脚本怎么输入密码是个大问题。一开始暴力地使用 deepin-terminal -e 执行脚本,用终端输入密码。结果被 shenmo 吐槽丑陋的一比......

后来老老实实用了 pkexec,总算是能有个对话框输入密码了......然而显示的文字提示总是又臭又长,把脚本路径全显示了......无奈改成了 pkexec sh xxxxx.sh,虽然显示精简了,但是完全看不出来执行了什么了......(就像 vscode 修改只读文件提权的界面一样,只显示了 /bin/bash

再后来琢磨怎么绕开文管以管理员身份编辑文件避免死机的时候,偷懒用了 zenity 对话框输入密码。但是吧,gtk 的界面还是不美观。纠结于 pkexec dde-file-manager 是怎么做到显示“查看文件夹需要输入密码”这种自定义文字的时候,翻了翻 linuxdeepin/dde-file-manager 的仓库,终于看到怎么实现的了......



官方仓库代码地址:https://github.com/linuxdeepin/dde-file-manager/blob/uos/dde-file-manager-lib/pkexec/com.deepin.pkexec.dde-file-manager.policy

下面开始整活儿~

大概能猜出就是这个文件让 pkexec 对话框显示了自定义文字。文管里大概搜索一下,在 /usr/share/polkit-1/actions 文件夹里找到了这个文件。然后怎么实验就很简单了,拿显卡切换插件的脚本举例,把文件位置action idicon_name提示文字换成自己的,文件名一改,然后丢进去。然后见证奇迹就完事儿了......



这波啊,这波直接起飞~

回复收藏只看作者
所有回复
忘记、过去
deepin^6
发表于2020-09-27 08:03
沙发
本帖最后由 zty199 于 2020-9-27 16:05 编辑

放一个修改出来的 com.deepin.pkexec.dde-dock-graphics-plugin.policy 参考一下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
  <vendor>zty199</vendor>
  <vendor_url>https://github.com/zty199/dde-do ... </vendor_url>
  <action id="com.deepin.pkexec.dde-dock-graphics-plugin.Intel">
    <message>Authentication is required to switch graphics card</message>
    <message xml:lang="zh_CN">切换显卡需要输入密码</message>
    <icon_name>deepin-graphics-driver-manager</icon_name>
    <defaults>
      <allow_any>no</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/opt/apps/dde-dock-graphics-plugin/files/bin/Intel.sh</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
  </action>
  <action id="com.deepin.pkexec.dde-dock-graphics-plugin.NVIDIA">
    <message>Authentication is required to switch graphics card</message>
    <message xml:lang="zh_CN">切换显卡需要输入密码</message>
    <icon_name>deepin-graphics-driver-manager</icon_name>
    <defaults>
      <allow_any>no</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/opt/apps/dde-dock-graphics-plugin/files/bin/NVIDIA.sh</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
  </action>

</policyconfig>


主要是 action id 应该是不能重复的,这个注意一下就行了。
icon_name 的话,只要是图标在 /usr/share/icons/对应主题 文件夹中,直接写文件名即可。如果不在的话可能可以写绝对路径?可以试试看。
sgb76
deepin^5
发表于2020-09-27 08:17
板凳
这个一定得赞一个,这样的分享希望更多一点,然后我们就可以白。。。哈哈哈哈
走钢丝
deepin^7
发表于2020-09-27 08:39
地板
mark。赶紧来学习一下。
gangzai0707
deepin^3
发表于2020-09-27 08:57
4楼
把这里全部改成yes,就可以不用输入密码了
忘记、过去
deepin^6
发表于2020-09-27 09:11
5楼
https://bbs.deepin.org/post/202966
把这里全部改成yes,就可以不用输入密码了

啊这也不是不行,就是感觉输入密码的乐趣没了
gangzai0707
deepin^3
发表于2020-09-27 09:14
6楼
https://bbs.deepin.org/post/202966
啊这也不是不行,就是感觉输入密码的乐趣没了

这样什么大神就不会吐槽你密码输入界面丑了
忘记、过去
deepin^6
发表于2020-09-27 09:23
7楼
本帖最后由 zty199 于 2020-9-27 17:25 编辑
https://bbs.deepin.org/post/202966
把这里全部改成yes,就可以不用输入密码了

算了,不改了,避免误操作了,就当留个后悔药。这个没有授权还是挺可怕的。
gangzai0707
deepin^3
发表于2020-09-27 09:58
8楼
https://bbs.deepin.org/post/202966
算了,不改了,避免误操作了,就当留个后悔药。这个没有授权还是挺可怕的。 ...

我现在用的15.11,把管理员权限打开文管设置的不用密码,感觉挺方便,其实也是被逼的,因为bug问题,录入过指纹,验证界面输入密码就会变成明文,现在一直想怎么取消指纹验证,或者怎么卸载指纹驱动
发布帖子

光荣榜

  • 周榜
  • 月榜
  • 总榜