2

シャットダウン ボタンを持つ QT アプリケーションを作成しています。このボタンでシステムをシャットダウンしたいのですが、シェル コマンド「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 ファイルにあることを確認してください。visudosudoers ファイルを変更し、次のようなものを追加するために使用します。

<username> ALL = NOPASSWD: /sbin/shutdown

h番目

于 2012-04-10T12:21:31.113 に答える
2

gksudo/kdesudoを呼び出すことを見てくださいreboot。そのうちの1つはほとんどのLinuxインストールにあるはずです。これらは単純なラッパーであり、ユーザーにパスワードを要求して、またはに昇格する権限を確認rootします。この場合は、rebootまたはに電話をかけますshutdown

システムの残りの部分でうまく遊んでshutdown、ユーザーにパスワードを尋ねましょう。

于 2012-04-10T12:13:06.860 に答える
1

シェル コマンドを呼び出す代わりに、reboot を直接呼び出して、システムを停止または再起動できます。「man 2 再起動」を参照してください。ただし、ユーザーが CAP_SYS_BOOT 機能を持っていない場合は、引き続きアクセス許可エラーが発生します。上記のコメントで説明されているように、sudo または suid バイナリを使用すると、この機能 (およびそれ以上) を取得できます。

setcap プログラムなどを使用して、バイナリの CAP_SYS_BOOT 機能を設定することもできます。これは、プログラムを再コンパイルするたびに行う必要があり、sudo を使用して setcap を使用する必要があることに注意してください。

于 2012-04-10T11:53:31.907 に答える