動画再生のためVAIO type Pにmplayer-vaapiを導入

先日 VAIO type P に Debian squeeze を入れてみたのだが,動画再生がうまくできていなかった.必要としていなかったので放っておいたのだけれど, Iceweasel(Firefox) の画面が崩れる問題を回避するため Google Chrome for Linux を入れてみたら,動かないと思っていた Flash がぬるぬる動いて,あれ,工夫すれば動画再生できるんじゃないの,ということになって.
ちょっと調べてみると, Ubuntu で mplayer-vaapi を使って問題を解決している事例がすぐに見つかったので,これを試してみることにした.
まず, http://www.splitted-desktop.com/~gbeauchesne/mplayer-vaapi/ から最新版のコードをもらってくる. Quick build notes を参考にビルドしてみる.

% sudo apt-get build-dep mplayer
% wget http://www.splitted-desktop.com/~gbeauchesne/mplayer-vaapi/mplayer-vaapi-20110127-FULL.tar.bz2
% tar jxvf mplayer-vaapi-20110127-FULL.tar.bz2
% cd mplayer-vaapi-20110127
% ./checkout-patch-build.sh 
...
ERROR: you need VA API headers for this project

Quick build notes には

Upstream libVA API >= 0.31.0 is the minimal requirement. OpenGL rendering support requires libVA API >= 0.31.0-sds3: http://www.splitted-desktop.com/~gbeauchesne/libva/

と書いてあるのだが, Debianリポジトリにはもっと新しい libva があるので,私はここで余計な気を利かせて apt を使って libva-dev を導入した.が,これが後々余計な手間を増やしたので,素直に

% wget http://www.splitted-desktop.com/~gbeauchesne/libva/pkgs/i386/libva1_0.32.0-1+sds2_i386.deb
% wget http://www.splitted-desktop.com/~gbeauchesne/libva/pkgs/i386/libva1-dbg_0.32.0-1+sds2_i386.deb
% wget http://www.splitted-desktop.com/~gbeauchesne/libva/pkgs/i386/libva-dev_0.32.0-1+sds2_i386.deb
% sudo dpkg -i libva1_0.32.0-1+sds2_i386.deb libva1-dbg_0.32.0-1+sds2_i386.deb libva-dev_0.32.0-1+sds2_i386.deb

などとしておくのがいいかもしれない.ただ試していないのでこの副作用はわからない.私は,

% sudo aptitude install libva-dev yasm

これで済ませた. yasm を入れておかないと,やはりまた

...
Checking for yasm ... 
Error: yasm not found, use --yasm='' if you really want to compile without
Check "config.log" if you do not understand why it failed.
Makefile:22: config.mak: No such file or directory

などと言ってこける.
必要な準備を済ませてから改めて

% ./checkout-patch-build.sh 

を叩いて暫く放っておくと, mplayer-vaapi というディレクトリの中にバイナリが作られる.指示に従って実行を試みる.

% cd mplayer-vaapi
% ./mplayer -vo vaapi -va vaapi FILE
...
libva: libva version 0.31.0
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/dri/psb_drv_video.so
libva: va_openDriver() returns -1
[vo_vaapi] vaInitialize(): unknown libva error
Error opening/initializing the selected video_out (-vo) device.

調べてみると,確かに /usr/lib/dri/psb_drv_video.so などと言うファイルはない.周辺をうろついたところ, /usr/lib/va/drivers/psb_drv_video.so というやつがそれらしい.ので,リンクを張ってやる.

% sudo ln -s /usr/lib/va/drivers/psb_drv_video.so /usr/lib/dri/psb_drv_video.so
% ./mplayer -vo vaapi -va vaapi FILE
libva: libva version 0.31.0
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/dri/psb_drv_video.so
libva error: dlopen of /usr/lib/dri/psb_drv_video.so failed: libva.so.0: cannot open shared object file: No such file or directory
libva: va_openDriver() returns -1
[vo_vaapi] vaInitialize(): unknown libva error
Error opening/initializing the selected video_out (-vo) device.

今度は libva.so.0 が無い.調べてみると,ビルドの要件にあったリンクからたどったパッケージを入れると libva.so.0 は導入されるが, Debianリポジトリから入れると libva.so.1 はあるものの,古い方は導入されないらしい.手で入れようとしたら失敗した.

% sudo dpkg -i libva1_0.32.0-1+sds2_i386.deb
dpkg: warning: downgrading libva1 from 1.0.1-3 to 0.32.0-1+sds2.
(Reading database ... 191841 files and directories currently installed.)
Preparing to replace libva1 1.0.1-3 (using libva1_0.32.0-1+sds2_i386.deb) ...
Unpacking replacement libva1 ...
dpkg: error processing libva1_0.32.0-1+sds2_i386.deb (--install):
 trying to overwrite '/usr/lib/libva-x11.so.1', which is also in package libva-x11-1 1.0.1-3
Errors were encountered while processing:
 libva1_0.32.0-1+sds2_i386.deb

このために関連パッケージを消して手で入れ直すのもアレなので,共有ライブラリだけ頂く.

% dpkg-deb -x libva1_0.32.0-1+sds2_i386.deb
% sudo cp -ra usr/lib /usr/local/lib/libva1_0.32.0-1+sds2_i386
% cd mplayer-vaapi-20110127/mplayer-vaapi
% LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/libva1_0.32.0-1+sds2_i386 ./mplayer -vo vaapi -va vaapi FILE

うまく再生された.
よく見ると debian というディレクトリがあるので,すぐパッケージになりそう.

