2014年2月3日月曜日

xmonadとシステムトレイ

うちのxmonadのステータスバーはdzenであり、システムトレイ的なものがない。

スマホで撮った写真を簡単にパソコンで見るために、Dropboxを使ってみたんだけれど、「システムトレイアイコンからうんぬんかんぬん」という説明があったので、なんとなくつけてみたくなった。


その前に、dropboxだ。

Dropbox

データ共有のアレ。
https://www.dropbox.com/

Archlinuxでは、AURにパッケージがある。

また、archlinuxのwikiは以下。
https://wiki.archlinux.org/index.php/dropbox


取り立ててメモする程のものはないけれど、一応メモ。

wikiにある通り、dropboxの使い方には「dropboxd」コマンドをxsession等から実行する使い方と、systemdでサービス(デーモン)として呼び出す使い方の2種類があるらしい。

下準備


どちらの使い方をするにしても、初期設定等についてあまり深く考えずに導入するためには以下の方法が良さげ。

1.アカウントは事前にWeb等から取得しておく。
2.yaourt等でdropboxのパッケージをインストールしたら、Xのターミナルエミュレータ上で、dropboxdコマンドを実行。ポップアップされる指示に従ってログインして、チュートリアルを最後までみる。

以上で、ホームディレクトリに必要なファイル等が用意されるはず。
あとは、適当にターミナル上でC-cとかして終了させる。

xmonadでタスクトレイがない場合、タスクトレイアイコンからの設定が出来ないので、別途dropbox-cliパッケージ(AUR)をインストールして操作するべきかもしれない。が、うちではほったらかし。
というか、さっき試しにインストールしようとしたら、チェックサムが合わない(?)とかいうエラーでインストール出来なかった。そのうち、覚えてたら再度試してみようかな。

systemdから


上記のタスクトレイアイコンからの設定では「自動起動」の項目なんかがある、DEやopenboxなんかのWMの場合は、その効果が反映されそうだが、xmonadを使ってる限りは関係なさそう。
なので、systemdのサービスとして使う。

systemdを使った場合、システムが動いていればアカウントにログインしていようがいまいが、ディレクトリの同期をしてくれるっぽい。一方、Xの起動を前提としていないので、タスクトレイのアイコンが出てこない。

が、wikiにある通り、次の設定をすればシステムトレイアイコンがでてくる。

さて、この設定の仕方なんだけどwikiでは
「/etc/systemd/system/dropbox@.service」のファイルに

.include /usr/lib/systemd/system/dropbox@.service
[Service]
Environment=DISPLAY=:0

という内容を書くといいとなっている。
設定の内容は、元の設定に環境変数の設定(X上に表示を行う)を追加しているものだ。

systemdでは、この「/etc/systemd/system/」ディレクトリ以下に「ファイル」を作成すると「/usr/lib/systemd/system/」ディレクトリ以下の同名の設定ファイルの内容が上書き設定される仕組みになっている。

しかし、今回の場合は、一部の追加であり、そのため、わざわざ、元ファイルを読み込んでいる。

この様な時には、追加設定の方法をとる方が格好良さそう。
その方法は、「/etc/systemd/system/」ディレクトリ以下に「設定ファイル名.d」というディレクトリを作る。上の場合なら「/etc/systemd/system/dropbox@.service.d/」というディレクトリだ。そして、次にそのディレクトリの中に「hoge.conf」というファイルを作りそこに追加したい内容を記述すればよい。

さて、実際には、dropboxのサービスファイル名はユーザー名が入って構成される。うちの場合「neko」というユーザーなので

# systemctl enable dropbox@neko.service

であり、システムトレイアイコンのためには

#mkdir /etc/system/systemd/dropbox@neko.service.d

としてディレクトリを作成した上で、

#vim /etc/system/systemd/dropbox@neko.service.d/env.conf

とかして

[Service]
Environment=DISPLAY=:0

とだけ、env.confファイルに記述すればよい。

https://wiki.archlinux.org/index.php/systemd


stalonetray


本題の、xmonadでシステムトレイだが特に難しいことはなにもない。
「stalonetray」という単独のシステムトレイアプリがある。

うちのdzenは、ご存知の通り「つぎはぎ」されている。
そして、システムトレイもこれと同様にstalonetrayを「つぎはぐ」のだ!


本家
http://stalonetray.sourceforge.net/manpage.html

Archのwiki
https://wiki.archlinux.org/index.php/Stalonetray


とりあえず、実行しておけば、そこにシステムトレイアイコンが表示される。

dzenとうまく「つぎはぎ」するコツは以下の2点だ。

背景色を同じにする

dzenの背景色と同じにすることで、一体感をだす。
-bg "#000000"


高さを合わせる


dzenと高さを合わせる。
dzenは「-h」オプションでピクセル単位の高さを指定している。

一方、stalonetray側の高さの指定は「--geometry 」オプションで行い、その引数の書式は

widthxheight[+x[+y]]
となっていて、例示すれば「1x1+0-0」という感じだ。
ここで、注意すべきはwidthもheightも単位はアイコン何個分か?である。つまり、ピクセルではない。

では、アイコン1個の大きさはどうやって決まるか?
「--slot-size」オプションにピクセル数を指定して使う。

dzenの高さが20なら、「--slot-size 20」として、--geometryのheightは1にしておけば良い。

「--slot-size」の指定は横幅も同じ数値になるので、widthの調整もこの数字に着目して計算すれば良い。

あとは、適当でも良さげ。
stalonetrayのオプションの指定は、コマンドラインに並べても、設定ファイル(デフォルトでは~/.stalonetrayrc)を読み込んでもどっちでもいける。

xmonad.hsの中で呼び出した場合には、コマンドラインに並べたオプションにして、dzenとの関係から、長さを計算で出した方がスマートっぽいかも。

上手につぎはぎ出来ました

と思って晒してみたけど、特にスマートっぽくもないか。

まぁ、システムトレイアイコンがあると見た目が今時っぽくなった。





0 件のコメント:

コメントを投稿