在開發(fā)Linux桌面軟件的時候,我們有時候需要用其他用戶的身份執(zhí)行一些操作,通常是root用戶。
- 方法一:sudo命令
echo "passwd" | sudo -S gedit
sudo的-S選項是從標(biāo)準(zhǔn)輸出流讀取密碼,如果使用這種方法不能調(diào)出上面的彈窗。你可以自己寫一個彈窗,如果這樣,在索要用戶權(quán)限的時候,程序就可以獲得用戶的密碼了(用戶可能會質(zhì)疑),不推薦。 -
方法二:polkit
如圖所示:
深度截圖_deepin-graphics-driver-manager_20180905202415.png
常見到吧,這個是怎么調(diào)用出來的呢?
常見的Linux發(fā)行版都有polkit模塊,deepin也開發(fā)了一套,dde-polkit-agent是遵守freedesktop規(guī)范的。
我們只要配置好規(guī)則文件然后在終端執(zhí)行:
pkexec [可執(zhí)行文件]
就可以看到這個授權(quán)窗口了
- 配置文件
以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>
<!-- 權(quán)限ID,這個必須唯一 -->
<action id="com.deepin.pkexec.dde-file-manager">
<!-- 圖標(biāo) 這個我不知道存在哪里,再研究研究-->
<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節(jié)點下的所有子節(jié)點可以有這些值no,yes,auth_self,auth_admin,auth_self_keep,auth_admin_keep -->
</defaults>
<!-- 語言為簡體中文時的彈窗提示 -->
<message xml:lang="zh_CN">查看文件夾需要輸入密碼</message>
<!-- 權(quán)限提升的可執(zhí)行文件,需是二進制文件 -->
<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>
只需要根據(jù)你的需要創(chuàng)建一份這樣的文件(以policy結(jié)尾),然后保存到/usr/share/polkit-1/action這個目錄下。
可以執(zhí)行pkaction查看現(xiàn)有的policy
- 調(diào)出彈窗
在終端執(zhí)行
pkexec [二進制可執(zhí)行文件]
當(dāng)然,根據(jù)上述配置文件,應(yīng)該是
pkexec /usr/bin/dde-file-manager
Tips: 如果要給腳本提權(quán)怎么辦呢,我們就需要借助一個shell解釋器——它是一個二進制的可執(zhí)行文件,我們選用/bin/bash,先給bash創(chuàng)建一個policy文件[deepin不用創(chuàng)建,已經(jīng)有了],然后執(zhí)行
pkexec /bin/bash -x [腳本]
將腳本作為bash的參數(shù)【在deepin下執(zhí)行有個副作用,因為深度顯卡驅(qū)動管理器的腳本提權(quán)用到了bash,所以會顯示驅(qū)動管理器的圖標(biāo)和提示】
參考:
freedestop的polkit介紹
freedesktop的pkexec介紹
https://segmentfault.com/a/1190000008063961