% dpkg-buildpackage -us -uc
dpkg-buildpackage: export CFLAGS from dpkg-buildflags (origin: vendor): -g -O2
dpkg-buildpackage: export CPPFLAGS from dpkg-buildflags (origin: vendor): 
dpkg-buildpackage: export CXXFLAGS from dpkg-buildflags (origin: vendor): -g -O2
dpkg-buildpackage: export FFLAGS from dpkg-buildflags (origin: vendor): -g -O2
dpkg-buildpackage: export LDFLAGS from dpkg-buildflags (origin: vendor): 
tail: cannot open `debian/changelog' for reading: No such file or directory

はぁ.

% dch --create --package mplayer
% dpkg-buildpackage -us -uc
dpkg-buildpackage: export CFLAGS from dpkg-buildflags (origin: vendor): -g -O2
dpkg-buildpackage: export CPPFLAGS from dpkg-buildflags (origin: vendor): 
dpkg-buildpackage: export CXXFLAGS from dpkg-buildflags (origin: vendor): -g -O2
dpkg-buildpackage: export FFLAGS from dpkg-buildflags (origin: vendor): -g -O2
dpkg-buildpackage: export LDFLAGS from dpkg-buildflags (origin: vendor): 
dpkg-buildpackage: source package mplayer
dpkg-buildpackage: source version 20110127
dpkg-buildpackage: source changed by ******
dpkg-buildpackage: host architecture i386
 dpkg-source --before-build mplayer-vaapi
dpkg-checkbuilddeps: Unmet build dependencies: libmp3lame-dev libx264-dev (>= 2:0.99) libxvidcore-dev
dpkg-buildpackage: warning: Build dependencies/conflicts unsatisfied; aborting.
dpkg-buildpackage: warning: (Use -d flag to override.)

はいはい.

% dpkg-buildpackage -us -uc -d
% sudo dpkg -i ../mplayer_20110127_i386.deb


色々嘘.せっかくパッチを当てたのに, debianmplayer のルールでビルドしたら VA API は無効化されちゃうので,これでは駄目.

% sudo cp -ra mplayer-vaapi /usr/local/mplayer-vaapi-20110127
% sudo ln -s /usr/local/mplayer-vaapi-20110127/mplayer /usr/local/bin/mplayer

枕詞が些か長すぎるので, ~/.zshrc.bernstein にエイリアスを指定しておく.

alias mplayer='LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/libva1_0.32.0-1+sds2_i386 mplayer -vo vaapi -va vaapi'

これで,

% mplayer FILE

で動画が再生できるようになった.

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

良い感じ.

キーボードをπ回転させてタイプウェルを打ってみた

撮影しながら打っていたら,偶然 500kpm を越えたので.

今更まとめるほどのことでもないのだが,タイプウェル国語 R のレベルと打鍵速度の対応は以下のようになっている.英単語は2段階甘く,国語 K は 280/400 倍甘い.

kpm level
1200 ZE
1100 ZF-ZE
1000 ZG
900 ZI-ZH
800 ZJ
700 XA-XS
600 XC
500 XG
400 SB
300 A
200 F-E
100 -J

図ったかのように 600(XC), 700(XA+), 800(ZJ) がキリのいいところにあってたまらない.目標にはもってこいなのだけれど,しかしやはり遠いな.

type PにDebian squeezeを入れてみた

Debian GNU/Linux 6.0 が本日リリースされたので,それを祝って恩師に頂いた VAIO type P(VGN-P70H) に導入
…するはずが,正式リリースが待ちきれず Release Candidate 2 を入れてしまったので,もう既に半分 obsolete な情報なのだけれど,正式版でも参考程度にはなるかもしれないので,その作業メモを.

VAIO type P

そもそも Thinkpad 狂の私が何故 VAIO を持っているのかという話なのだけれど,

なんてつぶやいていたら,恩師に譲ってもらうという信じがたい棚ぼたイベントが発生して,にわかに二台も手に入れてしまった.

そのサイズからは想像できない 1600x768 という高画素数のディスプレイ,モバイル PC としては比類ない良質なタッチのキーボード, Thinkpad 信者にはうれしいトラックポイントと,こう,なんというか,ストライク.だいたい下馬評というのは多分の誇張が含まれているもので,実際に触るとがっかりすることが多いものだけれど,この二週間ほど持ち歩いて,特別実験のレポートを書いたりとある鋳薔薇の超波動砲を読んだりするのに使ってみて,期待を全く裏切らない素晴らしい機種だと確信した. ThinkpadLenovo に売られてからはキーボードや廃熱設計の駄目さが目立つし,これはいよいよ乗り換える時期だろうか…

Squeezeの導入

VAIO type P には光学ドライブがついてこないので, OS インストールのために執りうる手段は,

  1. 光学ドライブをつないで CD(DVD) からブート
  2. USB メモリからブート
  3. TFTPd をたててネットワークからブート

の三つ.今回は,標準添付されていたリカバリ CD 作成ツールを実行したついでに接続した DVD ドライブをそのまま使ってインストールを試みた. Debian 公式サイトから debian-squeeze-di-rc2-i386-netinst.iso を落としてきて CD-R に焼いて,それでブート.ブートメニューには BIOS のスプラッシュ画面で F11 を叩いて入った. GUI のウィザードは正常に動く模様.
VGN-P70H は 1000BASE-T/100BASE-TX/10BASE-T および IEEE 802.11b/g/(n) に対応したアダプタを内蔵しているが,前者は正常に稼働しなかったので,特に工夫せず利用できた無線 LAN を通じてインストールを行った.標準添付されていた Windowsリカバリディスクを作成し終えていたので,リカバリ用に確保された領域も含め 60GB の HDD 全体をつぶして単一パーティション(+swap)とした.モバイル用途なので SQL サーバだなんだかんだというものはすべて無視して基本セットのみ入れる.そういえば,ここで,おそらく X を意味しているデスクトップ環境とやらにチェックを入れないとどうなるんだろうね.誰か教えてください.
ludobile という名のアカウントを作り, hostname は bernstein , domain は ludobile.org に設定し,基本的なインストールは恙なく終了した.ドライバがないので高解像度の表示が云々という記述がネットには散見されるが,何もせずとも vesa の汎用ドライバで 1600x768 の表示は無事にできている.ただし描画があまり高速でないので, dmesg などするとがったんがったんするのが目立つ.動画の再生などは以ての外という感じ.

OS が正常にインストールされたので,健康で文化的な最低限度の生活を送るためのセットアップを行う.

須藤

これをしないとまず始まらない.

$ su
# visudo
root ALL=(ALL) ALL # と書いてある下の行に
%adm ALL=(ALL) ALL # などと書いておく.
# adduser ludobile adm

今までよく理解していなかったのだが, BSD でいうところの wheel は, Debian では adm に担わせるのが筋のようだ.

GNU Screenの準備

tmux はまだ手を加えて野良ビルドしないと使用に耐えないので,最初は screen を入れておく.

$ sudo aptitude install screen zsh
$ mkdir .screen
$ cat<<EOF > .screenrc
defencoding utf8

defscrollback 16384
backtick 0 60 0 sh $HOME/scripts/battery.sh
backtick 1 60 0 sh $HOME/scripts/battery_time.sh
backtick 2 60 0 sh $HOME/scripts/temp.sh
hardstatus alwayslastline "[%02c][%0\`][%1\`][%2\`] %-w%{=b bw}%n %t%{-}%+w"
shelltitle "$ |zsh"

hardcopydir "$HOME/.screen"
hardcopy_append on

logfile "$HOME/.screen/screen-%Y%m%d-%n.log"
log on
deflog on
hardstatus ignore "%w | %h"

startup_message off
autodetach on
shell -$SHELL

# for ades
bind ) paste .

bind r eval 'echo "Resize window"' 'command -c resize'
bind -c resize ^] command
bind -c resize j eval 'resize +1' 'command -c resize'
bind -c resize k eval 'resize -1' 'command -c resize'
EOF

sshの設定

十分環境が整うまでは外部から ssh を使ってアクセスして作業した方がコピペなどの都合上楽なので,その準備をする.ついでに,秘密鍵を利用したアクセスしかできないようにしておく.

$ sudo aptitude install ssh wget
$ wget http://hogehoge/id_rsa.pub.txt
$ cat id_rsa.pub.txt >> ~/.ssh/authorized_keys
$ cat<<EOF | sudo tee -a /etc/ssh/sshd_config
PasswordAuthentication no
EOF
$ sudo /etc/init.d/ssh restart

基本的なプロファイルの移行

ssh および gnupg の公開鍵/秘密鍵, $HOME/.ssh/config などをちゃっちゃかコピーしておく. ssh の設定をすませておいたので,常用していた luna(Thinkpad X22) から.

luna % scp ~/.ssh/id_rsa ~/.ssh/id_rsa.pub bernstein:.ssh/
luna % scp ~/.gnupg/ops.pubkey.asc ~/.gnupg/ops.seckey.asc ~/.gnupg/ops.revoke.asc bernstein:.gnupg/
$ sudo aptititude install gnupg
$ gpg --import ~/.gnupg/ops.pubkey.asc ~/.gnupg/ops.seckey.asc
$ gpg --edit foo@bar.com
gpg> trust
gpg> 5
gpg> y
gpg> q

あとは主に名前解決のための設定と,アプリケーションの細々とした設定ファイルを移す.

$ chsh
> /usr/bin/zsh

% LANG=C xdg-user-dirs-gtk-update;: GNOME の作る $HOME 以下のディレクトリが発狂仕様なので変える

% sudo dpkg-reconfigure locales;: ロケールを英語に
> *en_US.UTF-8
> ja_JP.UTF-8

% wget http://hogehoge/dhcplist.txt;: こういうものをこしらえておくと楽
% cat dhcplist.txt | sudo tee -a /etc/hosts

% scp luna:.ssh/config ~/.ssh/
% scp -r luna:scripts .emacs.d .unison .w3m .xmonad .
% cp ~/scripts/profile/.zshrc.local ~/scripts/profile/.zshrc.bernstein
% ln -s ~/scripts/profile/.tmux.conf .
% ln -s ~/scripts/profile/.vimrc .
% ln -s ~/scripts/profile/.xsession .
% ln -s ~/scripts/profile/.Xdefaults .
% ln -s ~/scripts/profile/.zshrc .
% ln -s ~/scripts/profile/.zshrc.bernstein .
% ln -s ~/.emacs.d/.yatexrc .

% sudo mv /etc/apt/sources.list /etc/apt/sources.list.org
% cat<<EOF | sudo tee /etc/apt/sources.list
deb http://ftp.jp.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ squeeze main contrib non-free

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

deb http://ftp.jp.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ lenny main contrib non-free

deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main

deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

EOF
% cat<<EOF | sudo tee /etc/apt/preferences
Package: rsync
Pin: version 3.0.3-2
Pin-Priority: 1001

Package: unison
Pin: version 2.27.57-1+b1
Pin-Priority: 1001

EOF

squeeze のみならず lenny のリポジトリを追加しているのは,後に導入する rsync と unison を lenny のそれにあわせるため.家ではまだ lenny が主流なので,バージョンはそちらにそろえておく. rsync は以前のバージョンのコードを含み完全な後方互換を持つウルトラ仕様だという話だった気もするが,手間はあまり変わらないので unison と一緒に設定.
で,ごそっとソフトを導入.

% sudo aptitude update; sudo aptitude full-upgrade
% sudo aptitude install \
vim-gnome emacs emacs23-el emacs-goodies-el yatex easypg elscreen gnuserv w3m-el howm \
gcc g++ make \
subversion git \
ntp ntpdate lm-sensors sshfs libterm-readline-gnu-perl cabextract munin-node iceweasel-vimperator \
w3m gnuplot maxima mpg123 vorbis-tools vlc-nox \
xtrlock xautolock \
tmux xmonad fvwm rxvt-unicode-ml \
fortunes fortune-mod fortunes-debian-hints \
rsync=3.0.3-2 unison=2.27.57-1+b1

gnuserv がないと文句を言われた. Squeeze に gnuserv がない問題 - おもてなしの空間 にもかかれているように, gnuserv のパッケージは lenny と飛んで sid にしか見あたらない.この人は sid からもらってきているが,私はどうせ gnuserv 独自拡張は使っていないので,素直に emacsserver を使うことにした.
古い howmEmacs の syntax highlighting を破壊するバグがあるため, lenny 時代は自分で導入する必要があったが, squeeze の howm は 1.3.8.1 (>=1.3.6) なのでそのまま導入して OK .
後ちょこちょことしたどうでもよい設定.

% sudo adduser ludobile fuse;: for using sshfs

% cat<<EOF | sudo tee -a /etc/munin/munin-node.conf
host_name bernstein.ludobile.org
allow ^192\.168\.foo\.bar$
EOF
% sudo /etc/init.d/munin-node restart
lunasa % cat<<EOF | sudo tee -a /etc/munin/munin.conf
[bernstein.ludobile.org]
    address 192.168.ho.ge
    user_node_name yes
EOF

% sudo vi /etc/ntp.conf
% diff -u /etc/ntp.conf.org /etc/ntp.conf
--- /etc/ntp.conf.org   2011-01-28 00:35:34.000000000 +0900
+++ /etc/ntp.conf       2011-01-28 00:35:57.000000000 +0900
@@ -18,10 +18,11 @@
 # pool.ntp.org maps to about 1000 low-stratum NTP servers.  Your server will
 # pick a different set every time it starts up.  Please consider joining the
 # pool: <http://www.pool.ntp.org/join.html>
-server 0.debian.pool.ntp.org iburst
-server 1.debian.pool.ntp.org iburst
-server 2.debian.pool.ntp.org iburst
-server 3.debian.pool.ntp.org iburst
+#server 0.debian.pool.ntp.org iburst
+#server 1.debian.pool.ntp.org iburst
+#server 2.debian.pool.ntp.org iburst
+#server 3.debian.pool.ntp.org iburst
+server -4 ntp.nict.jp iburst dynamic


 # Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for
% sudo /etc/init.d/ntp restart

そして,ついでに TeX のインストール.後に e-pTeX (with TeX Live 2010) を導入するのでどうでもいいのだが, etch と lenny でうまくいっていた方法が squeeze でも通用するのかどうか確かめるべく,一応試しておいた.完全にパターン化されているので,何も考えず手元のメモをコピペ.

% sudo aptitude install \
gs gs-esp gs-cjk-resource ptex-bin xdvik-ja dvipsk-ja okumura-clsfiles vfdata-morisawa5 \
dvipdfmx cmap-adobe-cns1 cmap-adobe-gb1 cmap-adobe-japan1 cmap-adobe-japan2 \
;: squeeze には xpdf-japanese というパッケージは存在しない.どうせ使わないので無視.
% sudo jisftconfig add
% sudo aptitude install evince ghostscript cmap-adobe-japan1 xpdf-japanese xpdf
% sudo mkdir -p /usr/share/poppler/cidToUnicode
% sudo ln --symbolic /usr/share/xpdf/japanese/Adobe-Japan1.cidToUnicode /usr/share/poppler/cidToUnicode/Adobe-Japan1 \
;: この行はエラーを返す.手動でリンクを張らずとも,既に望むとおりにシンボリックリンクが作られているようだ.
% sudo mkdir -p /usr/share/poppler/cMap
% sudo ln --symbolic /usr/share/fonts/cmap/adobe-japan1 /usr/share/poppler/cMap/Adobe-Japan1
% scp lunasa:/home/backup/luna/home/ludobile/tmp/20100730/archives/texmf.tar.gz .
% tar zxvf texmf.tar.gz

最後にどこからともなく現れた texmf.tar.gz は, TeX の導入された Windows のおそらく典型的には C:\tex\share\texmf に配置されているであろうディレクトリを固めたもの.複数人で TeX 文書を書いているときに頻発する,なぜか自分のパソコンではタイプセットできない,という状況をごり押しで回避するためのもの.必須ではない.
platexEUC-JP のドキュメントを受け付け, Evince が pdf を正しくレンダーできていることを確認.

ネットワークの設定

lenny を使っていたときは ifup/down をフロントエンドとして wpa_supplicant でアクセスポイントの認証を行っていたのだが,どういう訳か,今までうまくいっていたその方法が通用しなくなってしまった. Debian Installer では正常にアクセスできているし, GNOME を使っている間はちゃんとつながっているので,ハードウェアの問題というわけではなさそう. interfaces(5) にしろ, wpa_supplicant.conf にしろ,設定は単純明快でバージョンによる互換性なんてなさそう.原因不明.
まあなにしろこういう前科がある人間なので,深入りせず早々にあきらめた. GNOME の用意してくれた NetworkManager ではとりあえず接続ができていて, cnetworkmanager という CLI のフロントエンドも一応存在しているようなので,とりあえずはこれでよいだろう.

% sudo aptitude install cnetworkmanager

しかしよくよく見てみると,ネットワークには接続できているのだが, NetworkManager からは管理できていない. /usr/share/doc/network-manager/README.Debian を確認したところ, /etc/NetworkManager/NetworkManager.conf に設定があるとのことだったので,

% sudo vi /etc/NetworkManager/NetworkManager.conf
[ifupdown]
managed=true
% sudo /etc/init.d/network-manager restart

などしたところ,管理下に入ってくれた.しかしマニュアルをどのように読んでも, cnetworkmanager からネットワークのプロファイルを作ったり削除したりする方法は見つからない.基本的には GUI で設定しなさいということらしい.あきらめて GNOME でぽちぽちやる.
おそらく設定のポイントは,「すべてのユーザに利用可能」という項目にチェックを入れておくことだ. NetworkManager はプロファイルを user と system とに分けていて,後者は /etc/NetworkManager/system-connections/ に保存されいつ誰でも読み込めるようになっているが, user のそれへのアクセスはそう単純ではないらしく, GNOME が走っていない状態でアクセスを試みると,

% cnetworkmanager -u
org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.NetworkManagerUserSettings was not provided by any .service files

などと拒絶される.
家の WLAN と大学のそれを home, sosg という名前のプロファイルに設定した.インターフェースは wlan0 という名前で見えているので,たとえば

% cnetworkmanager --activate-connection=system,home,wlan0,

などと叩けば,家のネットワークに接続できる.

シェル周りを整える

私は普段 Zsh -> tmux -> rxvt-unicode -> Xmonad という感じの環境で生活しているので,この設定をする. zshxmonad に関しては Debian のパッケージにあるものをそのまま入れるだけなのでもう既に済んでいる. tmux は 1.4 のソースコードをもらってきてちょっとパッチを当ててコンパイルするのだが,以前やったとおりなので省略. rxvt-unicode は, Debian のパッケージではどういう訳か 88 色という中途半端なオプションでコンパイルされているので,その辺を少し書き換える.

% sudo aptitude install automake dpkg-dev devscripts
% apt-get source rxvt-unicode
% sudo apt-get build-dep rxvt-unicode
% cd rxvt-unicode-9.07
% patch -p1 < doc/urxvt-8.2-256color.patch
% vi debian/rules.org
% diff -u debian/rules.org debian/rules
--- debian/rules.org    2011-01-26 00:28:07.000000000 +0900
+++ debian/rules        2011-01-26 00:30:06.000000000 +0900
@@ -34,7 +34,9 @@
     --enable-utmp \
     --enable-wtmp \
     --enable-lastlog \
-    --with-term=rxvt-unicode
+    --enable-xterm-colors=256 \
+    --with-term=rxvt-256color \
+    --with-codesets=jp,jp_ext

 config.status: configure
        dh_testdir
% dch -i
> 256 colours supported
% dpkg-buildpackage -us -uc
% sudo aptitude remove rxvt-unicode-ml
% sudo dpkg -i ../rxvt-unicode-ml_9.07-2.1_i386.deb

rxvt-256unicode などという勝手な名前で俺俺ビルドしたので, terminfo をちゃんと用意してあげないと表示が崩れて大変なことになる.

% infocmp -L rxvt-unicode > rxvt-unicode.terminfo > rxvt-256unicode.terminfo
% vi rxvt-256unicode.terminfo
% diff -u rxvt-unicode.terminfo rxvt-256unicode.terminfo
--- rxvt-unicode.terminfo       2011-01-26 00:43:01.000000000 +0900
+++ rxvt-256unicode.terminfo    2011-01-26 00:45:35.000000000 +0900
@@ -1,11 +1,11 @@
 #      Reconstructed via infocmp from file: /lib/terminfo/r/rxvt-unicode
-rxvt-unicode|rxvt-unicode terminal (X Window System),
+rxvt-256unicode|rxvt-unicode 256 color terminal (X Window System),
        auto_left_margin, auto_right_margin, back_color_erase,
        can_change, eat_newline_glitch, erase_overstrike,
        has_meta_key, move_insert_mode, move_standout_mode,
        no_pad_char, prtr_silent, xon_xoff,
        buttons#5, columns#80, init_tabs#8, lines#24,
-       lines_of_memory#0, max_colors#88, max_pairs#256,
+       lines_of_memory#0, max_colors#256, max_pairs#32767,
        no_color_video#0,
        acs_chars=+C\054D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        bell=^G, carriage_return=^M,
% mkdir ~/.terminfo
% tic -o ~/.terminfo rxvt-256unicode.terminfo

バックアップのための鍵生成

rssh を使ってもいいのだけれど, root で直接 ssh を叩くのなんて rsync のとき位なので, command での制御ですませる.

bernstein % sudo ssh-keygen -t dsa -N "" -f /root/.ssh/rsync_bernstein
lunasa % ssh -t bernstein 'echo -n "# REMOVE THIS LINE: "; sudo echo -ne "# bernstein_rsync\ncommand=\"rsync --server -logDtprRze.iL . /home/backup/bernstein/\" "; sudo cat /root/.ssh/rsync_bernstein.pub' | sudo tee -a /root/.ssh/authorized_keys

…ところで, ssh -t で pseudo-tty を確保すると,すべてが標準出力を通るのか, [sudo] password for hogehoge: という文字列までリダイレクトされてしまうので,上のような悲惨なことになるのだけれども,これのスマートな回避手段はないものかしら.

ATOK X3の導入

ATOK がなくなった日には自分は日本語を捨てなければならないのではないかというほど依存してしまっているので,これを導入する.基本的には,[048707]ATOK X3 for Linux dpkg 1.15.8 対応 deb パッケージ[044668]ATOK X3 for Linux Ubuntu 9.04(GTK+ 2.16) 対応モジュールの二つのパッチを当てているはず.先の TeX と同じく,手元にある成功した手続きを淡々とコピペする簡単なお仕事.

% tar zxvf atokx3.tar.gz
% mv ATOKX3/bin/deb/IIIMF ATOKX3/bin/deb/IIIMF.org
% cd ATOKX3
% tar zxvf ../atokx3dpkg1158.tar.gz
% cd ../
% export LANG=C
% cat<<EOF | sudo tee /usr/lib/gtk-2.0/2.10.0/immodule-files.d/iiim-gtk2.0.immodules
"/usr/lib/gtk-2.0/immodules/im-iiim.so"
"iiim" "Internet/Intranet Input Method" "iiimgcf" "/usr/share/locale" "ja"
EOF
% cd ATOKX3
% sudo bash ./setupatok_deb.sh
> yes
> /usr/lib/gtk-2.0/2.10.0/immodule-files.d/iiim-gtk2.0.immodules

% cd /
% sudo tar zxvf /home/ludobile/tmp/20110125/atokx3set/atokx3gtk216.tar.gz
% sudo bash /opt/atokx3/sample/setting_debian4.sh

インストールは以上で完了.このままだと[ATOK]というダイアログが出てきて,これがいい感じに vimperator + xmonad 環境で悪さをしてくれるので,[037494]アプリケーションウィンドウや入力カーソルの下に表示される[ATOK]を非表示にしたい(参考情報)に従いこれを隠す.

% gunzip iiimf_status_hide.gz
% sudo mv iiimf_status_hide /opt/atokx3/sample
% chmod 755 /opt/atokx3/sample/iiimf_status_hide
% sudo chown root:root /opt/atokx3/sample/iiimf_status_hide

ログインするたびに /opt/atokx3/sample/iiimf_status_hide を叩けばいいので,必要ならば .xsession などに書き加えておく.今回は十分設定された .xsession を持ってきたので何もしない.
次に,今までの辞書の移行など.

% mv ~/.iiim/le/atokx3/users/ludobile ~/.iiim/le/atokx3/users/ludobile.org
% tar zxvf profile.tar.gz
% mv ludobile ~/.iiim/le/atokx3/users
% tar zxvf dicts.tar.gz
% mv dicts/* ~/.iiim/le/atokx3/users/ludobile/
% sudo ln -s /home/ludobile/.iiim/le/atokx3/users/ludobile/geniusej.drt /opt/atokx3/share/systemdic/geniusej.drt
% sudo ln -s /home/ludobile/.iiim/le/atokx3/users/ludobile/geniusje.drt /opt/atokx3/share/systemdic/geniusje.drt
% sudo ln -s /home/ludobile/.iiim/le/atokx3/users/ludobile/meikyojj.drt /opt/atokx3/share/systemdic/meikyojj.drt

これで基本的には完了.
後は, X の使えない環境で Emacs を使って日本語を入力したいという,野心的な X の configure に別の作業用 PC を用意せずに挑戦するというちょっと考えられないような使い方をした場合くらいしか思いつかないケースで必要になる設定を行う.といっても, Emacs から IIIMECF を通じて ATOK X3 を使用する方法は Google でちょいちょいと調べれば出てくるし, Emacs 周りの設定は既に丸ごとコピーしてあるのでここではふれない. Emacs のプロファイルセットに入っていた IIIMECF が lenny の Emacs 22 向けにバイトコンパイルされたものだったので,それを新たにコンパイルし直す.

% wget http://www.meadowy.org/~kawabata/iiimecf/IIIMECF-0.75.tar.gz
% tar zxvf IIIMECF-0.75.tar.gz
% cd iiimecf
% emacs -q --no-site-file -batch -l iiimcf-comp.el
% cp -f lisp/*.elc ~/.emacs.d/iiimecf/

プリンタの設定

% sudo aptitude install sambaclient samba
% sudo /etc/init.d/cups stop
% ssh -t luna 'echo -n "# REMOVE THIS LINE: "; sudo cat /etc/cups/printers.conf' | sudo tee -a /etc/printers.conf
% sudo /etc/init.d/cups start

lenny から squeeze で CUPS のバージョンが 1.3.8 から 1.4.4 にあがっていたのだが,これによる著しい変化は, http://localhost:631/ から Web のインターフェースでネットワークプリンタを追加するために,相手が見えていなければいけないようになった点だろう.つまり,参照できない URI を指定してプリンタを追加することができなくなった.これは結構不便な仕様だと思う.

Advanced W-ZERO3を使ったテザリングの設定

アドエスIEEE 802.11b/g 対応のチップを載せているので,アドエスと type P を無線 LAN のアドホック方式で接続してあげると, PHS の電波が届いている地域ならどこでも,電池の続く限りはアドエスを通じてネットに接続できるようになる.アドエスをモデムとして発信するケースと異なり,あくまでアドエスが勝手にダイアルアップしているだけなので,パケット定額の限度額が上昇したりすることがなくて嬉しい. PHS の貧弱回線なんて…といわれそうだが, ssh でテキストが通れば私は満足なのであまり問題がない.
アドエス側のプロキシとして, DeleGate Launcher 一式を使用する.紹介されているサイトにかかれているように,アドエスを 192.168.0.1 に設定にした.次に type P 側の設定.また例によって GNOME を使い, NetworkManager で適当な名前のアドホック接続のプロファイルを作る.
アドエス側で DeleGate Launcher を起動し, type P 側で

% cnetworkmanager --activate-connection=system,tekitaunanamae,wlan0,

などと叩くと, 192.168.0.1:8080 に HTTP proxy が見える状態になる.
HTTP proxy を介して ssh のコネクションを張るのには, corkscrew というソフトが使える.これは Debianリポジトリにいるので簡単に導入できる.

% sudo aptitude install corkscrew
% cat<<EOF > ~/.zshrc.bernstein
function ssh(){
  SSHPROG=/usr/bin/ssh
  if $(/sbin/iwconfig wlan0 > /dev/null 2>&1 | grep -q 'ESSID:"tekitaunanamae"'); then
    $SSHPROG -o 'ProxyCommand corkscrew 192.168.0.1 8080 %h %p' -o 'ServerAliveInterval 10' $*
  else
    $SSHPROG $*
  fi
}

function scp(){
  SCPPROG=/usr/bin/scp
  if $(/sbin/iwconfig wlan0 > /dev/null 2>&1 | grep -q 'ESSID:"tekitaunanamae"'); then
    $SCPPROG -o 'ProxyCommand corkscrew 192.168.0.1 8080 %h %p' -o 'ServerAliveInterval 10' $*
  else
    $SCPPROG $*
  fi
}

function sshfs(){
  SSHFSPROG=/usr/bin/sshfs
  if $(/sbin/iwconfig wlan0 > /dev/null 2>&1 | grep -q 'ESSID:"tekitaunanamae"'); then
    $SSHFSPROG -o ssh_command='ProxyCommand corkscrew 192.168.0.1 8080 %h %p' -o ssh_command='ServerAliveInterval 10' $*
  else
    $SSHFSPROG $*
  fi
}

EOF

などと愚直な wrapper を書いておけば,

% ssh hogehoge
% scp foo hogehoge:
% sshfs bar: ~/mnt/bar/

などと叩くだけで,テザリングで接続しているか否かを自動的に判断してプロキシを適宜設定してくれる. Keep Alive 10 の設定は割と適当.本当はもっと長くてもいいはずだけれど,高確率でパケットをロスするらしく,これくらいに設定しておかないと,放っておくとすぐ切れてしまった.
あとついでに, iceweasel-vimperator で簡単にプロキシの設定が変更できるようにもしておいた.

% wget http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/proxy.js -o ~/.vimperator/plugin/proxy.js
% vi proxy.js
% diff -u proxy.js.org proxy.js
--- proxy.js.org        2011-01-27 18:09:29.000000000 +0900
+++ proxy.js    2011-01-27 15:07:05.000000000 +0900
@@ -66,6 +66,24 @@
                 ]
             },
             {
+                conf_name: 'delegate',
+                conf_usage: 'use DeleGateLauncher',
+                settings: [
+                    {
+                        label: 'type',
+                        param: 1
+                    },
+                    {
+                        label: 'http',
+                        param: '192.168.0.1'
+                    },
+                    {
+                        label: 'http_port',
+                        param: 8080
+                    }
+                ]
+            },
+            {
                 conf_name: 'polipo',
                 conf_usage: 'use polipo cache proxy',
                 settings: [

これを用意しておけば, vimperator 上で

:proxy delegate
:proxy disable

などと打つだけでプロキシ設定を簡単に書き換えられる.

ディスプレイドライバの設定

結論から言うと,あまりうまくいかなかった. type P は Intel SCH US15W というチップセットを採用していて,それに組み込まれている Intel GMA 500 通称 Poulsbo というグラフィックアクセラレータを利用しているのだが,これのドライバが Xorg から提供されていない.選択肢は以下の三つ.

  1. VESA の汎用ドライバ vesa を使う
  2. VESA のフレームバッファに対応した汎用ドライバ uvesafb を使う
  3. (非公式の)ドライバ xserver-xorg-video-psb を使う

このうち uvesafb は vesa に比べパフォーマンスが単純に向上するのみと思われるので,実質的には 2 と 3 の選択なのだが,これが一長一短で悩ましい.原因は Poulsbo 対応のドライバの出来が不完全であることによるのだが,

ドライバ 描画速度 安定性 動画再生 xrandr
uvesafb
xserver-xorg-video-psb ×

こんな具合で,何ともいえない.安定性というのは,勝手に再起動したりといった深刻な問題ではなくて, Iceweasel(Firefox) の描画が崩れるといったような軽微なもの.軽微ではあるが鬱陶しいことにかわりはないので, Fx ヘビーユーザなら一考に値する問題かもしれない.
動画再生に関しては, uvesafb の方ではフレームレートが足りず, xserver-xorg-video-psb の方では描画に失敗するので全く再生されない.後者に関しては Video Accelerator API を利用できるプレイヤーを使えば問題なく再生できるらしいが,あまり興味がなかったので試していない.
xrandr -o [normal/left/right/inverted] は xserver-xorg-video-psb での動作時のみ正常に動いた. type P が売りにしているらしい,画面を回転させて云々というのを手軽に実現したければ psb を選ぶべきだろう.
まあいずれにせよ, Debian 公式からちゃんとした xserver-xorg-video-psb が出れば解決する話なので,過渡的な問題と見ていいだろう.

vesaを使う場合

squeeze をインストールしたときに,勝手に選択されている.後述する理由によって,以降に行なう設定をすべて削除すれば vesa が自動選択されるはず.

uvesafbを使う場合
% sudo aptitude install v86d hwinfo
% sudo hwinfo --framebuffer
02: None 00.0: 11001 VESA Framebuffer                           
  [Created at bios.464]
  Unique ID: rdCR.UMIAqfDilA4
  Hardware Class: framebuffer
  Model: "Intel(r)Poulsbo Graphics Controller"
  Vendor: "Intel Corporation"
  Device: "Intel(r)Poulsbo Graphics Controller"
  SubVendor: "Intel(r)Poulsbo Graphics Chip Accelerated VGA BIOS"
  SubDevice: 
  Revision: "Hardware Version 0.0"
  Memory Size: 7 MB + 704 kB
  Memory Range: 0x7f800000-0x7ffaffff (rw)
  Mode 0x0360: 1366x768 (+1408), 8 bits
  Mode 0x0361: 1366x768 (+2752), 16 bits
  Mode 0x0362: 1366x768 (+5504), 24 bits
  Mode 0x0363: 1360x768 (+1408), 8 bits
  Mode 0x0364: 1360x768 (+2752), 16 bits
  Mode 0x0365: 1360x768 (+5440), 24 bits
  Mode 0x0366: 1600x768 (+1600), 8 bits
  Mode 0x0367: 1600x768 (+3200), 16 bits
  Mode 0x0368: 1600x768 (+6400), 24 bits
  Mode 0x0369: 1024x600 (+1024), 8 bits
  Mode 0x036a: 1024x600 (+2048), 16 bits
  Mode 0x036b: 1024x600 (+4096), 24 bits
  Mode 0x0305: 1024x768 (+1024), 8 bits
  Mode 0x0317: 1024x768 (+2048), 16 bits
  Mode 0x0318: 1024x768 (+4096), 24 bits
  Mode 0x0312: 640x480 (+2560), 24 bits
  Mode 0x0314: 800x600 (+1600), 16 bits
  Mode 0x0315: 800x600 (+3200), 24 bits
  Mode 0x0301: 640x480 (+640), 8 bits
  Mode 0x0303: 800x600 (+832), 8 bits
  Mode 0x0311: 640x480 (+1280), 16 bits
  Config Status: cfg=new, avail=yes, need=no, active=unknown

Mode 0x0368: 1600x768 (+6400), 24 bits というモードが見えるので,これを選択することにする.
squeeze では GRUBXorg のバージョンがあがっているので, lenny とは勝手が異なる模様.

  • lenny
    1. /boot/grub/menu.lst を直接書き換える
    2. dpkg-reconfigure xserver-xorg から /etc/X11/xorg.conf を直接編集
  • squeeze
    1. /etc/default/grub を書き換えてから grub-update を実行
    2. (必要なら)X -configure から /etc/X11/xorg.conf に必要な情報を書き足す

という理解であっているのかな…あまり自信はない.
uvesafb を使いたいときはブートメニューを書き換えるだけでよいようなので,

% sudo vi /etc/default/grub
% diff -u /etc/default/grub.org /etc/default/grub
--- /etc/default/grub.org  2011-01-25 21:45:19.000000000 +0900
+++ /etc/default/grub  2011-01-25 21:45:42.000000000 +0900

@@ -4,7 +4,8 @@
 GRUB_DEFAULT=0
 GRUB_TIMEOUT=5
 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
-GRUB_CMDLINE_LINUX_DEFAULT="quiet"
+#GRUB_CMDLINE_LINUX_DEFAULT="quiet"
+GRUB_CMDLINE_LINUX_DEFAULT="splash nomodeset video=uvesafb:mode_option=1600x768-24,mtrr=3,scroll=ywrap"
 GRUB_CMDLINE_LINUX=""
 
 # Uncomment to enable BadRAM filtering, modify to suit your needs
@@ -19,6 +20,7 @@
 # note that you can use only modes which your graphic card supports via VBE
 # you can see them in real GRUB with the command `vbeinfo'
 #GRUB_GFXMODE=640x480
