云网牛站
所在位置:首页 > Linux编程 > 在Deepin 20下用普通用户执行脚本时弹窗要求输入管理密码

在Deepin 20下用普通用户执行脚本时弹窗要求输入管理密码

2020-09-26 09:33:06作者:enforcee稿源:深度站

下面所要实现的效果是在Deepin 20下用普通用户执行脚本时,自动的弹窗出来,要求你输入正确的管理密码才能进行下去,同时当你sudo或者以root用户执行时就直接进行。该bash脚本也可用在其他Linux发行版上。

在Deepin 20下用普通用户执行脚本时弹窗要求输入管理密码

 

适合以下用途

1.把脚本绑定到键盘快捷键上。

2.把脚本绑定到启动器上。

3.各种需要root执行脚本但是不希望弹出一个不严谨的终端窗口输入密码的情况。

 

实际操作演说

首先我们知道在GNU/Linux桌面弹窗获取密码的命令是:

pkexec

大家可以试试用这个命令代替sudo,它是freedesktop的标准,在符合标准的各大桌面都能用。

然后脚本的第一行#!(shebang符号)表示的是脚本解释器,那么第一种简单的解决方法就来啦。

在Deepin 20下用普通用户执行脚本时弹窗要求输入管理密码

第一行写:

#!/bin/pkexec /bin/bash

然后按正常脚本写就行了。

但是这样看起来他简单了,无法体现读者一个bash大神的修养。另外缺陷就是如果需要root命令前后用当前普通用户身份执行命令,刚才那个脚本就不适合了。

比如说我想用notify-send命令给我的桌面发送通知,但是你要用root发送的话,那不就发给root了嘛,自己是收不到的。

因此我们想到用whoami可以判断当前用户的身份(大家自己试试在终端输入whoami和sudo whoami有什么区别),参考whoami命令_Linux whoami命令使用详解:打印当前有效的用户名称

那么我们就在开头来一判断,如果是root就直接执行,如果是普通用户就pkexec执行不就完啦。

于是我们有这个脚本(bash基础不好的话可以补一补基础,先把答案给大家看)。

在Deepin 20下用普通用户执行脚本时弹窗要求输入管理密码

重点是第7行,因为在bash里$加数字表示获取传入参数,而第0个参数必定是执行的脚本本身。这样写就是在普通用户执行脚本时,获取root权限然后再“递归”执行脚本,这时身份是root,自然就进入第一个分支啦。

然后容易出错的地方是if的写法,bash的if写法着实离奇,我最初学习bash的时候怎么看怎么不顺眼,觉得他又丑又容易错。

if 左方括号 左边 等号 右边 右方括号之间都要用空格隔开(后面还要写then,换行或者加;隔开,最后还要fi)。

后来才知道,原来(左方括号)[是一个程序(不信大家自己ls /bin)。

现在看这个命令真是合情合理,又鬼斧神工。

最后不要忘了,右键属性权限管理,勾上“允许以程序执行”,然后就可以运行啦。

下图是一个示范,用脚本更新系统:

在Deepin 20下用普通用户执行脚本时弹窗要求输入管理密码

 

相关主题

破解本地Deepin系统root密码的方法

精选文章
热门文章