美文网首页deepin
Linux授权弹窗:polkit

Linux授权弹窗:polkit

作者: Daryl_Xu | 来源:发表于2018-09-05 22:12 被阅读143次

    在开发Linux桌面软件的时候,我们有时候需要用其他用户的身份执行一些操作,通常是root用户。

    • 方法一:sudo命令
      echo "passwd" | sudo -S gedit
      sudo-S选项是从标准输出流读取密码,如果使用这种方法不能调出上面的弹窗。你可以自己写一个弹窗,如果这样,在索要用户权限的时候,程序就可以获得用户的密码了(用户可能会质疑),不推荐。
    • 方法二:polkit
      如图所示:


      深度截图_deepin-graphics-driver-manager_20180905202415.png

      常见到吧,这个是怎么调用出来的呢?

    常见的Linux发行版都有polkit模块,deepin也开发了一套,dde-polkit-agent是遵守freedesktop规范的。
    我们只要配置好规则文件然后在终端执行:
    pkexec [可执行文件]
    就可以看到这个授权窗口了

    1. 配置文件
      以deepin的/usr/share/polkit-1/actions/com.deepin.pkexec.dde-file-manager.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>Deepin</vendor>
      <vendor_url>https://www.deepin.com</vendor_url>
      <-- 权限ID,这个必须唯一 -->
      <action id="com.deepin.pkexec.dde-file-manager">
        <-- 图标 这个我不知道存在哪里,再研究研究-->
        <icon_name>folder</icon_name>
        <-- 弹窗提示 -->
        <message>Authentication is required to run the Deepin File Manager</message>
        <defaults>
          <allow_any>no</allow_any>
          <allow_inactive>no</allow_inactive>
          <allow_active>auth_admin_keep</allow_active>
          <-- 这个defaults节点下的所有子节点可以有这些值no,yes,auth_self,auth_admin,auth_self_keep,auth_admin_keep -->
        </defaults>
        <-- 语言为简体中文时的弹窗提示 -->
        <message xml:lang="zh_CN">查看文件夹需要输入密码</message>
        <-- 权限提升的可执行文件,需是二进制文件 -->
        <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/dde-file-manager</annotate>
        <-- 这行听说是是否允许GUI,但是测试的时候好像不起作用 -->
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
      </action>
    </policyconfig>
    

    只需要根据你的需要创建一份这样的文件(以policy结尾),然后保存到/usr/share/polkit-1/action这个目录下。
    可以执行pkaction查看现有的policy

    1. 调出弹窗
      在终端执行
      pkexec [二进制可执行文件]
      当然,根据上述配置文件,应该是
      pkexec /usr/bin/dde-file-manager

    Tips: 如果要给脚本提权怎么办呢,我们就需要借助一个shell解释器——它是一个二进制的可执行文件,我们选用/bin/bash,先给bash创建一个policy文件[deepin不用创建,已经有了],然后执行
    pkexec /bin/bash -x [脚本]
    将脚本作为bash的参数【在deepin下执行有个副作用,因为深度显卡驱动管理器的脚本提权用到了bash,所以会显示驱动管理器的图标和提示】

    参考:
    freedestop的polkit介绍
    freedesktop的pkexec介绍
    https://segmentfault.com/a/1190000008063961

    相关文章

      网友评论

      • Rekols:深度编辑器就高端了 不需要输入密码:smirk:
        Daryl_Xu::smirk: <allow_active>yes</allow_active>这样吗?

      本文标题:Linux授权弹窗:polkit

      本文链接:https://www.haomeiwen.com/subject/ccezwftx.html