+GRUB_GFXMODE=1600x768
 
 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
 #GRUB_DISABLE_LINUX_UUID=true

% sudo update-grub

OS を再起動すれば uvesafb が選択される.

xserver-xorg-video-psbを使う場合

xserver-xorg-video-psb: Xorg Graphics driver for Intel Poulsbo chipset (GMA 500), 598 日前から準備中です。

http://www.debian.org/devel/wnpp/being_packaged.ja.html

だそうで, Debian 公式のリポジトリではまだ準備ができていない. Intel 公式サイトからは RedHat 系のためのドライバがリリースされているので, alien で変換してみたくなるが,あの活発な Ubuntuこの様であるのを見るとぞっとする.
Google で検索すると http://www.kamineko.org/debian-psb/ なるいい感じのサイトが見つかるが, lenny 時代とは勝手が違うのか, squeeze でこれを使おうと思うと xorg 周辺のバージョン不整合が発生して肝心要のドライバが入らない.仕方ないので, Debian への導入例も報告されている Google Code Archive - Long-term storage for Google Code Project Hosting. のお世話になる.

% cat<<EOF | sudo tee -a /etc/apt/sources.list
# For GMA500(Poulsbo)
deb http://ppa.launchpad.net/gma500/ppa/ubuntu lucid main
deb-src http://ppa.launchpad.net/gma500/ppa/ubuntu lucid main

