在ubuntu 11.04中没有密码的系统关闭

时间:2012-04-10 10:10:28

标签: linux qt ubuntu ubuntu-11.04

我正在编写一个有关机按钮的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);

3 个答案:

答案 0 :(得分:3)

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

<username> ALL = NOPASSWD: /sbin/shutdown

HTH

答案 1 :(得分:2)

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

只需与系统的其余部分保持良好状态,让shutdown向用户询问他的密码。

答案 2 :(得分:1)

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

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