在qt程序中執行腳本文件 完成系統重啓動

                                                                  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;
}

參考:QT下實現對Linux Shell調用的幾種方法

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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章