EOF
% sudo aptitude update
% sudo aptitude install poulsbo-driver-2d poulsbo-driver-3d psb-firmware libdrm-poulsbo1 psb-kernel-source xpsb-glx xserver-xorg-video-psb

すると,依存関係から poulsbo-config, poulsbo-config-2d, poulsbo-config-3d がはじかれる.これがなくてもとりあえずは何とかなるのでスルーしても問題なさそうだが,これらの依存する squeeze に存在しない python-xkit は Ubuntu – Error を見る限り Pythonスクリプトからなるパッケージのようなので, Debian に入れてしまっても問題なかろう.

% wget "http://ftp.jaist.ac.jp/pub/Linux/ubuntu//pool/main/x/x-kit/python-xkit_0.4.2.2_all.deb"
% sudo dpkg -i python-xkit_0.4.2.2_all.deb
% sudo aptitude install poulsbo-config poulsbo-driver-2d poulsbo-driver-3d

ドライバは aptitude が勝手に裏でごりごりとコンパイルしてくれるので,以上の手続きが済んだら既に設定は終わっている.先のサイトを参考に, GRUB の設定を書き換える.

% sudo vi /etc/default/grub
% diff -u /etc/default/grub.org /etc/default/grub
--- /etc/default/grub.org  2011-01-25 21:45:19.000000000 +0900
+++ /etc/default/grub   2011-02-01 23:42:32.000000000 +0900
@@ -4,7 +4,8 @@
 GRUB_DEFAULT=0
 GRUB_TIMEOUT=5
 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
