Conky

提供: ArchWiki
2019年9月25日 (水) 23:53時点におけるKusakata.bot2 (トーク | 投稿記録)による版 (Pkg/AUR テンプレートの更新)
ナビゲーションに移動 検索に移動

Conky は X Windows System 向けのシステム監視ソフトウェアです。GNU/Linux と FreeBSD で利用することができます。GPL ライセンスでリリースされているフリーソフトウェアになります。CPU, メモリー, スワップ, ディスク容量, 温度, top, アップロード, ダウンロード, システムメッセージなど、様々なシステムの情報を Conky はモニターすることが可能です。色々と設定することができますが、設定は少々わかりにくいかもしれません。Conky は torsmo のフォークです。

インストールと設定

conky パッケージをインストールしてください。機能が追加された他のパッケージについては #AUR パッケージを見てください。

ローカルの設定ファイルを作成してください:

$ mkdir -p ~/.config/conky
$ conky -C > ~/.config/conky/conky.conf

~/.config/conky/conky.conf を編集することで好きに conky をカスタマイズできます。こちらのページ には設定ファイルのサンプルが載っています。

設定ファイルを編集すると、保存した瞬間に変更が適用されます。X セッションをログアウト・ログインする必要はありません。設定を何かテストしたいときは、設定ファイルを保存してみて conky のウィンドウがどうなったか確認するのが良いでしょう。

conky の素晴らしい機能として /var/log/ ファイルからログメッセージを読み込んでデスクトップに表示させることができます。ほとんどのログファイルは root しか読めないようになっていますが、conkyroot で動作させることは推奨されません。代わりに使用しているユーザーを log グループに追加してください:

# usermod -aG log username

AUR パッケージ

基本の conky パッケージに加えて、追加のコンパイルオプションを有効にした AUR のパッケージがいくつか存在します:

  • conky-cli — X11 依存を取り除いた Conky
|| conky-cliAUR
  • conky-lua — Lua サポートが付いた Conky
|| conky-luaAUR
  • conky-lua-nv — Lua と Nvidia サポートが付いた Conky
|| conky-lua-nvAUR
  • conky-nvidia — Nvidia サポートが付いた Conky
|| conky-nvidiaAUR[リンク切れ: パッケージが存在しません]

ヒントとテクニック

設定ファイルの構文の変更

Conky 1.10 から、設定ファイルは以下のように Lua の構文で書き直されました:

 conky.config = {
   -- Comments start with a double dash
   bool_value = true,
   string_value = 'foo',
   int_value = 42,
 }
 conky.text = [[
 $variable
 ${evaluated variable}
 ]]

下で紹介しているサンプルは以下のような古い構文を使用している場合があります:

bool_value yes
string_value 'foo'
int_value 42

古い構文を新しい Lua 構文に変換する Lua スクリプトが こちら にあります。

何かがおかしかったり、スクリプトを信用できない場合、デフォルトの設定ファイルから設定をやり直してください:

$ conky -C > conky.conf.default

KDE4 や Xfce4 で完全透過を有効にする

バージョン 1.8.0 から、Conky は完全透過をサポートしています。有効にするには以下の行を conky.conf に追加して下さい:

own_window_transparent = true,

上のオプションは OWN_WINDOW_ARGB_VISUAL yes オプションと一緒に使うのは望ましくありません。下で説明している feh の方法を置き換えます。

ノート: Xfce はコンポジットの有効化を必要とします。[1] を見て下さい。

Xfce4 で自動起動

conky.conf ファイルに以下を追加:

background = true,

この変数は Conky をバックグラウンドにフォークします。ウィンドウをデスクトップ上に常に表示させ、全てのワークスペースに張り付かせてタスクバーには表示したくない場合、以下の引数を追加してください:

own_window = true,
own_window_type = 'override',

override オプションは conky のウィンドウがウィンドウマネージャの制御下から外れるようにします。

~/.config/autostart/conky.desktop を追加:

[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=conky
Comment=
Exec=conky -d
StartupNotify=false
Terminal=false
Hidden=false

ちらつきを防止する

Conky はちらつきを防止するために X サーバーの Double Buffer Extension (DBE) サポートを必要とします。これがないとウィンドウを高速に更新することができません。/etc/X11/xorg.conf"Module" セクションに Load "dbe" 行を追加することで有効にできます。(1.8.x パッチ以上では) xorg.conf ファイルは個別の設定ファイルが入っている /etc/X11/xorg.conf.d で置き換えられています。DBE は自動でロードされます。

ダブルバッファリングを有効にするには conky.conf に以下を追加してください:

double_buffer = true,

カスタムカラー

クラシックなプリセットカラーの他に (white, black, yellow...)、カラーネームコードを使ってカスタムカラーを設定することができます。色のコードを確認するには、色選択アプリを使って下さい。公式リポジトリに入っている gcolor2 パッケージが色の名前を教えてくれます。カラーコードは6桁の16進数からなります (0-9, A-F)。カスタムカラーを使うには設定ファイルに以下の行を追加してください:

color0 = 'white', --convention for standard named colors
color1 = '00CC00', --convention for hex colors: no pound sign

そして、TEXT セクションを編集するときに、事前に定義したカスタムカラー番号を使って下さい。

デュアルスクリーン

デュアルスクリーン設定を使う場合は、conky のウィンドウを配置するための2つのオプションをいじる必要があります。例えば 1680X1050 ピクセルの解像度を使っていて、左モニターの中央上にウィンドウを置きたい場合、以下を使います:

alignment = 'top_left',
gap_X = 840,

alignment オプションはそのままの意味で、gap_X オプションは画面の左端からの距離をピクセルで表します。

xinerama_head オプションも設定する必要があるかもしれません。

デスクトップの表示で最小化させない

Compiz を使っている場合: 'デスクトップを表示' ボタンやキーバインドで、他のウィンドウと一緒に Conky も最小化されてしまう場合、Compiz の設定マネージャを起動して、"General Options" を開いて "Hide Skip Taskbar Windows" オプションのチェックを外して下さい。

Compiz を使っていない場合は、conky.conf を編集して以下の行を追加または修正してください:

own_window_type = 'override',

もしくは:

own_window_type = 'desktop',

詳しい違いについては conky の man ページを参照。ただし後者のオプションでは Openbox などでリサイズのキーバインドを使ってウィンドウを conky の縁に調整することができます。前者は出来ません。

GNOME との統合

GNOME で Conky を表示したときに問題が生じる場合、以下の行を conky.conf に追加:

own_window yes
own_window_type conky
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

透過に問題が起こる場合、以下の行を追加してみてください:

own_window_argb_visual yes
own_window_argb_value 255

Razor-qt との統合

Conky のデフォルト設定では、後ろをクリックするとデスクトップからウィンドウが消えることがあります。以下の行を追加してください:

conky.conf
own_window yes
own_window_class Conky
own_window_type normal
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_transparent yes

パッケージの更新情報を表示

  • Pacman には checkupdates という公式リポジトリのパッケージアップデートを表示する自前のスクリプトが入っています。${execpi 3600 checkupdates | wc -l} でパッケージの合計が表示されます。
  • Paconky - ユーザー定義形式でパッケージのアップデート情報を表示します。${execpi} コマンドを使うことでこのプログラムの出力は conky に含めることができます。
  • Scrolling Notifications - スクロールするアップデート通知を表示。Paconky と作者が同じ。
  • Perl Script - Paconky の作者によるシンプルで簡単なスクリプト。アップデートが必要なパッケージの数だけを表示。
  • Python Script - Python で書かれたアップデート通知プログラム。
  • Bash Script - ShowSize を有効にしたユーザーのための Bash スクリプト。

天気予報を表示

このスレッド を参照。

カウントダウンタイマーを表示

ConkyTimer は作業の残り時間を表示するシンプルなカウントダウンタイマーです。

conkytimer "<task description>" <min> でタイマーを開始できます。

RSS フィードを表示

外部のスクリプトを実行したり Conky に出力したりすることなく、RSS フィードをネイティブに表示する機能が Conky には備わっています。例えば、Planet Arch の最新の記事のタイトル10件を表示して一分ごとにフィードを更新したい場合、以下を conky.confTEXT セクションに挿入します:

${rss https://planet.archlinux.org/rss20.xml 1 item_titles 10 }

Arch フォーラムの rss フィードを表示したい場合、次の行を追加します:

${rss https://bbs.archlinux.org/extern.php?action=feed&type=rss 1 item_titles 4}

1 は更新間隔で (15分がデフォルト)、4 は表示するアイテムの数です。

rTorrent の統計を表示

このスレッドを参照。

WordPress ブログの統計を表示

python で書かれた ConkyPress という名前の拡張を使うことで表示できます。

新規メールの数を表示

Gmail

方法 1

どこかに gmail.py という名前のファイルを作って (ここでは ~/.scripts/ を使用) 以下の Python コードを入力してください:

gmail.py
#!/usr/bin/env python

from urllib.request import FancyURLopener

email = 'your email' # @gmail.com can be left out
password  = 'your password'

url = 'https://%s:%s@mail.google.com/mail/feed/atom' % (email, password)

opener = FancyURLopener()
page = opener.open(url)

contents = page.read().decode('utf-8')

ifrom = contents.index('<fullcount>') + 11
ito   = contents.index('</fullcount>')

fullcount = contents[ifrom:ito]

print(fullcount + ' new')
方法 2

以下のスクリプトは Python の機能を活用しています:

gmail.py
#! /usr/bin/env python

import urllib.request
from xml.etree import ElementTree as etree

# Enter your username and password below within quotes below, in place of ****.
# Set up authentication for gmail
auth_handler = urllib.request.HTTPBasicAuthHandler()
auth_handler.add_password(realm='mail.google.com',
                          uri='https://mail.google.com/',
                          user= '****',
                          passwd= '****')
opener = urllib.request.build_opener(auth_handler)
# ...and install it globally so it can be used with urlopen.
urllib.request.install_opener(opener)

gmail = 'https://mail.google.com/gmail/feed/atom'
NS = '{http://purl.org/atom/ns#}'
with urllib.request.urlopen(gmail) as source:
    tree = etree.parse(source)
fullcount = tree.find(NS + 'fullcount').text

print(fullcount + ' new')

次の行を conky.conf に追加すれば、5分 (300秒) ごとに新しいメールがないか Gmail アカウントをチェックして表示するようになります:

${execpi 300 python ~/.scripts/gmail.py}
方法 3

同じやり方で curl, grep, sed を使う方法:

$ curl -s -u email:password https://mail.google.com/mail/feed/atom | grep fullcount | sed 's/<[^0-9]*>//g'

emailpassword はあなたのデータに置き換えて下さい。

方法 4

また、stunnel パッケージの stunnel を使うこともできます。

以下の設定は Conky の FAQ から引用しています。

以下のように /etc/stunnel/stunnel.conf を編集して、stunnel.service起動:

# Service-level configuration for TLS server
[imap]
client = yes
accept  = 143
connect = imap.gmail.com:143
protocol = imap
sslVersion = TLSv1
# Service-level configuration for SSL server
[imaps]
client = yes
accept  = 993
connect = imap.gmail.com:993

後は conky.conf だけです:

imap localhost username * -i 120 -p 993
TEXT
Inbox: ${imap_unseen}/${imap_messages}

Here I used * as the password for conky to ask for it at start, but you do not have to do it.

IMAP + SSL と Perl を使う

Conky には IMAP アカウントのサポートが組み込まれていますが SSL はサポートしていません。このフォーラムへの投稿 にあるスクリプトを使うことで利用することができます。perl-mail-imapclientAURperl-io-socket-ssl パッケージの Perl/CPAN Modules Mail::IMAPClient と IO::Socket::SSL が必要です。

Conky に読み込ませる場所に imap.pl という名前のファイルを作成してください。このファイルには、以下の内容を記述します (必要なところは書き換えて下さい):

#!/usr/bin/perl

# gimap.pl by gxmsgx
# description: get the count of unread messages on imap

use strict;
use Mail::IMAPClient;
use IO::Socket::SSL;

my $username = 'example.username'; 
my $password = 'password123'; 

my $socket = IO::Socket::SSL->new(
  PeerAddr => 'imap.server',
  PeerPort => 993
 )
 or die "socket(): $@";

my $client = Mail::IMAPClient->new(
  Socket   => $socket,
  User     => $username,
  Password => $password,
 )
 or die "new(): $@";

if ($client->IsAuthenticated()) {
   my $msgct;

   $client->select("INBOX");
   $msgct = $client->unseen_count||'0';
   print "$msgct\n";
}

$client->logout();

conky.conf に次を追加:

${execpi 300 ~/.conky/imap.pl} 

ファイルの位置は適宜変更してください。

Gmail を使う場合、アプリパスワードを 生成 する必要があります。

もしくは、上に書かれているように stunnel を使うこともできます: #Gmail

IMAP と PHP を使う

PHP を使う方法もあります。PHP をインストールして /etc/php/php.iniextension=imap.so をアンコメントしてください。

それから imap.php という名前のファイルを作成して実行可能属性を付与してください:

$ chmod +x imap.php

ファイルの中身は以下のようにします (適宜変更を加えてください):

#!/usr/bin/php
<?php
// See http://php.net/manual/function.imap-open.php for more information about
// the mailbox string in the first parameter of imap_open.
// This example is ready to use with Office 365 Exchange Mails,
// just replace your username (=email address) and the password.
$mbox = imap_open("{outlook.office365.com:993/imap/ssl/novalidate-cert}", "username", "password");

// Total number of emails
$nrTotal = imap_num_msg($mbox);

// Number of unseen emails. There are other ways using imap_status to count
// unseen messages, but they don't work with Office 365 Exchange. This one does.
$unseen = imap_search($mbox, 'UNSEEN');
$nrUnseen = $unseen ? count($unseen) : 0;

// Display the result, format as you like.
echo $nrUnseen.'/'.$nrTotal;

// Not needed, because the connection is closed after the script end.
// For the sake of clean public available scripts, we are nice to
// the imap server and close the connection manually.
imap_close($mbox);

conky.conf に以下を追加:

${execpi 300 ~/.conky/imap.php} 

上記のスクリプトは A/B と表示します。A は未読メールの数で B はメールボックスに存在するメールの合計数です。imap_Status などの PHP 関数を使うことで他の情報も表示できます (http://php.net/manual/function.imap-status.php)。IMAP に関する PHP ドキュメントを見てください: http://php.net/manual/ref.imap.php

有効なネットワークインターフェイスを表示

ネットワークインターフェイスが有効化どうかテストするために、conky の if_existing 変数を使ってインターフェイスの operstate を確認できます。以下はインターフェイスが wlo1 の場合の例です:

draw_graph_borders yes 
${if_existing /sys/class/net/wlo1/operstate up}
${color #0077ff}Net Down:$color ${downspeed wlo1}      ${color #0077ff}Net Up:$color ${upspeed wlo1}
${color #0077ff}${downspeedgraph wlo1 32,155 104E8B 0077ff} $alignr${color #0077ff}${upspeedgraph wlo1 32,155 104E8B 0077ff}
${endif}

次の画像のように表示されます: https://i.imgur.com/pQQbsP6.png

UTF-8 マルチバイト文字のスクロールの修正

現在のバージョンの conky (1.9.0) には文字列ではなくバイト数によってスクロールするテキストが増えるというバグが存在し [2]、結果としてマルチバイト文字を含むテキストでスクロールが消えたり現れたりするということが起こります。このバグを修正するパッチをあてたパッケージが AUR に存在します: conky-utfscrollAUR[リンク切れ: パッケージが存在しません]

nvidia サポートのサンプルリングスクリプト

[3] を参照。

記号フォントに関する注意

装飾がある conky.conf では大抵 PizzaDude Bullets と Pie Charts for Maps フォントを使っています。これらのフォントはそれぞれ ttf-pizzadude-bulletsAURttf-piechartsformapsAUR[リンク切れ: アーカイブ: aur-mirror] として AUR からインストールすることができ、もしくはフォントの記事に書かれている方法を使って手動でインストールすることもできます。

本来よりフォントが小さく表示される

conky のフォントがやけに小さく表示されたり、ちゃんと並ばない場合、infinality の freetype2 パッチのデフォルト設定が原因かもしれません。この設定は 96 DPI ではなく 72 DPI でフォントを表示するプログラムに問題を生じさせます。たとえシステムを 96 DPI に設定していても関係ありません。この問題を修正するには /etc/fonts/infinality/infinality.conf を開いて DPI のセクションを探して 72 から 96 に変更してください。

完全透過を有効にする万能の方法

透過は conky における KAIJU ですが、xcompmgrtransset-df を使ってどんな環境やウィンドウマネージャでも完全透過を適用する方法が存在します。xcompmgrtransset-dfインストールしてください。

ノート: 他のコンポジットマネージャを使っている場合、この方法は干渉することがあります。

xcompmgr のドキュメントを確認してどのコンポジットオプションを有効にすべきか決めて下さい。以下は標準的なコマンドになります。

$ xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &

conky & で conky が実行中か確認してください。transset-df を使って Conky ウィンドウの透過を有効にします。'.5' は 0 - 1 の好きな値に設定してください。

$ transset-df .5 -n Conky

これで conky のウィンドウが完全透過します。No Window matching Conky exists! のようなエラーが表示される場合、conky が動作しているか確認してから、xprop を使って conky のウィンドウをクリックして、transset-df に指定するべき名前を確認してください。

$ xprop | grep WM_NAME
WM_NAME(STRING) = "Conky (ArchitectLinux)"

上記の場合、conky で合っていますが、別の文字列が出力された場合は、それに合わせて指定するようにしてください。conky.confown_window_type オプションを panel に設定していた場合、xprop を実行しても何も出力されないことがあります。その場合は dock, normal, override, desktop などを使うようにしてみてください。

~/.xinitrc に以下を記述することで X の起動後に conky に透過を適用することができます:

xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &
conky -d; sleep 1 && transset-df .5 -n Conky

参照