我想用root權限運行一個GUI。當用戶運行腳本時,應該打開一個彈出窗口,詢問root密碼,然後GUI會打開。我知道這可以通過pkexec完成。但我不知道如何在vala腳本中實現pkexec。短暫的,我想通過sudo權限運行我的應用程序。任何人都可以爲此提出解決方案嗎?如何在vala腳本中運行pkexec?
回答
只需從GLib.Process.spawn_async獲取示例代碼並修改它即可運行您的my_elevated_app
。
main.vala
(爲應作爲普通用戶運行的可執行代碼):
public static int main (string[] args) {
stdout.printf ("I am running as a normal user\n");
MainLoop loop = new MainLoop();
try {
string[] spawn_args = {"pkexec", "elevated_app", "arg1", "arg2"};
string[] spawn_env = Environ.get();
Pid child_pid;
Process.spawn_async ("/",
spawn_args,
spawn_env,
SpawnFlags.SEARCH_PATH | SpawnFlags.DO_NOT_REAP_CHILD,
null,
out child_pid);
ChildWatch.add (child_pid, (pid, status) => {
// Triggered when the child indicated by child_pid exits
Process.close_pid (pid);
loop.quit();
});
loop.run();
} catch (SpawnError e) {
stdout.printf ("Error: %s\n", e.message);
}
return 0;
}
elevated_main.vala
(爲應作爲根運行可執行代碼):
public static int main (string[] args) {
stdout.printf ("I am running as root\n");
return 0;
}
編譯兩個可執行文件像平常一樣:
valac -o my_app main.vala
valac -o my_elevated_app elevated_main.vala
請注意,上面的代碼必須首先安裝提升的可執行文件(即到/usr/local/bin/
或/usr/bin/
或者在你的PATH環境中的任何其他目錄),例如:
sudo install -m 755 my_elevated_app /usr/local/bin
當然,你可以改變的代碼在本地工作目錄中運行,但運行的是作爲根是很危險的,你應該始終確保您正在運行正確的可執行文件。一些開發者甚至只允許一個特定的文件名(如/usr/bin/my_elevated_app
)。
當您現在運行時,應該通過pkexec
提示您輸入密碼並在成功驗證後應啓動my_elevated_app
進程。
如果一切都按預期你會看到這樣的輸出:
$ ./my_app
I am running as a normal user
I am running as root
以上兩種應用的是控制檯應用程序,但同樣的事情應該GUI工作的應用程式以及(剛創建的Gtk您的Windows作爲通常等)。
感謝您的answering.Apparently我的elevated_gui_app是應用程序我在運行兩個vala腳本(main.vala和main1.vala)後得到的。那麼,如何在上面的示例代碼中調用這些腳本(或編譯並運行這兩個腳本後的應用程序)? –
我澄清了我的答案。請不要在vala的上下文中使用術語'script','.vala'文件被稱爲'源文件',編譯後的結果稱爲'application'(或簡稱'app')。好的,在技術上是100%正確的,我們應該把它稱爲'可執行文件'。 –
源文件的內容稱爲「源代碼」(簡稱「代碼」)。運行'。/ my_app'時出現錯誤 –
- 1. 如何從cron運行的Perl腳本中運行shell腳本?
- 2. 如何在bash腳本中串行運行sql腳本?
- 3. 如何在python中運行腳本
- 4. 如何在楓樹中運行腳本?
- 5. 如何在.wixproj中運行MSBuild腳本?
- 6. 如何在PHP中運行shell腳本?
- 7. 如何在windows中運行python腳本
- 8. 如何在IIS中運行PowerShell腳本?
- 9. 如何在豬腳本中運行Mapreduce
- 10. 如何在PySpark中運行腳本
- 11. 如何在HTML中運行python腳本?
- 12. 如何在eclipse中運行php腳本
- 13. 如何在html中運行此腳本?
- 14. 如何在java中運行sql腳本
- 15. 如何在bash腳本中運行sqlite3?
- 16. 如何在tsql中運行SQL腳本
- 17. 如何在phpeclipse中運行php腳本
- 18. 如何在v-html中運行腳本
- 19. 如何在maven中運行powershell腳本
- 20. 如何在node.js中運行此腳本?
- 21. 如何在Python中運行TCL腳本?
- 22. 如何在powershell中運行cygwin腳本
- 23. 如何在shell腳本中運行SQL
- 24. 如何在VB.Net中運行Powershell腳本
- 25. 如何在Firebase中運行PHP腳本?
- 26. 如何在java中運行groovy腳本?
- 27. 如何在Applescript中運行python腳本?
- 28. 如何在geany中運行sql腳本?
- 29. 在powershell腳本中運行python腳本
- 30. 在ksh shell腳本中運行腳本
可能重複[運行部分代碼作爲根](http://stackoverflow.com/questions/42779843/run-part-of-code-as-root) –