site top fluxbox tips contact blog

Okumatsu_Hiroshi Website

last update 2010/6/17

fluxboxで簡単にシャットダウンをする方法

sudoとzenityを使う





linuxでシャットダウンをするには?

一般的なLinuxマシンでは、コンピュータのシャットダウンを許されているのは通常 root ユーザーに限られています。

Ubuntuの場合は root ユーザーを使用しないという特殊なシステムになっていますが、代わりに gksusudo などのコマンド を使ってシステム管理作業を行います。ほとんどの人が一人でコンピュータを使うという事情が反映しているのでしょう。

ターミナルからシャットダウンするときは、以下のようにします。

$ sudo shutdown -h now
    => パスワード入力を求められる

この sudo というコマンドは、ユーザーが管理者の権限を持っていることが必要ですが、一人でパソコンを使っているのであれば、管理者でないこと の方がめずらしいでしょう。root ユーザー(スーパーユーザー)になるか、または一時的に管理者の権限を取得してから作業を行うという、Unix系OSの考え方は、Windows に慣れている人には面倒に感じられるかもしれません。シャットダウンやインストールなど、システム全体に関わる時は必ず root パスワード(Ubuntuの場合はユーザー のパスワード)入力を求められますからね。

{gnomeでは gnome-power-manager などを使ってパスワードなしのシャットダウンを可能にしています。}

ちなみに、再起動やハイバネート、サスペンドなどは以下のようにすればできます。

$ sudo shutdown -r now    => 再起動する
$ sudo pm-hibernate       => ハイバネートする
$ sudo pm-suspend         => サスペンドする

これらのコマンドはいずれもパスワードの入力を求められます。

gksuを使う方法

gksu というコマンドは、sudo コマンドのフロントエンドです。
何も引数をつけずに実行すると、

gksu_dialog0.png

このようなダイアログが表示されて、別のユーザーとしてプログラムを実行することが可能になります。別のユーザーを 指定しない場合、デフォルトは root になっているそうです。

ただ、これではターミナルからコマンドを打つのとあまり手間が変わりませんので、メニューに登録するか、ショートカット キーを設定するといいでしょう。

例えば、

[exec] (rootでrox-filerを開く) {gksu rox-filer}

この様にメニューファイルに設定しておくと、

gksu_dialog.png

このようなダイアログが表示され、自分のパスワードを入力すれば root で rox-filer を開くことができます。

シャットダウンやサスペンドをメニューに追加するには同様にして、

[exec] (サスペンド) {gksu pm-suspend}
[exec] (ハイバネート) {gksu pm-hibernate}
[exec] (再起動) {gksu 'shutdown -r now'}
[exec] (シャットダウン) {gksu 'shutdown -h now'}

と編集します。

これをショートカットキーに割り当てるには、例えば以下のようにします。

Control Mod1 Delete :Exec gksu 'shutdown -h now'
Control Mod1 BackSpace :Exec gksu 'shutdown -r now'

sudoをパスワードを省略して使う

ここまでの例は、パスワード入力が必要でした。ただ、個人使用のパソコンでいちいちパスワードを求められるのは 面倒くさいという方もいるでしょう。

事前に設定しておくことで、これを省略することができます。

ターミナルを開いて以下のようにしてください。

$ sudo visudo

すると、/etc/sudoers の編集画面になります。エディタはほとんどの場合、viがデフォルトになっているようでので、 使い方が分からない方は少し戸惑うかも。{このエディタを gedit などに変更することもできるようですが、ここでは そのやり方は説明しません。セキュリティ上の問題であまり推奨されないようです。}

ファイルの一番最後に以下を加えます。

%hiroshi ALL=(ALL) NOPASSWD: /sbin/shutdown, /usr/sbin/pm-suspend, /usr/sbin/pm-hibernate

これで、シャットダウン、再起動、サスペンド、ハイバネートがパスワードなしで実行できるようになります。

ただし、注意する必要があるのは、パスワード入力がないために、いきなりシャットダウンなどが実行されてしまう、 ということです。

zenityでダイアログを表示させる

メニューやショートカットキーからのコマンド実行にワンクッション置くという意味で、実行前にダイアログを表示 してみたいと思います。

以下のようなスクリプトを作ります。

system_shutdown.sh

#!/bin/bash
if zenity --question --title="system shutdown!" --text="really shutdown?"; then
  sudo shutdown -h now
fi

そして、実行可能にする。

$ chmod 744 system_shutdown.sh

実行すると

system_shutdown.png

このようなダイアログが表示され、OKをクリックするとコンピュータをシャットダウンします。

また、リストを表示してコマンドを選ぶ、というやり方もできます。

systam_exit.sh

#!/bin/bash

list=("suspend" "hibernate" "reboot" "shutdown")

answer=$(zenity --list --title="system exit!" --text="select option" --column entry ${list[@]})

case ${answer} in
  "suspend")
    sudo pm-suspend ;;
  "hibernate")
    sudo pm-hibernate ;;
  "reboot")
    sudo shutdown -r now ;;
  "shutdown")
    sudo shutdown -h now ;;
esac

これを実行すると、

system_exit.png

こんなダイアログが表示されます。

リストからコマンドを選び、OKをクリックして実行してください。