我想从我的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 )
可以完成一些事情吗?
谢谢
如果您以普通用户身份运行,则无法提升您的权限,除非您是suid,这可能是整个应用程序可能不需要的。 它的方式是通过外部帮助者;你想要的东西是sudo不是su在Ubuntu中根帐户被锁定; gksudo或kdesudo取决于运行环境。其中一个应该预先安装在任何现代Linux发行版上,或者您可以在应用程序中部署一个副本。 当然,如果当前用户没有权限通过sudo运行东西,它将无法工作,但这是一种正常的安全措施,你不应该解决它。
如何继续使用你的代码,但为你的应用程序制作一个shell脚本并将其放在/ usr / bin上?我做到了,每次都运作良好。
#it is the shell script code
#!/bin/bash
gksudo /usr/lib/your_qt_app
不仅仅是你需要调用shell脚本文件。将其命名为myscript并打开你的bash。输入:
myscript
注意上面的gksudo命令。该命令将您提升为root。我不知道答案比这更简单。也许它没有帮助,但我用这种方式。