在Qt中以root身份执行Linux命令

时间:2011-08-12 06:54:46

标签: c++ linux qt command

我想从我的C ++ / Qt代码中以root用户身份执行linux命令。 最终应该实现一个请求root pass的对话框,但是对于no,我可以硬编码root密码。

这是我到目前为止所做的:

QProcess p;
p.start( "dmidecode" );
p.waitForFinished(-1);

QString p_stdout = p.readAllStandardOutput();
QString p_stderr = p.readAllStandardError();

它适用于不请求root权限的命令。但我想实现像“zypper up”或“dmidecode”这样的命令,如果没有root密码我就无法执行。

可能可以使用void QProcess::setEnvironment ( const QStringList & environment )完成某些事情吗?

由于

3 个答案:

答案 0 :(得分:1)

如果您作为普通用户运行,则无法提升您的权限,除非您是suid,这可能是整个应用程序所不需要的。
它的方式是通过外部帮助者;你想要的东西是sudo不是su在Ubuntu中根帐户被锁定; gksudo或kdesudo取决于运行环境。其中一个应该预先安装在任何现代Linux发行版上,或者你可以在你的应用程序中部署一个副本 当然,如果当前用户没有通过sudo运行内容的权限,它将无法工作,但这是一种正常的安全措施,你不应该解决它。

答案 1 :(得分:0)

将规则添加到特殊用户的sudoers列表中,并以此用户身份执行命令:

sudo *some command*

您可以使用system()QProcess

要了解如何将规则添加到sudoers列表,请参阅sudoers manual

答案 2 :(得分:0)

如何继续使用你的代码,但为你的应用程序制作一个shell脚本并将其放在/ usr / bin上?我做到了,每次都运作良好。

#it is the shell script code
#!/bin/bash
gksudo /usr/lib/your_qt_app

简单地说,您只需要调用shell脚本文件即可。将其命名为 myscript 并打开您的bash。输入:

myscript

注意上面的 gksudo 命令。该命令将您提升为root。我不知道比这更简单的答案。也许它没有帮助,但我用这种方式。