【整活时间】如何更优雅地使用 pkexec
Tofloor
poster avatar
忘记、过去
deepin
2020-09-27 23:56
Author
本帖最后由 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提示文字换成自己的,文件名一改,然后丢进去。然后见证奇迹就完事儿了......



这波啊,这波直接起飞~

Reply Favorite View the author
All Replies
忘记、过去
deepin
2020-09-28 00:03
#1
本帖最后由 zty199 于 2020-9-27 16:05 编辑

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


"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">

  zty199
  https://github.com/zty199/dde-do ...
  .Intel">
    Authentication is required to switch graphics card
    切换显卡需要输入密码
    deepin-graphics-driver-manager
   
      no
      no
      auth_admin_keep
   

    /opt/apps/dde-dock-graphics-plugin/files/bin/Intel.sh
    true
  
  .NVIDIA">
    Authentication is required to switch graphics card
    切换显卡需要输入密码
    deepin-graphics-driver-manager
   
      no
      no
      auth_admin_keep
   

    /opt/apps/dde-dock-graphics-plugin/files/bin/NVIDIA.sh
    true
  




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

啊这也不是不行,就是感觉输入密码的乐趣没了
Reply View the author
gangzai0707
deepin
2020-09-28 01:14
#6
https://bbs.deepin.org/post/202966
啊这也不是不行,就是感觉输入密码的乐趣没了

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

算了,不改了,避免误操作了,就当留个后悔药。这个没有授权还是挺可怕的。
Reply View the author
gangzai0707
deepin
2020-09-28 01:58
#8
https://bbs.deepin.org/post/202966
算了,不改了,避免误操作了,就当留个后悔药。这个没有授权还是挺可怕的。 ...

我现在用的15.11,把管理员权限打开文管设置的不用密码,感觉挺方便,其实也是被逼的,因为bug问题,录入过指纹,验证界面输入密码就会变成明文,现在一直想怎么取消指纹验证,或者怎么卸载指纹驱动
Reply View the author
风吹过的绿洲
deepin
2024-08-20 23:57
#9

image.png

我写的有问题吗,为啥没反应呢
image.png

Reply View the author
忘记、过去
deepin
2024-08-21 09:10
#10
风吹过的绿洲

image.png

我写的有问题吗,为啥没反应呢
image.png

annotate key 里面写的内容似乎要和命令行匹配才能识别,你这样写的话命令行只能用 pkexec timeshift-gtk 启动?


看了下,我这里从仓库安装的 timeshiftpkexec timeshift-gtk 是没问题的,可以直接弹出鉴权对话框,没有报找不到显示器错误。

而且 timeshift 软件包里已经有 /usr/share/polkit-1/actions/in.teejeetech.pkexec.timeshift.policy 这个 polkit 文件了,终端执行 timeshift-launcher 就可以调出鉴权对话框正常启动了。

Reply View the author
风吹过的绿洲
deepin
2024-08-21 21:29
#11
忘记、过去

annotate key 里面写的内容似乎要和命令行匹配才能识别,你这样写的话命令行只能用 pkexec timeshift-gtk 启动?


看了下,我这里从仓库安装的 timeshiftpkexec timeshift-gtk 是没问题的,可以直接弹出鉴权对话框,没有报找不到显示器错误。

而且 timeshift 软件包里已经有 /usr/share/polkit-1/actions/in.teejeetech.pkexec.timeshift.policy 这个 polkit 文件了,终端执行 timeshift-launcher 就可以调出鉴权对话框正常启动了。

我试了一下,主要因为加了环境env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY,匹配不上policy了。

我在policy里面path前面也加上env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY似乎不行。

所以我增加了一层sh文件,现在可以了。感谢大牛的分享

image.png

image.png

其他的都是可以的
image.png

image.png

image.png

Reply View the author