Ubuntu Weekly Recipe

第9回ノートPC向けの設定 : GNOMEアプレットの利用・ubuntu-laptop-mode・powertop

過去のPC Unixでは、ノートPCへインストールすることができても、サスペンドできない、スリープすると二度と起きてこない、といったトラブルが付き物でしたが、現在のLinuxではノートPCであってもほとんど問題が起きずに動作します。Ubuntuもその例に漏れず、ノートPCでも遜色なく利用することができます。今回はノートPCでUbuntuを利用していく上で役に立つレシピを紹介します。

GNOMEアプレットの利用

Windowsがプリインストールされた一部のノートPCでは、タスクバー等にバッテリの残量を表示するユーティリティがプリインストールされていることがあります。Ubuntuが利用するGNOMEにも、類似したノートPC用のユーティリティが用意されています。

まず実際の画面を見て頂くのが早いと思いますので、筆者の利用している環境のスクリーンショットを次に示します。画面の右上部分、⁠通知スペース」の左にある、バッテリアイコンやクロック周波数の表示に注目してください。

図1 筆者のノートPCのデスクトップ画面
図1 筆者のノートPCのデスクトップ画面

これらはUbuntuをインストールした時点ですでに導入されており[1]⁠、パネルのカスタマイズを行えば画面に表示させることができます。

図2 Conkyのより詳細な表示
図2 Conkyのより詳細な表示

追加は簡単で、メニュー上で右クリックを行い、メニューから[パネルへ追加]図3を選択し、⁠CPU周波数の計測モニタ」「バッテリ充電モニタ」を追加するだけです。

図3 右クリックで表示されるコンテキストメニュー分
図3 右クリックで表示されるコンテキストメニュー

いずれもデフォルトでは最小限の表示しかしないため、前述のスクリーンショットと同様の画面にするには、各アイコンを右クリックして[設定]を開いて設定を行います。

筆者の経験上ですが、CPU周波数モニタは外観を「アイコンとラベル」に設定し、かつ、⁠CPU周波数を標準で表示する」⁠周波数の単位を表示する」にしておくのが便利でしょう。

図4 CPU周波数の計測モニタの設定
図4 CPU周波数の計測モニタの設定

CPU周波数を表示させる状態にしておくと、CPUの周波数が動的に変化していることが見て取れるようになります。

ただし、周波数を管理する方針はこれらのアプレットからは変更できませんので、ノートPCでバッテリを最大まで保たせようとする場合や、省電力サーバなどを構築するような場合(要するに、CPU周波数を常に最低にする、といった設定を行いたい場合)には、Ubuntu Teawkの[システム⁠⁠→⁠電源管理]もしくはgconf-editorなどで直接パラメータを指定し、周波数制御ポリシーを変更する必要があります。

バッテリ充電モニタでは、⁠拡張表示」にし、⁠充電時間/充電率を表示する」⁠残量を時間で表示する」が便利だと思います。これらの設定は前述のスクリーンショットを取った際の設定でもあります。

図5 バッテリ充電モニタの設定
図5 バッテリ充電モニタの設定

