web-dev-qa-db-ja.com

GUIから「シャットダウン」を押すとどうなりますか?

私はかなり長い間、これに頭をぶつけてきました。 この質問 に関連しています。 GUIからLinuxボックスをシャットダウンすることを選択したときに何が起こるかを正確に知りたいです。これは(たとえあったとしても)十分に文書化されていないようです。

理想的には、DEおよびOSにとらわれない答えを期待しています。それがなければ、Mandriva 2010.1とDebian 6.x(Squeeze)と7.0(Wheezy)のすべてがGnomeを実行している特定のケースに興味があります。 (細心の注意を払っている場合は、そうです、それはGnome2とGnome3です)

基本的に、「シャットダウン」または「再起動」を押したときにどのコマンド/スクリプト/スクリプトのシーケンスが開始されるかを知りたいので、それらの動作を変更できます。私が見たいくつかのフォーラム投稿はハッキング/etc/polkit-1/*を提案していますが、このディレクトリ構造は、たとえば、私のDebian(Squeeze)ボックスのスケルトンにすぎません。

誰か助けてもらえますか?


[〜#〜]編集[〜#〜]

これまでに試したこと

  • shutdown実行可能ファイルを独自のスクリプトに置き換えました。これは機能しません。shutdownを押すと、Gnomeはスクリプトを実行せずにログアウトします。
  • Gnome 2メニューの編集を試みました。喜びがない:[シャットダウン]、[ログアウト]、および[画面のロック]オプションはメニューエディターに表示されません。
  • /usr/share/menuを見て、何も役に立たなかった。

解決策の可能な方法

  • straceing GUIオプション(これは可能ですか?)
  • shutdownのソースコードを見る
  • gnome-sessionのソースコードを見る

更新

以下の回答に対する私のコメントによると、私は/usr/share/polkit-1/actions/の下のpolkitアクションを調べ、(ファイルorg.freedesktop.consolekit.policyで)メッセージをスローするorg.freedesktop.consolekit.system.stop-multiple-usersというアクションを見つけました。

System policy prevents stopping the system when other users are logged in

org.freedesktop.*命名規則により)これは、D-BUS経由でDMに送信されるある種の信号であると考えています。さらに、シャットダウンしようとするとこのメッセージが表示されます他のユーザーがログインしている間にグラフィカルに表示されるため、それをトリガーするメカニズムは、GUIから「シャットダウン」または「電源オフ」が選択されたときにトリガーされるメカニズムと同じでなければなりません。

誰でも確認/反駁できますか?この信号を何らかの方法で傍受または変更する可能性はありますか?

15
Joseph R.

ディスプレイマネージャーによって異なります。 (つまり、KDM、GDM)

DMはrootとして実行されます!(ログインしたユーザーとしてセッションプロセスを実行するには、root権限が必要です)を覚えておいてください。

KDEまたはGNOMEでシャットダウンをクリックすると、DEはDM=に信号を送信し、セッションの終了後に電源をオフにするか再起動します。次に、DEはすべてのプログラムを終了し、他のすべてのプログラムに1プロセスが終了した(またはタイムアウトの期限が切れた)、DEの最後のプロセス-セッションプロセス-が終了します。

セッションプロセスは、X11セッションで開始される最初のプロセスです。強制終了または終了すると、セッションが終了します。 DEなしでXを実行しているときにそのxtermを見たことがありますか?それがセッションプロセスです。このプロセスは、KDEではkdeinitと呼ばれ、gnome-session GNOMEで。

セッションが終了すると、制御はあなたのDM(Xプロセスが終了するのを待っていた)に戻り、DEが彼に何をするように言ったかをチェックします。電源をオフにするか、再起動すると、それが行われます。

これは、過去に発生した可能性がある問題にも関連しています。一部のDEは、他のDMと組み合わせて使用​​すると、ログオフするだけで電源をオフにしたり再起動したりできません。

いずれにせよ、これはそれほど悪い文書化されていません。 GDMには、コマンドのマニュアルページ「gdm-control(1)」があり、前に言ったようにシャットダウンするように指示できます(gdm-control)。 KDMには 優れたドキュメント もあり、kdmctlという名前の同様の(もう少し複雑な)ユーティリティがあります。


PolicyKitがなくてもシャットダウンと再起動は可能ですが、PolicyKitは、コンピューターをルート化、一時停止、休止状態にすることなくディスクをマウントするなど、今日のシステムで必要とされる多くの目的を果たします。そして、どちらも悪い文書化されていません!

PolicyKitとは何か、およびそれがどのように機能するかについて詳しく知りたい場合は、これをチェックしてください: http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html

9
Alicia