To the time To life ,rather than to life in time.
给时光以生命, 而非给生命以时光
1)首先,可以用如下的方法来在qt代码中调用一个可执行的脚本文件:
#include <QProcess>
int main()
{
QProcess::execute("ls"); //双引号中可以是你的脚本文件路径eg "/home/abc/rebo"
return 0;
}
2)写一个脚本文件,假设名字为rebo:
#!/bin/sh
#first
sudo reboot
exit 0
使用chmode +x rebo 给该文件增加可执行权限。
然后,将该文件的拥有着改为root, sudo chown root rebo
然后,给该文件添加SUID权限 chmod u+s rebo
最后,需要修改/etc/sudoers文件,来设置哪些用户可以使用sudo命令,哪些用户使用sudo命令时可以不输入密码。否则,可能会出现下面的错误提示:sudo: no tty present and no askpass program specified。 修改方法是:在文件的最后添加一行:
abc ALL = NOPASSWD: ALL ,其中abc为用户名。
注意:
1)给文件赋予SUID权限之前,该文件一定要有可执行权限(x)。
2)如果你在编辑/etc/sudoers文件时,不小心编辑错了,例如多打了几个字符,这会导致你不能再使用sudo指令,你输入sudo时会出现下面的提示:
我用网上的这个方法解决了:啦呜啦: 直接使用指令 pkexec visudo 进入文件编辑,对于刚才修改错误的地方,直接修改,保存退出后OK了。保存的方法:Ctrl+O,在页面最下方有提示。
Ref:
https://www.cnblogs.com/iaknehc/p/6881517.html -- 文件添加SUID权限
https://blog.csdn.net/a_little_a_day/article/details/78282983
https://blog.csdn.net/weiyi556/article/details/78980139