云网牛站
所在位置:首页 > Linux教程 > 在deepin系统下使用pkexec的经验谈

在deepin系统下使用pkexec的经验谈

2020-09-28 10:44:29作者:zty199稿源:深度站

本文介绍在deepin系统下使用pkexec的经验谈,同时附上修改的com.deepin.pkexec.dde-dock-graphics-plugin.policy供学习参考。

 

使用pkexec的经验谈

前言提要:记得刚开始魔改显卡切换插件的时候,因为外部脚本调用的时候要用到sudo(sudo命令_Linux sudo命令使用详解:以其他身份来执行命令),但是QProcess执行脚本怎么输入密码是个大问题,一开始使用deepin-terminal -e执行脚本,用终端输入密码。结果被shenmo吐槽丑陋得很。

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

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

官方仓库代码地址

在deepin系统下使用pkexec的经验谈

下面开始操作这个。

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

在deepin系统下使用pkexec的经验谈

 

修改的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-dock-switch_graphics_card</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/对应主题文件夹中,直接写文件名即可。如果不在的话可能可以写绝对路径?可以试试看。

另外,把下图所示的位置全部改成yes,就可以不用输入密码了:

在deepin系统下使用pkexec的经验谈

如果你需要输入密码来保障一下,可以再改回原来的。

 

相关主题

在Deepin V20文件管理器中增加在管理员身份终端中打开选项

精选文章
热门文章