我想从我的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 )
完成某些事情吗?
由于
答案 0 :(得分:1)
如果您作为普通用户运行,则无法提升您的权限,除非您是suid,这可能是整个应用程序所不需要的。
它的方式是通过外部帮助者;你想要的东西是sudo不是su在Ubuntu中根帐户被锁定; gksudo或kdesudo取决于运行环境。其中一个应该预先安装在任何现代Linux发行版上,或者你可以在你的应用程序中部署一个副本
当然,如果当前用户没有通过sudo运行内容的权限,它将无法工作,但这是一种正常的安全措施,你不应该解决它。
答案 1 :(得分:0)
答案 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。我不知道比这更简单的答案。也许它没有帮助,但我用这种方式。