Conkyとはデスクトップ上で動作する、高いカスタマイズ性を誇るシステムモニターツールです。Ubuntu Weekly Recipeマニアの方でしたら、第9回 に余談としてちらっと登場したことを覚えているかもしれませんね。
Unityのデスクトップ環境であれば、時計、バッテリー残量、ネットワークの状態といった様々な情報はインジケーターに表示されますし、アプリケーションによってはnotify-osdによってデスクトップに通知が表示されます。ですがもっと細かい情報を表示したい場合や、(XmonadやAwesomeのような)他のウィンドウマネージャーを利用する際には、Conkyが役に立つケースも多々あります。今週のレシピでは、そんなConkyの使い方とカスタマイズ例を紹介します(注1、2 ) 。
Conkyのインストール
ConkyはUniverseリポジトリにパッケージが用意されていますので、aptでインストールすることができます。ここで注意点が一つあります。apt-cache search -nで検索するとわかりますが、conkyと名のつくパッケージには
conky
conky-std
conky-cli
conky-all
の4つが存在します。このうちconkyパッケージはtransitionalパッケージで、あとの3つが実際にバイナリを含むパッケージです。つい名前からしてconkyパッケージをインストールしてしまいそうになりますが、そうすると依存関係により、実体としてはconky-stdパッケージがインストールされてしまいます。しかしconky-stdパッケージでは一部の機能、具体的にはRSSリーダー機能などを利用することができません。特別な理由がなければ全機能が有効になったconky-allをインストールしておくと、不要なハマりを回避することができるでしょう。
Conkyのインストール
$ sudo apt - get install conky - all
Conkyの起動
それでは実際にConkyを起動してみましょう。端末からconky
とタイプして起動してみてください。画像のように、ホスト名やCPUの情報、メモリ使用量、プロセスのリストなどがデスクトップ上に表示されるはずです。しかしLauncherに表示が被ってしまってよく見えないし、ウィンドウはチラチラと点滅するし、はっきり言って邪魔なだけですよね。Conkyはデフォルトで/etc/conky/conky.confを設定ファイルとして読み込むのですが、この設定はあくまでサンプルであり、とてもそのまま使えるものではありません。次節以降では、Conkyを自分用にカスタマイズする具体的な設定方法を紹介していきます。
図1 初期状態のConky
さてその前に。Conkyはデスクトップに常駐して情報を表示するタイプのアプリケーションですから、Dashや端末から手で起動するのではなく、ログイン時に自動的に起動するほうが嬉しいでしょう。Ubuntuであればgnome-session-propertiesから、自動的に起動するプログラムとして追加しておくとよいでしょう。Conkyのバイナリは/usr/bin/conkyですが、gnome-session-propertiesからこのバイナリを直接起動しようとすると、タイミングによっては起動に失敗することがあります。これはログイン後、少し時間を空けてからConkyを実行することで回避できますので、もしも起動に失敗するようなことがあったら、sleepを挟んだラッパースクリプトを用意してみてください[3] 。このスクリプトを~/bin/conky.shなどとして配置し、gnome-session-propertiesに登録してください。
#!/bin/sh
# 適当な秒数sleepする
sleep 15
/ usr / bin / conky
図2 gnome-session-propertiesの起動
図3 Conkyを登録
Conkyのカスタマイズ
Conkyの個人的な設定は~/.conkyrcに記述します。Conkyは、起動している状態で設定ファイルが変更されると自動的に設定を読み直してくれます[4] ので、お気に入りの設定を作るためにも、Conkyを起動させた状態で試行錯誤してみるとよいでしょう。
基本的な情報を表示する
まずはConkyの基本的な設定と、PCの情報を表示してみましょう。~/.conkyrcに図の内容を記述し、Conkyを起動してみてください。画像のように、デスクトップの右上にPC名やカーネルバージョン、CPUやメモリの使用率が表示されたことだと思います。設定の意味を簡単に説明しましょう。
alignment top_right
gap_x 0
gap_y 0
double_buffer yes
background yes
default_color white
default_outline_color white
default_shade_color gray
draw_borders no
draw_graph_borders yes
draw_outline no
draw_shades no
use_xft yes
xftfont TakaoGothic : style = Regular : size = 12
override_utf8_locale yes
out_to_console no
out_to_stderr no
extra_newline no
update_interval 1.0
uppercase no
show_graph_scale yes
show_graph_range no
own_window yes
own_window_class Conky
own_window_type normal
own_window_hints undecorated , below , skip_taskbar , skip_pager , sticky
cpu_avg_samples 4
TEXT
$nodename
$sysname $kernel $machine
$hr
Uptime : $uptime
Load average : $loadavg
Processes : $processes Running : $running_processes
CPU Frequency : $ { freq_g } GHz
CPU Usage : $ { cpu cpu0 }%
$ { cpugraph cpu0 - l }
RAM Usage : $mem / $memmax
$membar
Swap Usage : $swap / $swapmax
$swapbar
図4 基本的な設定をした状態の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にしておいて構いません。
「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] 。
「$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] を参照してください。
「$mem」「 $memmax」は現在のメモリ使用量と、搭載メモリ量を表します。「 $membar」はメモリ利用率を棒グラフで表示します。「 $swap」「 $swapmax」「 $swapbar」はこれらのスワップメモリ版です。
ウィンドウを半透明にする
デスクトップの右上に黒いConkyのウィンドウが貼り付いているのは、あまりカッコよくありませんよね。もう少しモダンに見えるよう、ウィンドウを透明にしてみましょう。
own_window_transparentという設定値が存在します。これを「yes」に設定するとウィンドウが完全に透明になるのですが、ウィンドウの色(own_window_colour)が反映されません。また完全に透明にしてしまうと文字も読みにくいので、色のついた半透明にするのがよいでしょう。
図5 文字色を黄色、背景を透明にしたConky
そのためにはown_window_transparentには「no」を指定しておき、ARGBを有効にする必要があります。~/.conkyrcに以下を追記してみてください[9] 。
ウィンドウを透明にする設定
own_window_transparent no
own_window_colour 123456
own_window_argb_visual yes
own_window_argb_value 180
図6 半透明になったConky
ウィンドウの色はown_window_colour、透明度はown_window_argb_valueで設定できます。文字の色と合わせて、好みになるよう調整してみてください。
なおown_window_typeを「override」に設定すると、Conkyのウィンドウがウィンドウマネージャーによって管理されなくなります。ドラッグでウィンドウの大きさを変更したり、Alt+ドラッグでウィンドウを移動したりといったことができなくなり、own_window_hintsも無視されます。ウィンドウを操作できなくなるため、本当の意味で邪魔にならなくなりますが[10] 、その反面、半透明にすることもできなくなってしまいます。このあたりはお好みで設定を選択してください。
ディスクの空き容量を表示する
メモリやCPUの情報を表示しているのですから、ついでにディスクの情報も表示しておきましょう。「 $fs_size」「 $fs_used」は、引数に指定したファイルシステムのサイズと使用量を表します。「 $fs_bar」はもうおわかりでしょうが、使用率を棒グラフで表示します。「 $diskiograph」は前述の「$cpugraph」のディスク版で、ディスクへのI/Oをグラフで表示します。
$hr
File systems :
/ ${fs_used / }/ $ { fs_size /}
$ { fs_bar 6 /}
$ { diskiograph }
図7 ルートパーティションの情報を追加した
ネットワークの情報を表示する
次はネットワークです。「 $upspeed」「 $downspeed」はそれぞれアップロード、ダウンロードの速度を表します。「 $upspeedgraph」「 $downspeedgraph」はもちろんグラフ表示です。これらはどれも、監視の対象とするネットワークデバイス名をパラメータに取ります。たとえば有線のNICであればeth0でしょうし、無線LANであればwlan0になるでしょう。このあたりはお使いの環境に合わせて読み替えてください。グラフの最後の引数は、グラフの高さと幅の指定です。Conkyのグラフは、ウィンドウのサイズに合わせて自動的にスケールしてくれますが、アップとダウンのグラフを同じサイズで左右に並べたかったため、明示的に指定を行っています。
$hr
Networking :
eth0
Up : $ { upspeed eth0 } - Down : $ { downspeed eth0 }
$ { upspeedgraph eth0 32 , 140 } $ { downspeedgraph eth0 32 , 140 }
図8 ネットワークの情報を追加した
無線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] 。
$ { if_existing / proc / net / route wlan0 } $hr
Wireless :
$ { wireless_essid wlan0 } - $ { wireless_bitrate wlan0 }
$ { wireless_link_qual_perc wlan0 }% $ { wireless_link_bar wlan0 }
$ { endif }
図9 無線LANに接続するとアクセスポイントの情報が表示される
バッテリー情報を表示する
ノートPCの場合は、バッテリーの情報も表示できます[12] 。「 $battery」はバッテリーの状態(例:charging、discharging)と残量をパーセンテージで表示します。「 $battery_time」は残り時間、「 $battery_bar」は残容量を棒グラフで表示します。バッテリーの残量を気にするのはモバイルでの利用時でしょうから、ここでも「$if_existing」を使って、「 /sys/class/power_supply/BAT0/status」が存在する時に限って表示するようにしてみました。
$ { if_existing / sys / class / power_supply / BAT0 / status } Battery :
$ { battery }
$ { battery_time } $ { battery_bar }
$hr
$ { endif }
図10 ノートPCの場合はバッテリー残量が表示される
プロセス表示を表示する
「$top」を使うと、稼働中のプロセスの情報を表示することができます。「 $top」は名前と番号のふたつのパラメータを取ります。名前には「name」「 pid」「 cpu」「 mem」といった、topコマンドやpsコマンドで表示可能な項目を指定します。プロセスの一覧はCPU使用率でソートされており、番号はそのうち上位何番目を表示するかを意味します。つまり「${top name 1}」は、もっともCPUを使用しているプロセスの名前に置き換えられます。以下の例では上位4つのプロセスの名前、プロセスID、CPU使用率、メモリ使用率をリアルタイムに表示しています。
Top :
Name PID CPU % MEM %
$ { top name 1 } $ { top pid 1 } $ { top cpu 1 } $ { top mem 1 }
$ { top name 2 } $ { top pid 2 } $ { top cpu 2 } $ { top mem 2 }
$ { top name 3 } $ { top pid 3 } $ { top cpu 3 } $ { top mem 3 }
$ { top name 4 } $ { top pid 4 } $ { top cpu 4 } $ { top mem 4 }
図11 CPUを使用しているプロセスを表示する
Rhythmboxで再生中の曲を表示する
Rhythmboxで音楽を再生している時は、そのアルバム名、アーティスト名、トラック名などを表示してみましょう。Rhythmboxが起動している時に限って表示するよう、ここでは「$if_running」を使いました。「 $if_running」はパラメータに指定された名前のプロセスが存在した場合のみ、「 $endif」までの内容を表示します。「 $exec」はパラメータに指定された外部コマンドを実行し、その出力をConky内に表示します。Rhythmboxで再生中の音楽の情報は、「 rhythmbox-client --print-playing」コマンドで標準出力に表示させることができますので、これをexecするようにしました。
$ { if_running rhythmbox } $hr
NowPlaying :
$ { exec rhythmbox - client -- print - playing -- print - playing - format = '%at - %aa' }
$ { exec rhythmbox - client -- print - playing -- print - playing - format = '%tn:%tt %te/%td' }
$ { endif }
図12 Rhythmboxで再生中の曲の情報を表示する
Conky Manager
Conkyは非常に多機能なシステムモニターですが、設定が面倒だと思う方もいるでしょう。Conky Managerというアプリケーションを使うと、設定済みのConkyをウィジェット感覚でON/OFFすることができます。以下のコマンドを実行して、PPAからconky-managerをインストールしてください。
$ sudo apt - add - repository ppa : teejee2008 / ppa
$ sudo apt - get update
$ sudo apt - get install conky - manager
Conky Managerを起動すると、画像のようなウィンドウが表示されます。ここで使いたいウィジェットにチェックを入れると、あらかじめ様々な設定がなされたConkyがデスクトップに表示されます。
たとえばCPU Panelウィジェットを有効にすると、CPU全体とコアごとの利用率がグラフで表示されます。これらウィジェットの設定は、~/.conky以下にまとめられています。psコマンドを実行するとわかりますが、ウィジェットの数だけConkyが-cオプション(利用する設定ファイルを指定する)と共に起動されているのです[13] 。つまりConky Managerの実態は、複数のConkyの起動を管理するためのマネージャーと、プリセット設定の詰め合わせです。またウィジェットのサイズや表示位置、透過設定などもGUIのダイアログから変更可能になっています。Conkyをより便利に使いたいのであれば、一度試してみてもよいのではないでしょうか。標準で用意されているウィジェットもなかなかカッコいいので、設定を自作する際の参考にもなるでしょう。
図13 Conky Managerの画面
図14 Conky Managerでいくつかのウィジェットを有効にしてみたデスクトップ。円形の棒グラフはLuaで実装されている