-GRUB_CMDLINE_LINUX_DEFAULT="quiet"
+#GRUB_CMDLINE_LINUX_DEFAULT="quiet"
+GRUB_CMDLINE_LINUX_DEFAULT="splash nomodeset video=uvesafb:mode_option=1600x768-24,mtrr=3,scroll=ywrap acpi_osi=Linux mem=2000mb"
 GRUB_CMDLINE_LINUX=""
 
 # Uncomment to enable BadRAM filtering, modify to suit your needs
@@ -19,6 +20,7 @@
 # note that you can use only modes which your graphic card supports via VBE
 # you can see them in real GRUB with the command `vbeinfo'
 #GRUB_GFXMODE=640x480
+GRUB_GFXMODE=1600x768
 
 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
 #GRUB_DISABLE_LINUX_UUID=true

% sudo update-grub

Xorg の方の設定もしておかねばならない…と思ったら, aptitude がまた空気を読んで勝手にやってくれていた.

% cat /etc/X11/xorg.conf
Section "DRI"
        Mode    0666
EndSection

Section "Device"
        Identifier      "Configured Video Device"
        Driver  "psb"
EndSection

これで,再起動したら psb が選択される. uvesafb に戻したければ, /etc/X11/xorg.conf を削除すればよい.

xrandrによるディスプレイ構成の動的な変更

