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