2012-04-10 14 views
2

私はシャットダウンボタンがあるQTアプリケーションを書いています。私はこのボタンでシステムをシャットダウンしたいが、シェルコマンド "shutdown -h now"を使うと、システムはパスワードを要求する。
パスワードなしでシャットダウンします。ubuntu 11.04でパスワードなしのシステムシャットダウン

私のQTのコードは次のとおりです。

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

はあなたが権限について考えたことがありますか?あなたのプログラムをsetuid(悪い考え方)にするか、 '/ sbin/shutdown'をsetuid(悪い考え方)にするか、現在のユーザを'/etc/sudoers'ファイルに追加して、 'sudo/sbin/shutdown'をプログラム(面倒)。 – trojanfoe

答えて

3

プロセスを実行しているユーザーがsudoersファイルにあることを確認します。 使用visudo sudoersファイルを変更し、次のようなものを追加する:

<username> ALL = NOPASSWD: /sbin/shutdown 

HTH

+0

このコマンドに問題がある人は、おそらくsudoersファイルのLAST行にする必要があります。後に他のコマンドがあると、おそらく干渉します。 – TrentCoder

+0

また、/ etc/sudoersに以下を追加する必要があります デフォルトexempt_group =

1

の代わりに、あなたがシステムを停止または再起動する直接、再起動を呼び出すことができシェルコマンドを呼び出します。 「man 2の再起動」を参照してください。しかし、ユーザがCAP_SYS_BOOT機能を持たない場合でも、パーミッションエラーが発生します。上記のコメントで説明したように、sudoまたはsuidバイナリを使用すると、この機能が利用できます。

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

2

/kdesudorebootの呼び出しについては、そのうちの1つがほとんどのLinuxインストールにある必要があります。 彼らは昇格特権を確認するパスワードをユーザに聞いてrootに、あなたの場合はまたはshutdownに電話する単純なラッパーです。

システムの残りの部分でniceを再生して、shutdownにパスワードを尋ねます。

関連する問題