なお、デフォルトで表示されている「電源の管理」によるバッテリ表示と、⁠バッテリ充電モニタ」はバッテリ残時間の算出アプローチが異なり、結果も違ってきます。以下は筆者が利用しているノートPCでの例ですが、残時間が前者は1時間10分、後者は1時間41分と、5割近い差があります(これはバッテリの残容量に関わらず常に一定で、筆者の環境では常時5割ほどの差があります⁠⁠。

図6 表示時間の差の例
図6 表示時間の差の例

筆者が試した範囲では「バッテリ充電モニタ」の方が実状に近いようですが、実際の利用時間はもう少し長く、2時間強の動作が可能でした(それほど頻繁に操作しなかったから、という可能性も多分にあります⁠⁠。

環境によっては適正な時間が算出される可能性もありますが、算出される時間は参考程度と理解しておくのが良いと思われます。ちなみに筆者の環境のバッテリの保ちがわずか2時間と非常に悪く見えますが、これは酷使の結果、バッテリ性能がかなり低くなっているためです。

ubuntu-laptop-modeの利用

ubuntu-laptop-modeのインストール

Ubuntu 7.10から追加された新要素として、ubuntu-laptop-modeというパッケージがあります。このパッケージの本体は、ノートPCなどで利用するのに適したKernelパラメータにすることで、バッテリ動作時間を延長させるスクリプトです。基本的な発想は、⁠HDDへのアクセスを最小限にする」もので、ダーティバッファを増やす、HDDへのフラッシュ頻度を落とす、ファイルシステムのAccess TIMEの記録を行わなくする、HDDのパラメータを変更する、一定時間経過後にHDDをスピンダウンさせる、といった処理を行います(HDD関連の処理しか行いません⁠⁠。

アプローチを思い切って要約すると、⁠syncを遅らせる」です。インストール後に/usr/sbin/ubuntu-laptop-modeを見れば分かりますが、中身は簡単なbashスクリプトですので、眺めてみても良いと思います。

7.10以降をお使いであれば、ubuntu-laptop-modeパッケージはSynapticやaptでインストールすることができます。

$ sudo apt-get update
$ sudo apt-get install ubuntu-laptop-mode

インストール後、 /etc/default/ubuntu-laptop-modeから/etc/default/ubuntu-laptop-mode.defaultへのシンボリックリンクを張って(あるいはコピーもしくは移動)してください(/etc/default/ubuntu-laptop-mode.defaultがインストールされてしまうのは、パッケージングバグではないかと筆者は考えています⁠⁠。

$ sudo ln -s /etc/default/ubuntu-laptop-mode.default /etc/default/ubuntu-laptop-mode

また、このまま設定ファイルを変更した場合、ubuntu-laptop-modeのアップデートによって設定がデフォルトのものに戻されてしまいますので、diversionを行いましょう(コピーもしくは移動した場合は不要です⁠⁠。

2008年3月14日追記

上記のdiversion作業は不要でした。当該ファイルはconffileに含まれているため、パッケージアップデート時に上書き処理が必要な場合、対話式の確認ダイアログが表示されます。

conffileにdiversion指定を行うと、多くの場合、アップデート時に本来の設定ファイルが削除されてしまいますので、すでに行っている場合はdiversionを除去してください。

ご迷惑をおかけし、大変申し訳ございませんでした。

$ sudo dpkg-divert --package ubuntu-laptop-mode --divert /etc/default/ubuntu-laptop-mode.default.ubuntu /etc/default/ubuntu-laptop-mode.default

"diversion"(dpkg-divert)とは、パッケージ管理システムに「このファイルはパッケージ由来のものではないので、代替パスとして指示された場所へインストールせよ」という処理を強制するためのコマンドです。上記の例の場合、⁠ubuntu-laptop-modeパッケージに含まれる/etc/default/ubuntu-laptop-mode.defaultは、/etc/default/ubuntu-laptop-mode.default.ubuntuにインストールせよ」という指示になります。これを行うことにより、パッケージの更新などで不本意なアップデートが行われてしまうことを抑制できます。

なお、diversionを解除したい場合は以下のように行います。

$ sudo dpkg-divert --package ubuntu-laptop-mode --remove /etc/default/ubuntu-laptop-mode.default

設定ファイルの準備ができたらubuntu-laptop-modeを起動します。

$ sudo ubuntu-laptop-mode start

値が変更されていることを確認するために、 ubuntu-laptop-modeをstart/stopしながら、/proc/sys/vm/dirty_ratio の値を確認してみましょう(なお、ubuntu-laptop-modeにはバグがあり、二回続けてstartしてしまうと/var/run/ubuntu-laptop-modeに正しくない値が記録されてしまい、本来の値に戻らなくなってしまいます。通常は後述のように自動的に実行されるように設定するものですので実用上はあまり問題はありませんが、実験する場合は注意してください⁠⁠。

$ cat /proc/sys/vm/dirty_ratio
40
$ sudo ubuntu-laptop-mode stop
$ cat /proc/sys/vm/dirty_ratio
10
$ sudo ubuntu-laptop-mode start
$ cat /proc/sys/vm/dirty_ratio
40

ACPIイベントによるハンドリング

ubuntu-laptop-modeはバッテリ動作向けの調整ですので、AC電源で稼働させる場合にはデメリットもあります。HDDアクセスが減少するため、静音化を目的にするなら通常時から有効にしていても構いませんが、筆者はACPIイベントに連動させ、AC稼働時は無効、バッテリ稼働時のみ有効にしています。

設定は次のように行います。

まず、/etc/acpi/ 以下を見てください。これらのディレクトリには各種ACPIイベント(ACPI Start・バッテリ動作開始・AC電源動作開始・サスペンド開始・レジューム完了)に連動して実行されるスクリプトが配置されています。これらのディレクトリにスクリプトを配置しておくだけで、各ステートになったタイミングでスクリプトを自動実行することができます。

$ cd /etc/acpi
$ ls -d *.d
ac.d/  battery.d/  resume.d/  start.d/  suspend.d/

以下のような簡易ラッパーを作成して実行権限を付け、ac.d/とstart.d/以下に10-ubuntu-laptop-mode_stop.shを、battery.d/に10-ubuntu-laptop-mode_start.shをコピーします[3]⁠。こうすることで、電源状態に応じて自動的に各モードを行き来することができます。

10-ubuntu-laptop-mode_start.sh
#!/bin/bash

/usr/sbin/ubuntu-laptop-mode start
10-ubuntu-laptop-mode_stop.sh
#!/bin/bash

/usr/sbin/ubuntu-laptop-mode stop
$ chmod +x 10-ubuntu-laptop-mode_*.sh
$ sudo cp 10-ubuntu-laptop-mode_stop.sh /etc/acpi/ac.d/
$ sudo cp 10-ubuntu-laptop-mode_stop.sh /etc/acpi/start.d/
$ sudo cp 10-ubuntu-laptop-mode_start.sh /etc/acpi/battery.d/

powertopによる不要な電源消費の削減

ノートPCで利用する場合、不要な電源消費をもたらす「行儀の悪い」アプリケーションや、必要ないデバイスへの電源供給をOffにすることで、ある程度バッテリ利用時間を延長することができます。こうしたチューニング的な設定変更を行うための補助ツールとして、IntelのPowerTopユーティリティを紹介します。

powertopもリポジトリに含まれていますので、Synapticやaptでインストールしてください。端末から行う場合は以下です。

$ sudo apt-get update
$ sudo apt-get install powertop

powertopは端末から実行するツールです。実行は以下のように、root権限を持った状態で行います。

$ sudo powertop

実行すると以下のように、その時点までのCPUステートの割合が上段に、wakeupを引き起こしたプロセス名が中段に表示され、最下部に電源消費を抑えるための提案が表示されます。

図7 powertopの実行
図7 powertopの実行

通常は最初に表示される2~3個を実行するだけで十分です(数分~数十分、といったレベルですが、それなりの効果があります⁠⁠。提案には比較的偏執狂的なものも含まれているため、すべての提案を受け入れても、期待するほどにはバッテリ寿命は伸びません。

参考になるドキュメント
dpkg-divertの利用について: "Replacing binaries with dpkg-divert"
http://www.debian-administration.org/articles/118
PowerTop関連の情報
http://www.lesswatts.org/projects/powertop/

おすすめ記事

記事・ニュース一覧