作成日:2013-11-10 20:45:53
最終更新日:2015-05-31 01:20:27

conkyをカスタマイズ

先日からconkyを利用するようになったのですが、現状はデフォルトの設定でちょっと見た目がいただけませんので、今日はconkyの設定をあれこれいじり倒したいと思います。
せっかくですので、デフォルト状態のスクリーンショットを以下にのせておきたいと思います。

  1. ※ 一番最後に私が使っている.conkyrcをアップしていましたが、なぜか一部欠けた状態でアップしてしまっていました。試してくださった皆様申し訳ありませんでした。14.04インストール時に気がついて修正したものをアップしなおしましたので、もし良ければ再度ダウンロードください。
  2. tenki.jpがRSSの配信を終了してしまったので、アップしている.conkyrcの内容については、livedoorから東京の一週間の天気と現在出ている注意報を取得するものに差し替えてあります。
conky default setting

事前準備

conkyの設定ファイルは隠しファイル(ファイル名の先頭が[.]から始まるものは隠しファイルで、通常はデフォルトでは表示されません)ですので、Nautilus(ファイルマネージャ)の設定を変更して隠しファイルも表示できるようにしておきましょう。
一度Nautilusを起動してウィンドウを選択状態にし、トップバーの[ファイル]をクリックしてメニューから[設定]を選択します。

access Nautilus config menu

設定メニューが表示されたら、[表示]タブを選択し、[隠しファイルとバックアップファイルを表示する]にチェックを入れて[閉じる]ボタンをクリックします。設定メニューを閉じたら、一度Nautilusを開き直すと隠しファイル/フォルダが表示されるようになります。

change Nautilus config

conkyのインストールと自動起動設定

conkyのインストールを行っていない場合は、端末で以下コマンドを実行してインストールしましょう。
さり気なくconky本体とは別にいくつかインストールしていますが、何が何に対応しているかは、以下を確認してください。

sudo apt-get install conky lm-sensors hddtemp

  • lm-sensors:CPUの温度監視用
  • hddtemp:HDDの温度監視用

[lm-sensors]のインストールが終わったら、以下コマンドでハードウェアの自動検出を行います。
(yes/no)形式で色々と尋ねてきますが、質問にはすべて[yes]の回答で問題無いかと思います。
[sensors-detect]で認識したハードウェアの情報は再起動しないと取得できるようになりませんので、コマンド実行後一度再起動しておきましょう。

sudo sensors-detect

再起動後、端末上で以下コマンドを入力すると、認識したハードウェアの情報を表示してくれますので、テストも兼ねて一度情報を表示させておくと良いかと思います。

sensors

sensors test

また、hddtempは自動起動しておく必要があるので、以下コマンドで再設定を行います。

sudo apt-get install conky lm-sensors hddtemp
段落をコピペしてきて、コマンドを書き直し忘れていました。正しいhddtempの再設定コマンドは以下になります。
sudo dpkg-reconfigure hddtemp

再設定コマンドを実行すると、/usr/sbin/hddtempを SUID root でインストールしますか?
と聞いて来ますので、[TAB]キーでカーソルを操作して[<はい>]を選択して[ENTER]キーを押します。

reconfigure hddtemp

続いてhddtempをデーモンとして開始するか確認を促されます。[TAB]キーで[<はい>]を選択して[ENTER]キーを押します。

start hddtemp daemon

さらに温度監視対象のIPアドレスの入力を促されます。[127.0.0.1]のまま変更せず、[TAB]キーで[<了解>]を選択して[ENTER]キーを押します。

set listen target

最後にポートの入力を促されます。[7634]のまま変更せず、[TAB]キーで[<了解>]を選択して[ENTER]キーを押します。

set listen port

インストールが終わったら、ベースの設定ファイルをホームディレクトリにコピーしておきます。
コピー元のファイルは[/etc/conky/conky.conf]で、コピー先は[ホーム]ディレクトリです。なお、コマンドでコピーする場合は、以下を端末で実行してください。 (後で編集するのは、この[~/.conkyrc]ファイルです。)

cp /etc/conky/conky.conf ~/.conkyrc;

