Top > Linux >

conky

conky  Linux 

Contents

  1. スクリーンショット
  2. 日本語表示
  3. カレンダーの表示
    1. gcal
    2. cal
    3. TODOリスト
  4. RSSフィードの表示(標準)
  5. RSSフィードの表示(XSLT)
    1. XSLTスタイルシート
    2. ターミナルで実行確認
    3. .conkyrcの設定
  6. 天気予報の表示(RSS)
  7. 地震速報の表示(RSS)
  8. TV番組(RSS)
  9. 出力を整形するのに有用なコマンド群

conkyに関するメモ。

スクリーンショット

conky_screenshot.004.pngconky_screenshot.003.pngconky_screenshot.002.pngconky_screenshot.001.png
拡大表示拡大表示拡大表示拡大表示
.conkyrc
Background

日本語表示

日本語を表示するために、xftとUTF-8を有効にする。

use_xft = yes
override_utf8_locale yes
xftfont Kochi Gothic:size=8

上記ではデフォルトのフォントに東風ゴシックを指定している。
${font}を利用すれば部分的に他のフォントに切り替えられる。

使えるフォントはfc-listで確認できる。

$ fc-list
...

フォントの内容を見るにはxfdが便利

$ xfd -fa 'VL ゴシック'

カレンダーの表示

カレンダーの表示には、カレンダーを表示できるコマンド(cal,gcal等)の出力を利用する。
conkyには、今日の日付の強調方法が指定できるgcalの方が相性がよい。

gcal

ターミナルでの実行

$ gcal --type=standard --highlighting='<:>:[:]' -s Su . | grep -v "^ *$" \
| colrm 23 26 | colrm 45 48
                            2009/2010
      December              January               February
 Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
        1  2  3  4  5                  1  2      1  2  3  4  5  6
  6  7  8  9 10 11 12   3  4  5  6  7  8  9   7  8  9 10 11 12 13
 13 14 15 16 17 18 19  10 11 12 13 14 15 16  14 15 16 17 18 19 20
 20 21 22 23 24 25 26 <17>18 19 20 21 22 23  21 22 23 24 25 26 27
 27 28 29 30 31        24 25 26 27 28 29 30  28                  
                       31                                        

無駄な空白が多いので、grepとcolrmでトリムしている。

.conkyrc設定例
${execi 600 gcal --type=standard --highlighting='<:>:[:]' -s Su . |
  grep -v "^ *$" | colrm 23 26 | colrm 45 48}
execiで10分に1度実行している。(実際には一行で記述)

cal

gcalは日本語での出力に対応していないので、日本語表示にこだわるならcalの方が良い。

ターミナルでの実行

$ cal -3
      12月 2009             1月 2010              2月 2010      
日 月 火 水 木 金 土  日 月 火 水 木 金 土  日 月 火 水 木 金 土
       1  2  3  4  5                  1  2      1  2  3  4  5  6
 6  7  8  9 10 11 12   3  4  5  6  7  8  9   7  8  9 10 11 12 13
13 14 15 16 17 18 19  10 11 12 13 14 15 16  14 15 16 17 18 19 20
20 21 22 23 24 25 26  17 18 19 20 21 22 23  21 22 23 24 25 26 27
27 28 29 30 31        24 25 26 27 28 29 30  28                  
                      31
.conkyrc設定例
${execi 600 cal -3}
execiで10分に1度実行。

TODOリスト

以前は、以下のようにTODOリスト(ただのテキストファイル)を並べて表示なんてこともしていた。

ターミナルでの実行

$ gcal --type=standard --highlighting='<:>:[:]' -s Su | \
  grep -v "^ *$" | paste - ~/.todo | nkf -W -e

     August 2006        ToDo:
 Su Mo Tu We Th Fr Sa   ・xxxx
        1  2  3  4  5   ・08/12:xxxxxx
  6  7  8< 9>10 11 12   ・08/22:xxxx
 13 14 15 16 17 18 19   ・08/25:xxxxx
 20 21 22 23 24 25 26   ・08/27:xxxxxx
 27 28 29 30 31         ・ivtv,conky
