qt代码运行linux命令,关于C ++:在Qt中以root身份执行Linux命令

我想从我的C ++ / Qt代码中以root用户身份执行linux命令。

最终应该实现一个对话框,要求输入root密码,但是我不能硬编码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 )可能可以做些什么?

谢谢

我相信仅靠Qt不能做到(以一种标准的或至少是标准化的方式)。 尽管在KDE中有一种标准方法。 尝试搜索他们的文档。

您需要使用桌面管理器界面以root身份运行命令。 对于ubuntu,您可以使用gksudo作为密码界面。

如果您以普通用户身份运行,则不能提升特权,除非您是suid,而您可能不需要整个应用程序。

它的完成方式是通过外部帮助程序。您想要执行sudo not 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用户。我不知道比这更简单的答案。也许没有帮助,但我使用这种方式。

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

sudo *some command*

您可以为此使用system()或QProcess。

要查看如何向sudoers列表中添加规则,请参见sudoers手册

是否有一个无需创建其他用户的更优雅的解决方案?

@sivic不要创建其他用户,而是将当前用户添加到sudoers列表中,并允许他们执行只有root才能执行的某些命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值