我正在编写一个有关机按钮的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);
答案 0 :(得分:3)
确保运行该进程的用户位于sudoers文件中。
使用visudo
更改sudoers文件并添加如下内容:
<username> ALL = NOPASSWD: /sbin/shutdown
HTH
答案 1 :(得分:2)
查看通过gksudo
/ kdesudo
来调用reboot
,其中一个应该是在大多数Linux安装上。
它们是简单的包装器,它会要求用户输入密码以确认提升权限root
,并在您的情况下调用reboot
或shutdown
。
只需与系统的其余部分保持良好状态,让shutdown
向用户询问他的密码。
答案 2 :(得分:1)
您可以直接调用reboot来暂停或重启系统,而不是调用shell命令。请参阅“man 2 reboot”。但是,如果用户没有CAP_SYS_BOOT功能,您仍会收到权限错误。使用sudo或suid二进制文件,如上面的评论中所述,您将获得此功能(以及更多)。
您还可以使用setcap程序或类似程序为二进制文件设置CAP_SYS_BOOT功能。请记住,每次重新编译程序后都必须这样做,并且必须使用sudo来使用setcap。