.conkyrc設定例
${execi 60 gcal --type=standard --highlighting='<:>:[:]' -s Su |
  grep -v "^ *$" | paste - ~/.todo}
(実際には一行で記述)

RSSフィードの表示(標準)

RSSフィードの表示にはconky標準のrss変数が利用できる。

書式はこんな感じ。

rss <url> <delay_in_minutes> <action> <item_num>

actionには、feed_title, item_title, item_desc, item_titlesが指定でき、item_titleとitem_descの場合は後ろの数字がインデックス番号、item_titlesの場合は後ろの数字がアイテムの総数(行数)になる。

.conkyrc設定例
${rss http://www.pheedo.jp/f/slashdot_japan 60 feed_title}
${rss http://www.pheedo.jp/f/slashdot_japan 60 item_titles 10}

ただし、

  • フィードアイテムのインデントができない
  • 広告行を削除するなどのgrep処理が行えない

など不便なところもあるので、下のXSLTがおすすめ。

RSSフィードの表示(XSLT)

現在は標準でRSS機能がサポートされましたが、機能的に足りないところがあるので、以前から利用していたXSLTを今でも利用しています。

ご存知の通りRSSはXMLで配信されているので、XSLTを使えば簡単にテキスト形式の一覧に変換できます。一連の流れは、

  1. lynxでRSSをダウンロード
  2. xsltprocにスタイルシートと共に渡し、テキスト形式に変換
  3. headコマンドなどで出力行数を調整

といった感じ。
スラッシュドットなどは広告が入ったりするのでheadコマンドの前にgrepで広告行を削除する処理が入ります。

XSLTスタイルシート

RSSのXMLをテキスト一覧形式に変換するには、XSLTスタイルシートが必要です。

私が適当に作成したXSLTのスタイルシートを公開しています。
一応、RSS1.0、RSS2.0とAtomに対応しています。
下のページからerss.xslをダウンロードして適当な場所に保存してください。

あえてタイトルしか表示しない超シンプル設計です。更新日など他の情報も表示したい方はご自由に編集して利用してください。ただし、conky上で表示するにはタイトルぐらいにしておいた方が見ためすっきりします。

ターミナルで実行確認

とりあえず、以下の様にターミナルで実行して動作するか確認してください。
(コマンドを見れば明白ですが、前提ソフトウェアとしてlynx, xsltprocが必要です。でも、rssをダウンロードしてXSLT変換ができれば良いのでlynx,xsltprocにこだわる必要はありません。)

$ lynx -source "http://www.pheedo.jp/f/slashdot_japan" | \
  xsltproc ~/xslt/erss.xsl - | nkf -W -e

スラッシュドット ジャパン :
  サーバの暑さ対策はどうしてますか?
  夏休みの課題に手作りプラネタリウムはいかが?
  LinuxプリインストールのThinkPadが近日登場?
  旧バージョンのVine Linux購入者にTシャツをプレゼント
  AD: ★オープンソースが変える未来が見える★
  バイオテロと闘うためのナノバーコード
  コミックマーケット 70 開催
  ソニーがSkype搭載のコミュニケーションデバイス「mylo」発表
  Turboが復活
  Linuxカーネルコミュニティの政治力学

この例では、最後にnkfを通して文字コードをEUCに変換してます。
ターミナルにあわせて変更してください。

バージョン2.0から、パラメータにより

  • フィードタイトルの表示・非表示
  • インデント文字列

がxsltprocの引数で指定出来る様になりました。

タイトルの非表示

$ lynx -source "http://www.pheedo.jp/f/slashdot_japan" | \
  xsltproc --param showtitle "false()" ~/xslt/erss.xsl -
  サーバの暑さ対策はどうしてますか?
  夏休みの課題に手作りプラネタリウムはいかが?
  LinuxプリインストールのThinkPadが近日登場?
  旧バージョンのVine Linux購入者にTシャツをプレゼント
  AD: ★オープンソースが変える未来が見える★
...

インデントを空文字''に設定

$ lynx -source "http://www.pheedo.jp/f/slashdot_japan" | \
  xsltproc --param showtitle "false()" --param indent "''" ~/xslt/erss.xsl -
サーバの暑さ対策はどうしてますか?
夏休みの課題に手作りプラネタリウムはいかが?
LinuxプリインストールのThinkPadが近日登場?
旧バージョンのVine Linux購入者にTシャツをプレゼント
AD: ★オープンソースが変える未来が見える★
...

indentとして"'-'"を指定

$ lynx -source "http://www.pheedo.jp/f/slashdot_japan" | \
  xsltproc --param showtitle "false()" --param indent "'-'" ~/xslt/erss.xsl -
-サーバの暑さ対策はどうしてますか?
-夏休みの課題に手作りプラネタリウムはいかが?
-LinuxプリインストールのThinkPadが近日登場?
-旧バージョンのVine Linux購入者にTシャツをプレゼント
-AD: ★オープンソースが変える未来が見える★
...

.conkyrcの設定

.conkyrc
${texeci 3600 lynx -connect-timeout=5 -source "http://www.pheedo.jp/f/slashdot_japan" |
xsltproc ~/xslt/erss.xsl - | grep -v "^ *PR:" | head -n 6}
(実際は一行で記述)
  • texeciによりコマンドを別スレッドで実行する
    ネットからのダウンロードが必要なので、コマンド処理は重くなる。
    そこでこれによりconky全体の描画を遅延させないために別スレッドで実行する。
  • 60分(3600秒)毎に実行する。フィードの更新頻度に応じて適宜設定。
  • 念のためlynxにはタイムアウトを設定。
  • xsltprocにerss.xslを保存したパスを指定
  • スラッシュドットは広告が入るのでgrepを使って"PR:"で始まる行を削除
  • headでタイトルも含め6行を表示

文字化けが起こる場合には、xslを編集して出力文字コードを変更するか、nkfで文字コードの変換を行う必要があります。

天気予報の表示(RSS)

conkyのバージョン1.7からは標準でweatherという機能があります。私の環境はまだ1.6なので試していませんが、アイコンも表示できる様です。ここではRSSフィードを使った天気予報の表示を行っています。

conkyで天気予報を表示するため、ライブドアが提供しているWeather HacksのRSSを利用します。

weatherというファイル名で以下のコマンドを保存

~/bin/weather
lynx -connect-timeout=2 -source "http://weather.livedoor.com/forecast/rss/13/63.xml" |\
xsltproc --param showtitle "false()" ~/xslt/erss.xsl - | \
grep -v "^ *\\[ PR \\]" | head -n 5 | sed "s/- //g" | \
awk '{printf "%-12s %s %s(%s)\n",$7,$4,$5,$6}'
  • RSSフィードの表示(XSLT)のerss.xslを使ってフィードアイテム一覧を取得
    指定しているURLは東京の天気、フィードタイトルは非表示に設定
  • grepを使っってPR行を削除
  • headで5日分を取得
  • sedで無駄な区切り文字列を削除
  • awkで出力を整形

ターミナルでの実行例(文字コードの変換のためnkfを使用)

$ weather | nkf -e
10月4日(水) 東京 曇のち雨(最高気温24℃)
10月5日(木) 東京 雨(最高気温21℃)
10月6日(金) 東京 曇時々雨(最高気温23℃)
10月7日(土) 東京 雨のち曇(最高気温23℃)
10月8日(日) 東京 曇時々晴(最高気温23℃)

ちなみに、awkの{}括弧が.conkyrcの${texeci}の{}括弧と干渉するため、上記の様にshスクリプトとして保存しておき、それを${texeci}で呼び出している。

.conkyrc設定例
${texeci 3600 weather}

地震速報の表示(RSS)

ターミナルでの実行例

$ lynx -connect-timeout=5 -source "http://weather.livedoor.com/forecast/rss/earthquake.xml" | xsltproc --param showtitle "false()" --param indent "''" ~/xslt/erss.xsl - | grep -v "^\[ PR \]" | head -n 10
10日19:56 [ 最大震度 ] 震度 1 [ 震源地 ] 北海道北西沖
10日18:43 [ 最大震度 ] 震度 1 [ 震源地 ] 茨城県沖
10日17:32 [ 最大震度 ] 震度 1 [ 震源地 ] 秋田県内陸南部
10日15:29 [ 最大震度 ] 震度 1 [ 震源地 ] 宮城県沖
10日14:10 [ 最大震度 ] 震度 2 [ 震源地 ] 茨城県北部
10日13:56 [ 最大震度 ] 震度 3 [ 震源地 ] 秋田県内陸北部
10日13:43 [ 最大震度 ] 震度 1 [ 震源地 ] 福島県沖
10日13:35 [ 最大震度 ] 震度 1 [ 震源地 ] 茨城県沖
10日06:52 [ 最大震度 ] 震度 3 [ 震源地 ] 宮城県中部
10日03:33 [ 最大震度 ] 震度 1 [ 震源地 ] 岩手県沖

文字化けする場合はnfkなどで要変換。

.conkyrc設定例
${texeci 600 lynx -connect-timeout=5 -source "http://weather.livedoor.com/forecast/rss/earthquake.xml" | xsltproc --param showtitle "false()" --param indent "''" ~/xslt/erss.xsl - | grep -v "^\[ PR \]" | head -n 10}
(実際は一行で記述)
  • texeciによりコマンドを別スレッドで実行する
  • 10分(600秒)毎に実行する。(速報にならないが…)
  • 念のためlynxにはタイムアウトを設定。
  • xsltprocにerss.xslを保存したパスを指定
  • 広告が入るのでgrepを使ってPR行を削除
  • headで最新10個までを表示
  • 文字化けなどする場合はfontの指定が必要

TV番組(RSS)

TV番組表は、日本では現状XMLなどコンピュータが扱いやすい形式で自由に取得するといった事ができない。
よく知らないがきっとお金とか権利とかが絡んでるのかな。

放送中の番組であれば、テレビ王国がRSSを公開している。

以下、標準のRSS機能を使う例。
番組タイトルしか表示できない。

.conkyrc設定例
${rss http://tv.so-net.ne.jp/rss/schedulesByCurrentTime.action?group=10&stationAreaId=23 60 item_titles 20}

出力を整形するのに有用なコマンド群

cat
ファイルを出力
tac
行を逆順にしてファイルを出力
nkf
文字コードを変換
colrm
出力の一部を縦にカットする(何列目以降を出力しない等)
column
行を列にして出力する
sort
ソートする
rev
各行の文字順序を反転させる(12345 -> 54321等。正直使い所はわからない)
uniq
重複行を削除して出力
tr
文字を変換
paste
複数ファイルの各行をマージして出力する事ができる。(n行目には全てのファイルのn行目がつながって出力される)
cut
既に列形式(例えばcsv)のファイルから特定の列のみ出力する事ができる。
expand
タブをスペースに変換
unexpand
スペースをタブに変換
head
先頭の指定行を出力
tail
末尾の指定行を出力
bc
数値計算を出力
sed
正規表現による変換
awk
色々できる。というかなんでもあり。
xsltproc
XSLTプロセッサ。Gentooでのパッケージ名はdev-libs/libxslt。
各種XMLをXSLTでテキスト形式に変換すれば、conky上で表示できる。
tidy
HTML整形ツール。Gentooでのパッケージ名はapp-text/htmltidy。
xmlとしては不正である様なhtml,xhtml,xml等を正常なhtml,xhtml,xmlに変換できる。
lynxなどでWebから取得した適当なhtmlをxmlに変換し、xsltやxpath,xquery等でその内容からデータを取得したい場合に重宝する。