ManagerConkyとはデスクトップ上で動作する、高いカスタマイズ性を誇るシステムモニターツールです。Recipeマニアの方でしたら、第9回に余談としてちらっと登場したことを覚えているかもしれませんね。Unityのデスクトップ環境であれば、時計、バッテリー残量、ネットワークの状態といった様々な情報はインジケーターに表示されますし、アプリケーションによってはnotify-osdによってデスクトップに通知が表示されます。細かい情報を表示したい場合や、(XmonadやAwesomeのような)他のウィンドウマネージャーを利用する際には、Conkyが役に立つケースも多々あります。今週のレシピでは、そんなConkyの使い方とカスタマイズ例を紹介します(注1、2⁠)⁠。[1]なんと今まで紹介していなかったことに筆者も驚きました。ConkyのインストールConkyはUniverseリポジトリにパッケージが用意されていますので、aptでインストールすることができます。ここで注意点が一つあります。-nで検索するとわかりますが、conkyと名のつくパッケージにはconkyconky-stdconky-cliconky-allの4つが存在します。このうちconkyパッケージはtransitionalパッケージで、あとの3つが実際にバイナリを含むパッケージです。名前からしてconkyパッケージをインストールしてしまいそうになりますが、そうすると依存関係により、実体としてはconky-stdパッケージがインストールされてしまいます。conky-stdパッケージでは一部の機能、具体的にはRSSリーダー機能などを利用することができません。特別な理由がなければ全機能が有効になったconky-allをインストールしておくと、不要なハマりを回避することができるでしょう。conky-allConkyの起動それでは実際にConkyを起動してみましょう。端末からconkyとタイプして起動してみてください。画像のように、ホスト名やCPUの情報、メモリ使用量、プロセスのリストなどがデスクトップ上に表示されるはずです。Launcherに表示が被ってしまってよく見えないし、ウィンドウはチラチラと点滅するし、はっきり言って邪魔なだけですよね。Conkyはデフォルトで/etc/conky/conky.confを設定ファイルとして読み込むのですが、この設定はあくまでサンプルであり、とてもそのまま使えるものではありません。次節以降では、Conkyを自分用にカスタマイズする具体的な設定方法を紹介していきます。初期状態のConkyさてその前に。Conkyはデスクトップに常駐して情報を表示するタイプのアプリケーションですから、Dashや端末から手で起動するのではなく、ログイン時に自動的に起動するほうが嬉しいでしょう。Ubuntuであればgnome-session-propertiesから、自動的に起動するプログラムとして追加しておくとよいでしょう。Conkyのバイナリは/usr/bin/conkyですが、gnome-session-propertiesからこのバイナリを直接起動しようとすると、タイミングによっては起動に失敗することがあります。これはログイン後、少し時間を空けてからConkyを実行することで回避できますので、もしも起動に失敗するようなことがあったら、sleepを挟んだラッパースクリプトを用意してみてください[3]⁠。このスクリプトを~/bin/conky.shなどとして配置し、gnome-session-propertiesに登録してください。Managerでも、起動スクリプトには20秒のsleepが挟まれています。Conkyを登録ConkyのカスタマイズConkyの個人的な設定は~/.conkyrcに記述します。Conkyは、起動している状態で設定ファイルが変更されると自動的に設定を読み直してくれます[4]ので、お気に入りの設定を作るためにも、Conkyを起動させた状態で試行錯誤してみるとよいでしょう。[4]ただしウィンドウのサイズだけは自動的には変更されません。minimum_sizeなどを変更した場合はkillallなどでConkyのプロセスを再起動してみてください。基本的な情報を表示するまずはConkyの基本的な設定と、PCの情報を表示してみましょう。~/.conkyrcに図の内容を記述し、Conkyを起動してみてください。画像のように、デスクトップの右上にPC名やカーネルバージョン、CPUやメモリの使用率が表示されたことだと思います。設定の意味を簡単に説明しましょう。基本的な設定をした状態のConky「alignment」はConkyのウィンドウを表示する位置です。Unityのデスクトップではインジケーターが画面右上に集まっていますので、Conkyも右上(top_right)に表示するように設定しました。「gap_x」「⁠gap_y」は、alignmentで指定した場所から実際にウィンドウを表示する位置まで、何ピクセルの間隔を空けるかを指定します。筆者はデスクトップ右端にConkyを表示したいので、ギャップは0を指定しています。「double_buffer」はダブルバッファを使うか否かを設定します。ダブルバッファを使うことでウィンドウのちらつきを抑えられますので、yesにしておきましょう。「background」は、Conkyをバックグラウンドで起動することを意味します。yesにしておきましょう。「default_color」「⁠default_outline_color」「⁠default_shade_color」は読んで字の如く、文字、アウトライン、シェードのデフォルトの色を設定します。お好みでred、green、yellow、blue、magenta、cyan、black、whiteの中から選択するか、16進数でRGB値を指定してください。「draw_borders」「⁠draw_graph_borders」「⁠draw_outline」「⁠draw_shades」もそのまんまで、ボーダー、グラフのボーダー、アウトライン、シェードを描画するかどうかを設定します。これも色と合わせてお好みで設定してみてください。「use_xft」はXftを使用するという設定です。これによってフォントにアンチエイリアスがかかるようになります。「xftfont」は使用するフォントを指定します。筆者はTakaoGothicの12ポイントを指定してみました。こちらもインストールされているフォントからお好みで設定してください。フォントの一覧はfc-listコマンドで得られます。「override_utf8_locale」は、UTF-8の使用を強制します。この設定を行うにはXftが必要になります。「out_to_console」「⁠out_to_stderr」は、標準出力、標準エラー出力への出力を行うかどうかの設定です。GUIで利用しているぶんにはnoに設定しておけばよいでしょう。今回はConkyを単独で利用していますが、Conkyはその出力をパイプで別のプログラムに渡すといった使い方もできます[5]⁠。「⁠extra_newline」は標準出力への出力時に、追加の改行文字を出力するか否かです。パイプで他のプログラムと連携する際に役立ちますが、とりあえずnoにしておいて構いません。[5]例えばウィンドウマネージャーにxmonadを利用し、Dzenの中にConkyの出力を表示する、といった用途が定番です。「update_interval」はConkyが情報をアップデートするインターバルを秒で指定します。「uppercase」は、Conky内に表示されるアルファベットを、強制的に大文字にするかどうかを指定します。通常はnoでよいでしょう。「show_graph_scale」はグラフに記録された最大値を、「⁠show_graph_range」はそのグラフが表示しているレンジ(期間)を、それぞれ表示するかどうかの設定です。「own_window」ではじまる一連の設定は、Conkyのウィンドウに関するものです。詳しくは後述しますが、ここでは通常のタイプの自前のウィンドウを持ち、タイトルバーなどのウィンドウの装飾を表示せず、常に最背面に表示し、タスクバー(UnityではLauncher)にアイコンを表示せず、ウィンドウをすべてのワークスペースに表示する、といった設定をしています。この設定によってConkyは、いわゆるデスクトップウィジェットのように見えるようになります。「cpu_avg_samples」はCPUの利用率を表示する際の計算に使用されます。CPUのコア数を指定しておきましょう。筆者は4コアのノートPCでこの原稿を書いているため、4を指定しています。ここまでがConkyの基本的な設定です。次の「TEXT」以降には、実際にConkyのウィンドウ内に表示する項目を記述していきます。Conkyには様々なオブジェクトが用意されており、「⁠$オブジェクト名」と記述すると、その値が表示されます。中にはパラメータやオプションによって表示する内容が変化するオブジェクトも存在します。オブジェクトにパラメータを与える場合は、全体を${}でくくります。シェルスクリプトの変数の書き方とよく似ていますので、特に違和感なく記述できるでしょう。文字やスペース、改行などは入力したものがそのまま表示されます[6]⁠。[6]ただしインデントを入れたい場合はスペースを記入するより、$offsetを使用したほうがよいでしょう。「$nodename」は現在のホスト名に置き換えられます。「⁠$sysname」「⁠$kernel」「⁠$machine」は、それぞれシステム名(例:Linux⁠)⁠、カーネルのバージョン、アーキテクチャ(例:x86_64)を表します。「⁠$hr」は水平の区切り線を表示します。これで、ウィンドウの上部にPCの基本的な情報を表示しているわけです。「$uptime」はシステムが起動してからの経過時間を表します。「⁠$loadavg」はロードアベレージです。これでuptimeコマンドを実行したのとほぼ同じ情報が得られます。「$running_processes」は、現在の実行中のプロセス数です。「⁠$processes」は「$running_processes」の値に、sleep中のプロセス数を足したものになります。「$freq_g」はCPUの周波数をGHzで表します[7]⁠。「⁠$cpu」はCPUの利用率を、「⁠$cpugraph」はCPU利用率の変化をグラフで表示します。これらはそれぞれパラメータを取ることができ、「⁠cpu0」を指定した場合は全CPUのトータルを、「⁠cpu1」「⁠cpu2」などを指定すると、個別のCPUの情報を表示できます。パラメータによってグラフに色をつけ、グラデーション表示させることもできます。「-l」はグラフの縦軸を対数スケールで表すオプションです。詳しくはリファレンス[8]を参照してください。[7]MHzで表す$freqという変数も存在します。「$mem」「⁠$memmax」は現在のメモリ使用量と、搭載メモリ量を表します。「⁠$membar」はメモリ利用率を棒グラフで表示します。「⁠$swap」「⁠$swapmax」「⁠$swapbar」はこれらのスワップメモリ版です。ウィンドウを半透明にするデスクトップの右上に黒いConkyのウィンドウが貼り付いているのは、あまりカッコよくありませんよね。モダンに見えるよう、ウィンドウを透明にしてみましょう。own_window_transparentという設定値が存在します。これを「yes」に設定するとウィンドウが完全に透明になるのですが、ウィンドウの色(own_window_colour)が反映されません。完全に透明にしてしまうと文字も読みにくいので、色のついた半透明にするのがよいでしょう。文字色を黄色、背景を透明にしたConkyそのためにはown_window_transparentには「no」を指定しておき、ARGBを有効にする必要があります。~/.conkyrcに以下を追記してみてください[9]⁠。[9]もちろんこれはTEXTよりも前に書く必要があります。半透明になったConkyウィンドウの色はown_window_colour、透明度はown_window_argb_valueで設定できます。文字の色と合わせて、好みになるよう調整してみてください。own_window_typeを「override」に設定すると、Conkyのウィンドウがウィンドウマネージャーによって管理されなくなります。ドラッグでウィンドウの大きさを変更したり、Alt+ドラッグでウィンドウを移動したりといったことができなくなり、own_window_hintsも無視されます。ウィンドウを操作できなくなるため、本当の意味で邪魔にならなくなりますが[10]⁠、その反面、半透明にすることもできなくなってしまいます。このあたりはお好みで設定を選択してください。[10]ウィンドウの装飾を消しているだけの場合、タイトルバーはなくともAlt+ドラッグすればウィンドウを移動させられました。ディスクの空き容量を表示するメモリやCPUの情報を表示しているのですから、ついでにディスクの情報も表示しておきましょう。「⁠$fs_size」「⁠$fs_used」は、引数に指定したファイルシステムのサイズと使用量を表します。「⁠$fs_bar」はもうおわかりでしょうが、使用率を棒グラフで表示します。「⁠$diskiograph」は前述の「$cpugraph」のディスク版で、ディスクへのI/Oをグラフで表示します。ルートパーティションの情報を追加したネットワークの情報を表示する次はネットワークです。「⁠$upspeed」「⁠$downspeed」はそれぞれアップロード、ダウンロードの速度を表します。「⁠$upspeedgraph」「⁠$downspeedgraph」はもちろんグラフ表示です。これらはどれも、監視の対象とするネットワークデバイス名をパラメータに取ります。有線のNICであればeth0でしょうし、無線LANであればwlan0になるでしょう。このあたりはお使いの環境に合わせて読み替えてください。グラフの最後の引数は、グラフの高さと幅の指定です。Conkyのグラフは、ウィンドウのサイズに合わせて自動的にスケールしてくれますが、アップとダウンのグラフを同じサイズで左右に並べたかったため、明示的に指定を行っています。ネットワークの情報を追加した無線LANの情報を表示する無線LANを使っているのであれば、アクセスポイント名やビットレートなども表示したいですよね。「⁠$wireless_essid」「⁠$wireless_bitrate」はそれぞれ、現在接続中のESSIDとビットレートを表します。「⁠$wireless_link_qual_perc」「⁠$wireless_link_bar」は、リンク品質をパーセンテージと棒グラフで表示します。これらの情報は、無線LANを利用していない状態では不要な情報ですし、そもそも正しく表示できません。不要な情報のために貴重なディスプレイの縦のスペースを割くのはもったいないので、これらの項目は無線LANに接続している時だけに限定して表示するようにしましょう。「$if_existing」は、1番目のパラメータに指定されたファイルが存在した場合に「$endif」までの内容を表示する機能です。「$if_existing」に2番目のパラメータを与えた場合、「⁠1番目のパラメータのファイルの中に2番目のパラメータの文字列が存在するかどうか」をチェックします。ここでは「/proc/net/route」の中にwlan0という文字列が存在するかどうかで、無線LAN(wlan0)でネットワークに接続しているかどうかを判定しています[11]⁠。[11]もっといい判定方法があるかもしれませんが、思いつきませんでした。無線LANに接続するとアクセスポイントの情報が表示されるバッテリー情報を表示するノートPCの場合は、バッテリーの情報も表示できます[12]⁠。「⁠$battery」はバッテリーの状態(例:charging、discharging)と残量をパーセンテージで表示します。「⁠$battery_time」は残り時間、「⁠$battery_bar」は残容量を棒グラフで表示します。バッテリーの残量を気にするのはモバイルでの利用時でしょうから、ここでも「$if_existing」を使って、「⁠/sys/class/power_supply/BAT0/status」が存在する時に限って表示するようにしてみました。[12]Unityの場合はインジケーターにあるので不要だとは思いますが。ノートPCの場合はバッテリー残量が表示されるプロセス表示を表示する「$top」を使うと、稼働中のプロセスの情報を表示することができます。「⁠$top」は名前と番号のふたつのパラメータを取ります。名前には「name」「⁠pid」「⁠cpu」「⁠mem」といった、topコマンドやpsコマンドで表示可能な項目を指定します。プロセスの一覧はCPU使用率でソートされており、番号はそのうち上位何番目を表示するかを意味します。1}」は、もっともCPUを使用しているプロセスの名前に置き換えられます。以下の例では上位4つのプロセスの名前、プロセスID、CPU使用率、メモリ使用率をリアルタイムに表示しています。CPUを使用しているプロセスを表示するRhythmboxで再生中の曲を表示するRhythmboxで音楽を再生している時は、そのアルバム名、アーティスト名、トラック名などを表示してみましょう。Rhythmboxが起動している時に限って表示するよう、ここでは「$if_running」を使いました。「⁠$if_running」はパラメータに指定された名前のプロセスが存在した場合のみ、「⁠$endif」までの内容を表示します。「⁠$exec」はパラメータに指定された外部コマンドを実行し、その出力をConky内に表示します。--print-playing」コマンドで標準出力に表示させることができますので、これをexecするようにしました。ManagerConkyは非常に多機能なシステムモニターですが、設定が面倒だと思う方もいるでしょう。Managerというアプリケーションを使うと、設定済みのConkyをウィジェット感覚でON/OFFすることができます。以下のコマンドを実行して、PPAからconky-managerをインストールしてください。Managerを起動すると、画像のようなウィンドウが表示されます。ここで使いたいウィジェットにチェックを入れると、あらかじめ様々な設定がなされたConkyがデスクトップに表示されます。Panelウィジェットを有効にすると、CPU全体とコアごとの利用率がグラフで表示されます。これらウィジェットの設定は、~/.conky以下にまとめられています。psコマンドを実行するとわかりますが、ウィジェットの数だけConkyが-cオプション(利用する設定ファイルを指定する)と共に起動されているのです[13]⁠。Managerの実態は、複数のConkyの起動を管理するためのマネージャーと、プリセット設定の詰め合わせです。GUIのダイアログから変更可能になっています。Conkyをより便利に使いたいのであれば、一度試してみてもよいのではないでしょうか。標準で用意されているウィジェットもなかなかカッコいいので、設定を自作する際の参考にもなるでしょう。[13]ウィジェットを有効にした後で、~/.conky/conky-startup.shを見てみるとよくわかると思います。Managerでいくつかのウィジェットを有効にしてみたデスクトップ。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します⁠。個別にライセンスが設定されている記事等はそのライセンスに従います。