web-dev-qa-db-ja.com

電源ボタンはroot権限なしでどのようにコンピューターをシャットダウンしますか?

コマンドラインまたはターミナルからコンピューターをシャットダウンしようとすると、root権限が必要です。

amy@amy:~$ shutdown now
shutdown: Need to be root

そして

amy@amy:~$ halt
halt: Need to be root

しかし、グラフィカルユーザーインターフェイス(シャットダウンボタン、またはハードウェアシャットダウンボタン)を使用してシャットダウンするときは、パスワードを要求されません。グラフィカルインターフェイスのシャットダウンとは何ですか?なぜパスワードやルート権限が必要ないのですか?

私はUbuntu 11.04 Nattyを使用しています。

36
amyassin

ハードウェア電源ボタンは、acpid(ACPIデーモン)が通知して反応するACPIイベントをトリガーします。この場合、システムをシャットダウンしますが、必要に応じてシステムをシャットダウンできます。 ACPIデーモンはrootとして実行されるため、システムをシャットダウンする権限があります。デスクトップ環境(例:Gnomeの場合はgdm)もrootとして実行されるため、同じように動作すると思われます。システムをシャットダウンする権限はありませんが、gdmあなたはそれをシャットダウンしたいのですが、あなたに代わってそれを行うことができます

33
Michael Mrozek

Michaelの回答では、ハードウェア電源スイッチを使用する場合のシステム機能について正しく説明していますが、ほとんどのデスクトップ環境では、実際にこの目的でdbusを使用するのではなく、実際に使用しています。たとえば、GNOMEでは、シャットダウンボタンがクリックされたときにdbusorg.freedesktop.Hal.Device.SystemPowerManagement.Shutdownを使用します。これが送信されると、dbusはいくつかのチェックを実行して、メッセージを送信するユーザーにシャットダウンの実行が許可されているかどうかを判断し、許可されている場合はシステムをシャットダウンします。

dbus-sendを使用してこれをエミュレートできます。たとえば、dbusを使用してシステムをシャットダウンするには、次のようにします。

dbus-send --system --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
11
Chris Down