xrandr を利用すると,ディスプレイの設定を手軽に書き換えることができる.たとえば

% xrandr -o left

と打つと画面を π/2 回転させることができる.
プロジェクタや外部モニタを利用したデュアルディスプレイ環境は,

% sudo vi /etc/X11/xorg.conf
% diff -u /etc/X11/xorg.conf.org /etc/X11/xorg.conf
--- /etc/X11/xorg.conf.org      2011-02-02 00:06:23.000000000 +0900
+++ /etc/X11/xorg.conf  2011-02-02 01:59:45.000000000 +0900
@@ -8,3 +8,12 @@
        Driver  "psb"
 EndSection

+Section "Screen"
+       Identifier      "Default Screen"
+       Monitor         "Configured Monitor"
+       Device          "Configured Video Device"
+       Subsection      "Display"
+               Virtual 3000    3000
+       EndSubsection
+Endsection
+

などと十分大きなスクリーンを確保しておくことで,

% xrandr --output LVDS0 --primary --output RGB0-1 --auto --right-of LVDS0

簡単に実現できる.

コンソールで日本語を使う

フレームバッファを有効にしたので,せっかくだからこの設定もしておく. fbterm が国際化されている有名なターミナルだそうで,

% fbterm

で表示の方は OK .入力には uim-fep を利用する. Google Code Archive - Long-term storage for Google Code Project Hosting. の通り残念ながら iiimf と uim のブリッジは作られる気配がないので,なんとなく SKK を入れておく.

