Skype plugin for BitlBeeを使ってみた

以前こんな記事を書いたけど,今回はお世辞にも良い出来とは言い難かった Skype4IRC ではなく, MSN MessengerGoogle Talk, iChat(AIM) を束ねるのに使っている BitlBee の拡張である Skype plugin for BitlBee を使う.

図の書き方がよくわからなかったので適当に描いてしまったが,やりたいことは要するに上のようなこと.チャットのために Skype は基本的につけっぱなしにしておくが,出先でつけた場合についてもよきに計らって欲しい. server-0 はいかなる時もどこからでも参照できる場所にいるが, Skype を起動しているパソコンは server-0 から見てどこにいるかわからない.またいつ起動しているかもわからない.
ちなみに server-0 と server-1 が分かれている必要はあまりない.単に armel の server-0 上で走る Skype のバイナリが提供されていなかったというだけの話だが,結果的に何をやっているのかわかったものじゃないいかがわしいバイナリを隔離することになったので,悪くなかったかもしれない.プリントサーバに合掌.

mobile PC (Debian squeeze, i386)

Skype plugin for BitlBee は wheezy(testing) 以上のリポジトリにいる. sid のものの方が BitlBee 自体のバージョンも 3.0.1 と高いが,下手をしてライブラリ周りを引っかき回されるのは勘弁なので,無難に testing からもらう.

mobile PC % cat<<EOF | sudo tee -a /etc/apt/sources.list
## Debian wheezy(testing)
deb http://ftp.jp.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ wheezy main contrib non-free
EOF

mobile PC % cat<<EOF | sudo tee -a /etc/apt/preferences
Package: *
Pin: release a=testing
Pin-Priority: 90
EOF

mobile PC % sudo aptitude update
mobile PC % sudo aptitude install bitlbee bitlbee-plugin-skype skyped

Skype API を叩くのに Skype4Py(python-skype) というのを使っているが,重大なものは使っていないようなので恙なく導入は完了.続いて /usr/share/doc/skyped/README.gz を参考に skyped の設定をする.

mobile PC % mkdir -m 700 .skyped
mobile PC % cp /usr/share/doc/skyped/examples/skyped.c* .skyped/
mobile PC % cd .skyped/
mobile PC % vi skyped.conf

skyped.cnf の設定は大して重要ではなく,大事なのは skyped.conf の方. username に Skype 名を, password に Skype のログインパスワードの SHA-1 ハッシュを書く.ポートはデフォルトで 2727 になっているので,変えたい場合は変えておく.ちゃんと書けたら,

mobile PC % openssl req -new -x509 -days 365 -nodes -config skyped.cnf -out skyped.cert.pem -keyout skyped.key.pem

で証明書を作っておく.あと Skype バイナリを公式からもらってくれば,モバイル側の準備は完了.

server-1 (Debian lenny, i386)

モバイル PC が動いていないときは,これで Skype に入りっぱなしにしておく. X Window System 一式がなくとも,仮想フレームバッファを使えばディスプレイを要求するプログラムを動かすことが出来る.今回も skyped は wheezy からもらってくる.

server-1 % sudo aptitude install xvfb x11vnc skyped

skyped の設定は先と同じなので略.出来たら,ひとまず実際に動かしてみる.

server-1 % Xvfb :1
server-1 % DISPLAY=:1.0 skype
server-1 % DISPLAY=:1.0 skyped -d -n

ターミナルを三つ占拠されるので, screen や tmux で適当なセッションを作ってやるといいかも.
で,しかしディスプレイがないことには Skype のログインもままならないので,ディスプレイのついた適当な端末から server-1 にいったん接続してやる.そのために, server-1 で VNC のサーバを一時的に立てておく.

server-1 % x11vnc -display :1
client-0 % vncviewer server-1

ログインした後, skyped(Skype4Py) が API へのアクセスを求めてくるので,これを認める.これで server-1 の設定はおしまい.もう使わないので x11vnc は殺しておく.

server-0 (Debian lenny, armel)

server-1 で動いている skyped へ接続する準備をする.また例によって wheezy から bitlbee-plugin-skype をもらってくる.

server-0 % sudo aptitude install bitlbee-plugin-skype
server-0 % sudo /etc/init.d/bitlbee restart

BitlBee に server-1 の skyped を登録する.

> account add skype [username] [password]
< Account successfully added
> account set skype/server server-1
< server = `server-1`
> account list
< ...
< n. skype, username
< End of account list
> account on [n]
> save

これで OK .次に mobile PC が接続された場合の設定をする.まず tiarra の設定.

server-0 % vi tiarra.conf

networks {
...
  name: BitlBee_remote
...
}

BitlBee_remote {
  host: localhost
  port: 6668
  password: [password']
}

server-0 % sudo /etc/init.d/tiarra restart

これで, tiarralocalhost:6668 を監視し続ける. mobile PC から接続してみる.

mobile PC % skype
mobile PC % skyped -d -n
mobile PC % ssh server-1 -R 6668:localhost:6667 -T

うまくいけば, tiarra から mobile PC の BitlBee へ接続される.このままだと BitlBee のチャンネルが衝突してまずいので,その辺も含め設定しておく.

> set control_channel &bitlbee_remote
> register [password']
> account add skype [username] [password]
> account on 0
> save

良い感じ.