さらに以下コマンドでホームディレクトリに自動起動用のスクリプトを作成します。(このスクリプトでは、ログインして30秒後にconkyが起動します。この秒数は各自のPCのスペックに併せて調整してください。)

echo '#!/bin/bash' > ~/.conky_run.sh; echo 'sleep 30 && conky;' >> ~/.conky_run.sh; chmod 755 ~/.conky_run.sh;

スクリプトを作成したら、[アクティビティ]から[自動起動するアプリケーションの設定]を選択します。

select auto run app

[自動起動するアプリケーションの設定]ウィンドウが開いたら、[追加]ボタンをクリックします。

click add button

ファイル選択ダイアログが開いたら、左ペインからホームディレクトリを選択し、[.conky_run.sh]を選択して、[開く]ボタンをクリックします。

select conky_run.sh

名前欄と説明欄は任意ですので、わかりやすい名前をつけたら[追加]ボタンをクリックします。

click add button

一覧にスクリプトが追加されたことを確認したら、[閉じる]ボタンで自動起動設定完了です。

click close button

基本的な事項

conkyの編集を始める前にもう少しだけ。
以下は基本的な事項になります。ざっと目を通しておくと、後でに役に立つかもしれません。

  • conky停止:端末を起動して[killall conky]と入力し、enterキー
  • conky起動:端末を起動して[conky]
  • 大元の設定ファイル:[/etc/conky/conky.conf](このファイルは編集しないこと)
  • 設定ファイルの場所:[~/.conkyrc](編集するのはこっち)
  • 設定ファイルを書き換えて保存すれば、基本的に変更内容が即反映される。ただ、設定内容によるみたいなので、「あれ?」と思った時は一旦conkyを止めて再度起動したほうが良い。
  • 設定値一覧はこちら
  • .conkyrcの行頭が[#]の場合、その行はコメントとして処理される
  • .conkyrcの[TEXT]行より上はconkyの定義、[TEXT]行より下は表示内容の定義

ちらつきを抑える

環境によるのかもしれませんがデフォルト設定ですと、conkyのウィンドウがちらつくことがあります。
このちらつきを抑えるには以下定義を.conkyrcに追加します。(TEXT行より上に記載すること!)

double_buffer yes

背景を透明にする

デフォルト設定では黒背景でちょっと異質な感じですが、透明にしてしまえば違和感はゼロです。
これもconkyの定義なので[TEXT]行より上に記載します。

own_window_transparent yes
own_window_argb_visual true

conky transparent

表示位置を変更

conkyのデフォルト表示位置は左上です。表示位置を変更するには、[alignment top_left]と記載されている行の[top_left]を以下のいづれかの値で書き換えます。
top_right(右上)
top_middle(中央上)
bottom_left(左下)
bottom_right(右下)
bottom_middle(中央下)
middle_left(中央左)
middle_middle(ど真ん中)
middle_right(中央右)
また、[alignment xxx]との組み合わせで、[gap_x xxx][gap_y xxx]で微調整が可能です。
私の場合は右上の辺りに詰めて表示させたいので、以下のように定義を変更しています。

alignment top_right gap_x 10 gap_y 20

conky display right

バックグラウンドで実行

通常端末からconkyを実行すると、ウィンドウを閉じてしまえばconkyも終了してしまいます。それを防ぎ、一度実行されたらバックグラウンドに回って動作し続けるようにするには、以下定義を追加します。

background yes

最大ウィンドウ幅を指定

以下定義を追加することにより、最大ウィンドウ幅を指定することも可能です。この辺りは好みで調整ですね。

maximum_width 320

フォントとサイズを指定

デフォルトの状態で既に[DejaVu Sans Mono]フォントが指定されていますので、他のフォントに変更する場合は、デフォルト定義の先頭行に[#]を追記して無効化した上で自分で利用したいフォントとサイズを指定するのを忘れないようにしましょう。
デフォルト定義:[xftfont DejaVu Sans Mono:size=12]ですが、以下画像をみてもらうとわかる通り日本語が使えませんので、以下のように日本語がいけるフォントに変更しています。
ついでというわけでは無いのですが、[override_utf8_locale]で文字コードを強制的に[UTF-8]にし、[use_xft yes]でアンチエイリアスがきいたフォントを有効にしておきましょう。

override_utf8_locale yes
use_xft yes
xftfont TakaoGothic:style=Regular:size=12

conky change font conky change font

なお、利用できるフォントの一覧は以下コマンドで確認可能です。

fc-list

見辛い場合は、以下コマンドでドキュメントフォルダにフォントリストを出力して確認してみてください。

fc-list > ~/ドキュメント/list.txt

出力開始の合図

任意の行に[TEXT]と記述することで、以降の行を実際にconkyのwindow上に表示します。逆に言うと[.conkyrc]に[TEXT]と記述しなければ何も出力されませんし、[double_buffer yes]等の記述は[TEXT]行より上に記述する必要があり、仮に[TEXT]行より下に記述しても、[double_buffer yes]とそのまま文字列として出力されるだけです。まずこれを理解していないと、思うようにconkyをカスタマイズできませんので、注意してください。
だいたいこんな感じです。

double_buffer yes ←[TEXT]行より上なので、conkyそのものの設定として認識されます。
TEXT ←以降の行がconkyの出力として認識されるようになります。
hogehoge ←[TEXT]行よりも下なので、conkyのウィンドウ上に[hogehoge]と表示されます。

区切り線を表示

[TEXT]行以下に以下定義を追加することによって、区切り線(実線・点線)を表示することが可能になります。

${hr}
${stippled_hr}

出力位置・表示色の調整

表示色を指定するには、その前に${color #xxxxxx}と入力します。例えば白で[hogehoge]と表示したければ
${color #ffffff}hogehoge とします。また、表示位置の調整も可能です。単純に[hogehoge]とすれば、conkyのウィンドウ内に左詰めで[hogehoge]と表示されますし、[${alignc}hogehoge]とすればconkyのウィンドウ内の中央に[hogehoge]と表示されます。また、[${alignr}hogehoge]とすれば、右詰めで表示されます。

${color #ffffff}hogehoge ←白色で[hogehoge]と表示されます。
${scroll 3 1 hogehoge } ←3文字分の幅で、1文字ずつスクロールしながら[hogehoge]と表示します。
${alignc}${color #ff0000}hogehoge ←赤色で[hogehoge]と中央に表示されます。
${alignr}${color #0000ff}hogehoge ←青色で[hogehoge]と右詰めで表示されます。

conkyのバージョンを表示

[TEXT]行以下に以下定義を追加することによって、conkyのウィンドウにconkyそのもののバージョンを表示することが可能です。
やっぱり最初はバージョン表示ですよね。

conky ver ${conky_version}

日時を表示

[TEXT]行以下に以下定義を追加することによって、conkyのウィンドウに日時を表示することが可能になります。
[xxxx年xx月xx日x曜日]とする場合は以下をコピペでOKです。なお、出力フォーマットはstrftime()関数に準じます。

Date: ${time %Y年 %m月 %d日 %A}

時間を表示

[TEXT]行以下に以下定義を追加することによって、conkyのウィンドウに時間を表示することが可能になります。

Time: ${time %k:%M:%S}

システム起動からの時間を表示

[TEXT]行以下に以下定義を追加することによって、conkyのウィンドウにシステム起動からの経過時間を表示することが可能になります。

Uptime:${uptime}

CPUクロックを表示

[TEXT]行以下に以下定義を追加することによって、conkyのウィンドウにシステム起動からの経過時間を表示することが可能になります。

Frequency (in MHz):${freq}
Frequency (in GHz):${freq_g}

CPU・メモリ・Swapの使用率を表示

[TEXT]行以下に以下定義を追加することによって、conkyのウィンドウにCPUやメモリ、Swapの使用率を表示(数値やバーで)することが可能になります。

CPU Usage:${cpu}% - ${cpubar 5}
RAM Usage:${mem}/${memmax} - ${memperc}% - ${membar 5}
Swap Usage:${swap}/${swapmax} - ${swapperc}% - ${swapbar 5}

プロセスを表示

[TEXT]行以下に以下定義を追加することによって、conkyのウィンドウにプロセス数や実行中のプロセスを表示することが可能になります。

Processes : ${processes} Running: ${running_processes}

[/]や[/home]のディスクサイズを表示

[TEXT]行以下に以下定義を追加することによって、指定されたパーティションのディスクサイズを表示することが可能になります。
以下は[/]と[/home]のディスクサイズを表示します。

/ ${fs_used /}/${fs_size /} ${fs_bar 5 /}
/home ${fs_used /home}/${fs_size /home} ${fs_bar 5 /home}

Disk IOを表示

[TEXT]行以下に以下定義を追加することによって、IOやディスクの読み取り/書き込み時間を表示を表示することが可能になります。
(下は、[/]が/dev/sdaの場合)

/ io ${diskio /dev/sda}/s
/ read ${diskio_read /dev/sda}/s
/ write ${diskio_write /dev/sda}/s ${diskiograph /dev/sda 20,100 fef4f4 eebbcb} ${diskiograph_read /dev/sda 20,100 fef4f4 eebbcb} ${diskiograph_write /dev/sda 20,100 fef4f4 eebbcb}

ネットワークの送受信サイズと速度を表示

[TEXT]行以下に以下定義を追加することによって、ネットワークの送受信サイズ・速度を表示することが可能になります。なお、送受信サイズはオーバーフローすることがあるようです。

Up size:${totalup}
Down size:${totaldown}
Up speed:${upspeed eth0}
Down speed:${downspeed eth0}
${downspeedgraph eth0 20,145 fef4f4 eebbcb}${upspeedgraph eth0 20,145 fef4f4 eebbcb}

CPU・マザーボード・外部出力(チップセット?)の温度を表示

conky単体ではCPUの温度を表示することはできません。[lm-sensors]で温度・電圧・ファンの情報を取得し、その中から必要な情報を抜き取り、cat等で出力を加工してconky上に表示させます。この[lm-sensors]はハードウェアによって設定が色々ですので、以下簡単に説明します。
とりあえず[lm-sensors]のインストールと[sudo sensors-detect]でセンサーの検出を済ませておいてください。

とりあえず、端末を開き以下コマンドを実行してみてください。マザーボードの機能や適用されているドライバの種類によりますが、各種センサの情報がずらっと表示されます。

sensors

sensors test

先ほどの出力情報をふまえた上で、[/etc/modules]ファイルをテキストエディタで開きます。注目すべきは[# Chip drivers]以下の行です。下のように記載されているところです。私の環境では[w83627ehf]と記載されています。
とりあえず、これをコピーしておいてください。

# Generated by sensors-detect on Mon Nov 4 22:57:28 2013
# Chip drivers
w83627ehf

続いて[/etc/sensors3.conf]ファイルをテキストエディタで開きます。ファイルを開いたら、[Ctrl+F]で検索して一致する項目があるか確認します。ファイルを見ていただくとわかると思いますが、[label]という定義で出力時の文言を置き換えています。

check sensors3.conf

私の環境の場合、電圧関係の文字置換しか行っていないようですので、[.conkyrc]の[TEXT]行以下に以下定義を追加することによって、CPUの温度を表示することが可能になります。環境によっては、'CPUTIN'が'CPU0 Temp'だったり'Core1 Temp'だったりしますので、環境に併せて調整してみてください。

CPU : ${execi 60 sensors | grep -A 0 'CPUTIN' | cut -c 14-22}

マザーボードの温度も[lm-sensors]で取得できるので、CPUと同じように情報が取得できます。ラベルの書き換えが無ければ、以下コマンドで情報が取得できます。これもCPUと同様で'SYSTIN'だったり'M/B Temp'だったりします。

M/B : ${execi 60 sensors | grep -A 0 'SYSTIN' | cut -c 14-22}

外部出力(チップセット?)の温度も[lm-sensors]同様です。ラベルの書き換えが無ければ、以下コマンドで情報が取得できます。これも'AUXTIN'だったり'Aux Temp'だったりです。

AUX : ${execi 60 sensors | grep -A 0 'AUXTIN' | cut -c 14-22}

HDDの温度を表示

[TEXT]行以下に以下定義を追加することによって、HDDの温度を表示することが可能になります。正常に機能させるには、事前に[hddtemp]のインストールが必要ですのでうまく表示されない場合は確認してみてください。
(下は、/dev/sdaの温度を表示)

HDD: ${execi 60 hddtemp /dev/sda -n -unit=C}.0°C

ワークスペースを表示

[TEXT]行以下に以下定義を追加することによって、ワークスペースの番号を表示することが可能です。

WORKSPACE : ${desktop}

また、以下では名称と番号を表示します。

${desktop_name}

各種順位を表示

[TEXT]行以下に[top xxx 数値]で指定した項目の順位に該当するものを表示することができます。[xxx]に指定できるのは、[name]/[pid]/[cpu]/[mem]/[mem_res]/[mem_vsize]/[time]/[uid]/[user]/[io_perc]/[io_read]/[io_write]/です。以下は5位までの名称/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}
${top name 5} ${top pid 5} ${top cpu 5} ${top mem 5}

RSSを表示

conkyはRSSの表示も可能です。ニュースのヘッドラインや天気予報、地震速報なんかを表示すると非常に便利かと思います。
下の例では、60分ごとにtenki.jpから東京の天気予報を取得し、一週間分の天気予報を表示します。
tenki.jpがRSSの配信サービスを終了してしまったため、RSSの取得先をlivedoorに変更しました。

${rss http://tenki.jp/component/static_api/rss/forecast/city_63.xml 60 item_titles 7}
${rss http://weather.livedoor.com/forecast/rss/area/130010.xml 60 item_title 1}
${rss http://weather.livedoor.com/forecast/rss/area/130010.xml 60 item_title 2}
${rss http://weather.livedoor.com/forecast/rss/area/130010.xml 60 item_title 3}
${rss http://weather.livedoor.com/forecast/rss/area/130010.xml 60 item_title 4}
${rss http://weather.livedoor.com/forecast/rss/area/130010.xml 60 item_title 5}
${rss http://weather.livedoor.com/forecast/rss/area/130010.xml 60 item_title 6}
${rss http://weather.livedoor.com/forecast/rss/area/130010.xml 60 item_title 7}

また、下の例では、30分ごとにtenki.jpから直近の地震速報5件を取得して表示します。
tenki.jpがRSSの配信サービスを終了してしまったため、RSSの取得先をlivedoorに変更し、ついでに取得するRSSも、より日常的な注意報・警報に変更しました。

${rss http://feed.tenki.jp/component/static_api/rss/earthquake/recent_entries.xml 30 item_desc 0}
${rss http://feed.tenki.jp/component/static_api/rss/earthquake/recent_entries.xml 30 item_desc 1}
${rss http://feed.tenki.jp/component/static_api/rss/earthquake/recent_entries.xml 30 item_desc 2}
${rss http://feed.tenki.jp/component/static_api/rss/earthquake/recent_entries.xml 30 item_desc 3}
${rss http://feed.tenki.jp/component/static_api/rss/earthquake/recent_entries.xml 30 item_desc 4}

${rss http://weather.livedoor.com/forecast/rss/warn/13.xml 60 item_title 1}
${rss http://weather.livedoor.com/forecast/rss/warn/13.xml 60 item_title 2}
${rss http://weather.livedoor.com/forecast/rss/warn/13.xml 60 item_title 3}
${rss http://weather.livedoor.com/forecast/rss/warn/13.xml 60 item_title 4}
${rss http://weather.livedoor.com/forecast/rss/warn/13.xml 60 item_title 5}

また、下の例では、15分ごとに直近のgoogleトップニュースを10件表示します。

${rss https://news.google.com/news/feeds?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss 15 item_titles 10}

以下は個人的に役に立つと思うRSSのリストです。他にも色々あると思うのですが、無難なところをあげてみましたので参考にどうぞ。

[.conkyrc]のサンプルダウンロード

※2015-05-31
「.conkyrc」を見直しました。
重複設定等を排除して更新した.conkyrcもアップロードしてありますので、もしよければ参照してください。

といった感じで.conkyrcを編集していった結果、最終的に以下のような感じになりました。
何かの参考になるかもしれませんのでアップしてあります。ほしい方は私の[.conkyrc]からどうぞ。

conky my setting