% sudo aptitude install uim-skk
% cat<<EOF > ~/.uim
(define-key generic-on-key? '("<Control> " "<IgnoreShift><Control>\\"))
(define-key generic-off-key? '("<Control> " "<IgnoreShift><Control>\\"))
EOF

こんな風に設定しておけば,

% uim-fep -u skk

あるいは

% uim-fep -u anthy-utf8

などとして fep を立ち上げ, C-SPC や C-\ で日本語入力の ON/OFF を切り替えられる.

acpi(d)の設定

何も設定せずとも,ディスプレイを閉じればバックライトが消灯する程度のことはやってくれるが, Fn+F2-F4 で音量を調整したり, Fn+F5,F6 で輝度を調整したり…といった機能は個別に設定しなければならない.masakiの雑記帳がとても参考になる.注意すべき点は,ディスプレイのドライバに uvesafb(or vesa) を使っている場合と psb を使っている場合とで輝度調整の方法が違うことだろう.
前者の場合,

% lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation System Controller Hub (SCH Poulsbo) Graphics Controller (rev 06)

より, setpci から直接 00:02.0 の値をいじることで実現できる.これを毎度手で叩くのは大変なので,先賢の用意してくれた zbright というスクリプトを使って調整する.

% wget "http://www.nvnews.net/vbulletin/attachment.php?attachmentid=34624&d=1230141826" -O zbright
% chmod +x zbright
% sudo mv zbright /usr/local/sbin/

% sudo zbright 50
% sudo zbright +10
% sudo zbright -10

対して後者の場合, psb のドライバが輝度調整のインターフェースを提供してくれているので, xbacklight など適当なソフトを使って調整できる.これには特権がいらないので扱いやすい.

% sudo aptitude install xbacklight

% xbacklight = 50
% xbacklight + 10
% xbacklight - 10

また先のサイトでは言及されていないが,そのまま ALSA を使っている場合,音量調整は amixer を使うと簡単に行えるので, zbright っぽいフロントエンドを書いておく.

% cat<<EOF | sudo tee /usr/local/bin/volume_control
#!/usr/bin/env bash

AMIXER=/usr/bin/amixer

VOL_L=$($AMIXER get Master | egrep -o 'Left: Playback [0-9]*' | egrep -o '[0-9]*')
VOL_R=$($AMIXER get Master | egrep -o 'Right: Playback [0-9]*' | egrep -o '[0-9]*')
VOL=$(($(($VOL_L+$VOL_R))/2))
VOL_MIN=$($AMIXER get Master | egrep -o 'Limits: Playback [0-9]*' | egrep -o '[0-9]*')
VOL_MAX=$($AMIXER get Master | egrep -o 'Limits: Playback [0-9]* - [0-9]*' | egrep -o '\- [0-9]*' | egrep -o '[0-9]*')

if [ $1 ]; then
  if [ "$(echo $1 | tr -d '\-')" != "$1" ]; then
    DELTA=$(echo $1 | tr -d '\-')
    SET_VOL=$(($VOL-$DELTA))
  elif [ "$(echo $1 | tr -d '\+')" != "$1" ]; then
    DELTA=$(echo $1 | tr -d '\+')
    SET_VOL=$(($VOL+$DELTA))
  else
    SET_VOL=$1
  fi

  if [ $SET_VOL -ge $VOL_MAX ]; then
    SET_VOL=$VOL_MAX
  elif [ $SET_VOL -le $VOL_MIN ]; then
    SET_VOL=$VOL_MIN
  fi

  $AMIXER set Master on $SET_VOL > /dev/null
else
  echo "VOL_L   = $VOL_L"
  echo "VOL_R   = $VOL_R"
  echo "VOL     = $VOL"
  echo "VOL_MAX = $VOL_MAX"
  echo "VOL_MIN = $VOL_MIN"
fi
EOF

% sudo chmod +x /usr/local/bin/volume_control

% volume_control 10
% volume_control +3
% volume_control -3

また,先のサイトではスリープを pm-suspend --quirk-vbe-post --quirk-vbemode-restore によって行っているが, uvesafb, psb 双方で有効だったものとして,私はhttp://garin.jp/doc/%E6%A9%9F%E7%A8%AE%E5%88%A5/vaio_type_p/sleepに紹介されている sleep_mode.sh を, setpci のパスを変更して利用している.
あとは,これらを叩く設定を /etc/acpi/events の中に作成しておく.私は以下のように作った.

% more /etc/acpi/events/vgnp70h_*
::::::::::::::
/etc/acpi/events/vgnp70h_fn_f12
::::::::::::::
event=button/suspend
action=xautolock -locknow && /usr/local/sbin/sleep_mode

::::::::::::::
/etc/acpi/events/vgnp70h_fn_f2
::::::::::::::
event=button/mute
action=/usr/bin/amixer set Master off

::::::::::::::
/etc/acpi/events/vgnp70h_fn_f3
::::::::::::::
event=button/volumedown
action=/usr/local/bin/volume_control -1

::::::::::::::
/etc/acpi/events/vgnp70h_fn_f4
::::::::::::::
event=button/volumeup
action=/usr/local/bin/volume_control +1

::::::::::::::
/etc/acpi/events/vgnp70h_fn_f5
::::::::::::::
event=video/brightnessdown
action=/usr/local/sbin/zbright -10;/usr/bin/xbacklight -10

::::::::::::::
/etc/acpi/events/vgnp70h_fn_f6
::::::::::::::
event=video/brightnessup
action=/usr/local/sbin/zbright +10;/usr/bin/xbacklight +10

::::::::::::::
/etc/acpi/events/vgnp70h_fn_s1
::::::::::::::
event=button/prog1
action=xautolock -locknow

ちなみにウィンドウ整列ボタン(S2)は ACPI から拾うことができなかった.キーコード 157 のキーとして認識されているようなので,何か機能を割り振りたかったら,キーボードを監視する適当なソフトを使う必要があるだろう.

e-pTeX(with TeX Live 2010)の導入

DebianpTeXUTF-8 に対応していない.これは Debian の足が遅いからなかなか対応されないというより, TeX が組み版ソフトであるが故の根の深い問題を含んでいて, Unicode の思想と, PostScript の現実の実装とを巻き込んだ,かなりややこしい話になってしまっているためのようだ.
現在, TeX が周辺の仕様を巻き込んで本当の意味で Unicode 化される見通しは全くないといっても過言ではない状況だが,平均的日本人の感覚からみた UTF-8 対応がなされた TeXディストリビューションは既にいくつか存在する.そのうち,最近ホットらしい e-pTeX の testing を導入した.先に導入した TeX Live 2009 をベースにした ASCII pTeX の処理系はそのまま温存し,どちらも使えるようにしておく.
まず, e-pTeX がベースとしている TeX Live 2010 を導入する.驚くべきことに TeX Live 2010 は pTeX を取り込んだらしい.乱立する処理系もだんだんまとまってくるんだろうか.

% wget "http://www.t.ring.gr.jp/pub/text/CTAN/systems/texlive/Images/texlive2010-20100826.iso"
% sudo mkdir /mnt/texlive2010
% sudo mount -t iso9660 -o loop texlive2010-20100826.iso /mnt/texlive2010
% cd /mnt/texlive2010
% sudo ./install-tl
> I
% sudo umount /mnt/texlive2010

特に設定をいじらず,そのまま I を叩いて /usr/local/texlive/2010 に導入する.
次に, e-pTeX を導入.

% wget "http://sourceforge.jp/frs/redir.php?m=iij&f=%2Feptex%2F50441%2Feptex-110102.tar.xz" -O eptex-110102.tar.xz
% tar Jxvf eptex-110102.tar.xz
% cd tl10/
% wget "http://mirror.ctan.org/systems/texlive/Source/texlive-20100720-source.tar.xz"
% wget "http://homepage3.nifty.com/ttk/comp/tex/uptex_font-0.30.tar.gz"
% wget "http://downloads.sourceforge.net/project/freetype/freetype2/2.4.2/freetype-2.4.2.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Ffreetype%2Ffiles%2Ffreetype2%2F2.4.2%2F&ts=1296208547&use_mirror=jaist" -O freetype-2.4.2.tar.gz
% vi common.sh
% diff -u common.sh.org common.sh
--- common.sh.org       2011-01-28 22:04:14.000000000 +0900
+++ common.sh   2011-01-28 22:06:55.000000000 +0900
@@ -4,18 +4,18 @@
 # --------------------------------

 # this directory
-TLSRCDIR=/opt/home-supp/tl10
+TLSRCDIR=/home/ludobile/tmp/20110128/eptex_110102/tl10

 # temporaly working directory
 TMPDIR=/tmp
 #TMPDIR=/var/tmp

 # the place of installed TeX Live
-TLINSTDIR=/opt/texlive/2010
+TLINSTDIR=/usr/local/texlive/2010
 #TLINSTDIR=/mnt/cd0a

 # install directory
-PREFIX=/opt/texlive/p2010
+PREFIX=/usr/local/texlive/p2010

 # toolkit for [p]xdvi
 TL_CONF_XDVI_TOOLKIT=--with-xdvi-x-toolkit=motif

% sudo ./all.sh -p -e -r

エラーを大量に吐いて止まってしまった. INSTALL.TXT をちゃんと読むと,

Moreover, the followings are needed to execute ./reautoconf (executed in build.sh).
I am working with following versions:

  • GNU autoconf 2.65
  • GNU automake 1.11.1
  • GNU m4 1.4.15

(autoconf >=2.66 may not work?)

と書いてある. squeeze の autoconf は 2.67 なので,ここが問題の様子. pin するほどのことでもないので, snapshot.debian.org からバイナリをもらってくる.

% sudo aptitude remove autoconf \
;: Removed: autoconf automake{a} autotools-dev{u}
% sudo aptitude install autotools-dev
% wget http://snapshot.debian.org/archive/debian-ports/20100304T000000Z/pool/main/a/autoconf/autoconf_2.65-4_all.deb
% sudo dpkg -i autoconf_2.65-4_all.deb
% sudo aptitude install automake

改めてインストールを試みると,今度は

checking for Motif... libraries /usr/lib, headers (none)
configure: error: No Motif.
=== configuring in pxdvik failed
make[2]: *** [subtexk] Error 1
make[2]: Leaving directory `/tmp/texlive-20100720-source/Work/texk'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/texlive-20100720-source/Work/texk'
make: *** [all-recursive] Error 1
Command exited with non-zero status 2
1942.17user 510.79system 32:11.07elapsed 127%CPU (0avgtext+0avgdata 459408maxresident)k
4184inputs+645376outputs (17major+45491488minor)pagefaults 0swaps

  1. echo 2

find: `/tmp/texlive-20100720-source/inst/bin': No such file or directory
./Build: Build failed, no executables under /tmp/texlive-20100720-source/inst/bin.

Motif がないといわれた.なぜ Motif がいるのか解せないが,

% sudo aptitude install libmotif-dev \
;: Installed: libmotif-dev libmotif4{a} x11proto-print-dev{a}

Motif を導入してから sudo ./all.sh -p -e -r を再度試みたところ,今度は成功.後はおまけ.

% sudo scripts/install.sh
% wget "http://sourceforge.jp/frs/redir.php?m=osdn&f=%2Feptex%2F48622%2Fptex-qtrip-100816.tar.gz" -O ptex-qtrip-100816.tar.gz
% bash scripts/trip.sh

最後に,パスを通しておく.この作業を行わなければ以前導入した EUC-JP にのみ対応した TeX 処理系が選択され,以下の作業を行えばさらに UTF-8 に対応した TeX の処理系が走る.

% cat<<EOF >> ~/.zshrc.bernstein
# Use self-compiled e-pTeX with TeX Live 2010
if [ $(cat /etc/hostname) = "bernstein" ]; then
  export PATH=/usr/local/texlive/p2010/bin/i686-pc-linux-gnu:$PATH
  export MANPATH=/usr/local/texlive/2010/texmf/doc/man:$MANPATH
  export INFOPATH=/usr/local/texlive/2010/texmf/doc/info:$INFOPATH
fi

EOF

正常にコンパイルできた環境を最後にメモしておく.

Linux version 2.6.32-5-686 (Debian 2.6.32-30) (ben@decadent.org.uk) (gcc version 4.3.5 (Debian 4.3.5-4) ) #1 SMP Wed Jan 12 04:01:41 UTC 2011
autoconf: 2.65-4
automake: 1:1.11.1-1
gcc     : 4:4.4.5-1
m4      : 1.4.14-3

というわけで

簡単なのでみんなも type P 使うといいと思うよ!

human-readableにするフィルタを書いた

私は日々の rsync のログを, --stats オプションで詳細表示して記録している.しかしこのままだと,

% tail -n15 /root/rsync_log/*.log
...
==> /root/rsync_log/var.log <==
Number of files: 5539
Number of files transferred: 90
Total file size: 628875330 bytes
Total transferred file size: 58232404 bytes
Literal data: 58232404 bytes
Matched data: 0 bytes
File list size: 146708
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 58390356
Total bytes received: 2095

sent 58390356 bytes  received 2095 bytes  1441788.91 bytes/sec
total size is 628875330  speedup is 10.77
Sat Jan 22 05:05:42 JST 2011
...

こんな具合でひどく読みづらい. rsync には

-h, --human-readable output numbers in a human-readable format

このように,当たり前のオプションが当たり前に用意されているのだけれど,マニュアルを読まないで突っ走る馬鹿な私は,これを手で書こうと試みた.まあ rsync に限らず何にでも使えるので,もしかすると便利かもしれない.

alias -g HR='| human_readablize'

function human_readablize() {
  perl <(echo '
#!/usr/bin/perl
use strict;
use warnings;

my @postfix_d = qw(bytes kB MB GB TB PB EB ZB YB);
my @postfix_b = qw(bytes KiB MiB GiB TiB PiB EiB ZiB YiB);
my $sigfig = !$#ARGV ? $ARGV[0] : 3;

while( my $str = <STDIN> ){
  $str =~ s/(\d[0-9,\.]*)\s?byte(?:s?)/&return_advanced($1)/egi;
  $str =~ s/(\d[0-9,\.]*)/&insert_comma($1)/egi;
  print $str;
}

sub return_advanced(\$){
  my $num = $_[0];
  $num =~ s/,//g;
  my (undef, $num_d, $ct_d) = &advance(10**3, $num);
  my (undef, $num_b, $ct_b) = &advance(2**10, $num);
  if( $ct_b ){
    return sprintf("%.*g $postfix_b[$ct_b](%.*g $postfix_d[$ct_d])", $sigfig, $num_b, $sigfig, $num_d);
  }
  else {
    return sprintf("%.*g $postfix_d[$ct_d]", $sigfig, $num_d);
  }
}

sub advance(\$\$;$){
  if( $#_!=2 ){
    return &advance($_[0], $_[1], 0);
  }
  elsif( $_[1] >= $_[0] ){
    return &advance($_[0], $_[1]/$_[0], $_[2]+1);
  }
  else {
    return @_;
  }
}

sub insert_comma(\$){
  my $num = $_[0];
  my $cnt = 0;
  while( $num =~ /\./g ){ $cnt++; }
  if( $cnt > 1 ){
    return $num;
  }
  else {
    my ($int_part, $frac_part) = split(/\./, $num);
    while( $int_part =~ s/(.*\d)(\d\d\d)/$1,$2/ ){};
    if( $frac_part ){
      return $int_part.".".$frac_part;
    }
    else {
      return $int_part;
    }
  }
}
  ') $1
}

~/.zshrc にベタで書く.べったべた.はてなのパーサが正しくパースできていなくて和む.
これで,

% tail -n15 /root/rsync_log/*.log HR
...
==> /root/rsync_log/var.log <==
Number of files: 5,539
Number of files transferred: 90
Total file size: 600 MiB(629 MB)
Total transferred file size: 55.5 MiB(58.2 MB)
Literal data: 55.5 MiB(58.2 MB)
Matched data: 0 bytes
File list size: 146,708
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 58,390,356
Total bytes received: 2,095

sent 55.7 MiB(58.4 MB)  received 2.05 KiB(2.1 kB)  1.37 MiB(1.44 MB)/sec
total size is 628,875,330  speedup is 10.77
Sat Jan 22 05:05:42 JST 2,011
...

西暦は想定していなかった.

nickcolor.pl 的に着色してみた

昨日の続き.
例の sed.txt を

s/:[0-9]\{2\} <#twitter@atig\.rb:/ /
s/> / /
s/^C10\([^^O]*\)^O/^[[36m\1^[[m/g
s/@YourNick/^G^[[31m@YourNick^[[m/g

このように変更する.例によって ^C ^O ^[ ^G は制御文字. @YourNick というキーワードで visual bell を鳴らすようにしてみた.
次に, return_colored_line.pl として以下のようなスクリプトを用意.

#!/usr/bin/perl
use strict;
use warnings;
use utf8;

my %saved_colors;
my $color;
my @colors = qw/2 3 4 5 6 7 9 10 11 12 13/;
my %esc_seq = (
  "2"  => "\x1b[34m",
  "3"  => "\x1b[32m",
  "4"  => "\x1b[31m\x1b[1m",
  "5"  => "\x1b[31m",
  "6"  => "\x1b[35m",
  "7"  => "\x1b[33m",
  "8"  => "\x1b[33m\x1b[1m",
  "9"  => "\x1b[32m\x1b[1m",
  "10" => "\x1b[36m",
  "11" => "\x1b[36m\x1b[1m",
  "12" => "\x1b[34m\x1b[1m",
  "13" => "\x1b[35m\x1b[1m",
  "14" => "\x1b[37m",
    );

load_colors();

while( my $line = <STDIN> ){
  my @parts = split(/ /, $line);
  my $nick = $parts[1];
  if( $saved_colors{$nick} ){
    $color = $saved_colors{$nick};
  }
  else {
    $color = simple_hash($nick);
  }
  $parts[1] = "$esc_seq{$color}".$nick."\x1b[m";
  $| = 1; # Avoid buffering
  print "@parts";
}
exit 0;

sub load_colors {
  if( open COLORS, "$ENV{HOME}/.irssi/saved_colors" ){
    while (<COLORS>) {
      # I don't know why this is necessary only inside of irssi
      my @lines = split "\n";
      foreach my $line (@lines) {
        my($nick, $color) = split ":", $line;
        $saved_colors{$nick} = $color;
      }
    }
    close COLORS;
  }
}
sub simple_hash {
  my ($string) = @_;
  chomp $string;
  my @chars = split //, $string;
  my $counter;

  foreach my $char (@chars) {
    $counter += ord $char;
  }

  $counter = $colors[$counter % 11];

  return $counter;
}

nickcolor.pl は Public Domain らしいので,色の計算をしているところをごっそり拝借.

% tail -n 100000 -f `date +%Y.%m.%d.txt` \
  | cat `date +%Y.%m.%d.txt -d '1 days ago'` - \
  | sed -u -f sed.txt \
  | perl return_colored_line.pl

などとすれば, irssi で見慣れた色がついて表示される.

ログを直接参照する形式にしてしまえば,後はパイプでやりたい放題.たとえば keywords.txt, ngwords.txt, footers.txt として

keyword1
keyword2
keyword3
...
ngword1
ngword2
ngword3
...
footer1
footer2
footer3
...

こんなファイルを用意しておいて,

% tail -n 100000 -f `date +%Y.%m.%d.txt` \
  | cat `date +%Y.%m.%d.txt -d '1 days ago'` - \
  | grep --line-buffered -f keywords.txt \
  | grep --line-buffered -v -f ngwords.txt \
  | sed -u -f <(awk '{if($1!="") print "s/" $1 "//g"}' footers.txt) \
  | sed -u -f sed.txt \
  | perl return_colored_line.pl

と叩くと, keywords を含み ngwords を含まない発言を抽出して,そこから footers をカットして出力できる.正規表現が使えるので, twitter 公式のリストより圧倒的に柔軟に TL を快適に出来る.

しかし

Perl を使ってしまったのは失敗だった.中里一日記: 少女まんがにおける暴力のようなもので.

tmux 1.4 を入れてみた

twitter

あけましておめでとうございます.
今年の目標は,本音と建前をうまく使い分けられるようになること.ということで早速,建前「aptで依存関係を綺麗に管理」と本音「最新版を使いたい」をすりあわせる練習.方針は,

  • 準最新版を使う
  • なるべくaptに頼る
  • システムをなるべく汚さない

こんな感じで.

ソースコード

は,先日リリースされたばかりの tmux 1.4 に,

160 :名無しさん@お腹いっぱい。 :2009/11/24(火) 22:06:09
PuTTY(UTF-8) - tmux-1.1 だけど、156 同様にダメだった。

ちょっとソースを眺めてみたけど、screen_write_cell の中の
/*
* If this is a wide character and there is no room on the screen, for
* the entire character, don't print it.
*/
ってとこにひっかかってるような。
試しにその処理をコメントアウトしたらちゃんと表示された。(副作用は知らない)

http://hibari.2ch.net/test/read.cgi/unix/1247316209/160

を参考に,

--- tmux-1.4/screen-write.c.org 2010-06-17 03:09:23.000000000 +0900
+++ tmux-1.4/screen-write.c     2011-01-04 14:14:36.000000000 +0900
@@ -982,9 +982,11 @@
         * If this is a wide character and there is no room on the screen, for
         * the entire character, don't print it.
         */
+/*
        if (width > 1 && (width > screen_size_x(s) ||
            (s->cx != screen_size_x(s) && s->cx > screen_size_x(s) - width)))
                return;
+*/

        /*
         * If the width is zero, combine onto the previous character, if

こんな修正を施してみた.コードを理解していないのでどんな弊害が起こるかわからないけれど,これでひとまず, GNU Screen から tmux に乗り換えたときに真っ先にぶち当たる折り返し問題が解決する.これで | less 地獄ともおさらば.

% wget http://downloads.sourceforge.net/tmux/tmux-1.4.tar.gz
% tar zxvf tmux-1.4.tar.gz
% patch -p0 < 上のアレ

コンパイル

tmux depends on libevent 1.4 or 2.0 and a terminfo implementation (normally ncurses).

http://tmux.sourceforge.net/

Debian lenny の libevent は 1.3 系なので,そのままだとちょっと足りない. lenny-backports から tmux を導入した場合は libevent-1.4-2(1.4.13-stable-1~bpo50+1) あたりが自動的にインストールされるが,自分でコンパイルしたいときは libevent-dev を明示的に apt-pinning で指定してやらないとだめ.なので, /etc/apt/preferences に

Package: libevent-dev
Pin: release a=lenny-backports
Pin-Priority: 999

とか書いておく.
で,手を加えたコードなので,衝突を避けるべくちょっと違う名前で導入する.今までなあなあでやってきたが,各ディレクトリの役割を知ろう(サブディレクトリ編) (2/2):Windowsユーザーに教えるLinuxの常識(3) - @ITを信じるならば apt 管理外のソフトウェアを「導入」したい場合は /usr/local に放り込めばよいようなので, /usr/local/tmux-1.4mod に突っ込んでおいた.

% cd tmux-1.4/
% ./configure
% make
% sudo PREFIX=/usr/local/tmux-1.4mod make install

alternatives

% ls -lha `which vi`

などしてみると気づくが,いろいろなバージョンが混在しているプログラムを Debian は update-alternatives というユーティリティを通して捌いている.これに tmux というグループを追加して, lenny-backports から導入した 1.3 系と選択できるようにする. $PATH を見てみると, /usr/local/bin:/usr/bin:/bin:/usr/games となっているので,確かに /usr/local/bin に symlink を張れば良いようになっているみたい.

% sudo update-alternatives --install /usr/local/bin/tmux tmux /usr/bin/tmux 132
% sudo update-alternatives --install /usr/local/bin/tmux tmux /usr/local/tmux-1.4mod/bin/tmux 140

おまけ

IRC のクライアントを常時起動させているのが馬鹿馬鹿しくなってきたので, IRC proxy のログを直接覗くことにしてみた.たとえば twittertiarraatig.rb こんな経路で見ている場合,

s/:[0-9]\{2\} <#twitter@atig\.rb:/^[[32m</
s/> />^[[m/
s/^C10\([^^O]*\)^O/^[[34m\1^[[m/g

こんなファイル*1sed.txt とか適当な名前でこしらえておいて,ログの保存されているディレクトリで

% tail -n 10000 -f `date +%Y.%m.%d.txt` | cat `date +%Y.%m.%d.txt -d '1 days ago'` - | sed -f sed.txt

とかやると,スクリーンショットの如く色つきで表示されたログが垂れ流される. nick による自動色分けについてはまた気が向いたときにでも.

*1:^[ ^C ^Oは制御文字なので注意.