我想用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. 如何在eclipse中运行php脚本
- 4. 如何在phpeclipse中运行php脚本
- 5. 如何在猪脚本中运行Mapreduce
- 6. 如何在bash脚本中运行sqlite3?
- 7. 如何在java中运行sql脚本
- 8. 如何在VB.Net中运行Powershell脚本
- 9. 如何在node.js中运行此脚本?
- 10. 如何在windows中运行python脚本
- 11. 如何在.wixproj中运行MSBuild脚本?
- 12. 如何在Firebase中运行PHP脚本?
- 13. 如何在PHP中运行shell脚本?
- 14. 如何在v-html中运行脚本
- 15. 如何在HTML中运行python脚本?
- 16. 如何在html中运行此脚本?
- 17. 如何在IIS中运行PowerShell脚本?
- 18. 如何在其他tcl脚本中运行tcl脚本?
- 19. 如何在Perl脚本中运行Perl脚本?
- 20. 如何运行Lua脚本?
- 21. 在脚本/运行器中运行EventMachine
- 22. 如何在脚本运行时启用执行脚本?
- 23. 在php中运行脚本
- 24. 在C#中运行脚本
- 25. 在ajax中运行脚本
- 26. 在.bashrc中运行脚本
- 27. 在EMS中运行脚本
- 28. 在脚本中运行IPython
- 29. 在FreeBSD中运行脚本
- 30. 如何让脚本在后台运行
可能重复[运行部分代码作为根](http://stackoverflow.com/questions/42779843/run-part-of-code-as-root) –