如何以根权限启动QProcess

How to launch a QProcess with root rights?

本文关键字:启动 QProcess 权限      更新时间:2023-10-16

我需要从Qt程序启动gphoto2。我这样做:

QString gphotoProgram = "/usr/bin/gphoto2";
QStringList gphotoArguments;
gphotoArguments << "--capture-image";
QProcess *gphotoProcess = new QProcess(this);
gphotoProcess->start(gphotoProgram, gphotoArguments);

但是它永远不会以这种方式进入Running状态,因为gphoto2通常需要管理员权限才能在命令行上启动。

我如何启动这个QProcess与适当的权利,使gphoto2工作?

编辑:我确切地说,我希望用户不必输入密码,这意味着gksudo, kdesudo或任何其他图形解决方案对我来说都不是一个有效的选择。

我强烈建议找到一种方法,允许gphoto2在登录用户的权限下运行。也许这篇文章有一些有用的信息。

如果您的发行版启用了sudo,请尝试在进程的命令行中添加"gksudo":

QString gphotoProgram = "gksudo /usr/bin/gphoto2"

如果用户帐户被授权为sudo-er,它将询问用户密码,以便程序可以以root权限运行。

您也可以使用PolicyKit以sudo权限启动QProcess

pkexec命令

QString gphotoProgram = "pkexec/usr/bin/gphoto2";

难道GNOME和KDE没有自己的图形sudo包装器吗?(我自己就是Windows用户。)您可以使用QProcess来启动"sudo",并让它来处理仰角和随后的gphoto启动。