2

我正在编写一个带有关闭按钮的 QT 应用程序。我想用这个按钮关闭系统,但是当我使用 shell 命令“shutdown -h now”时,系统要求输入密码。
我想在没有密码的情况下关机。

我的QT代码是:

QObject *parent;
myProcess = new QProcess(this);
QString command= "sudo shutdown";
QStringList arguments;
arguments << "-h " << "now"  ;
myProcess->start(command,arguments);
4

3 回答 3

3

确保运行该进程的用户位于 sudoers 文件中。用于visudo更改 sudoers 文件并添加如下内容:

<username> ALL = NOPASSWD: /sbin/shutdown

hth

于 2012-04-10T12:21:31.113 回答
2

看看通过gksudo/kdesudo调用reboot,其中之一应该在大多数 Linux 安装上。它们是简单的包装器,会要求用户输入密码以确认提升权限root,在您的情况下,调用rebootshutdown.

只需与系统的其余部分配合使用,然后shutdown向用户询问他的密码即可。

于 2012-04-10T12:13:06.860 回答
1

您可以直接调用 reboot 来暂停或重新启动系统,而不是调用 shell 命令。请参阅“man 2 重启”。但是,如果用户没有 CAP_SYS_BOOT 能力,您仍然会收到权限错误。使用 sudo 或 suid 二进制文件,如上面评论中所述,您将获得此功能(以及更多)。

您还可以使用 setcap 程序或类似程序为您的二进制文件设置 CAP_SYS_BOOT 功能。请记住,每次重新编译程序后都必须这样做,并且您必须使用 sudo 才能使用 setcap。

于 2012-04-10T11:53:31.907 回答