パス長すぎ
なんか Ubuntu Gutsy に KDE4 入れてみたら KDE4 が起動しなくてなんでだろうと調べてみたら、klauncher が
Fatal error: can't create temfile
とかいってこけている。なんだこれ。kdelibs のコードを引っ張ってきて見てみると socket 周りが怪しい。さらに strace -f で追いかける。UNIX Domain Socket に bind しているところで失敗しているなぁ。お、なんか socket のパスがホームディレクトリ以下で長いな。数えてみたら 112 文字。bind の第3引数も 112 だ。
ん?112 文字? man 7 unix を見てみる。
#define MAX_UNIX_PATH 108
これか!とりあえず、/tmp にディレクトリ作って ~/.kde4 はそこへの symbolic link にしたら起動した。
しかし、ファイルサーバは afp でマウントするのも想定してあるのでホームディレクトリが長いんだよね。/Network/Servers/$(hostname)/Volumes/... とか
% (cd; pwd) | wc -c 64
長えよ。まぁ、ホームディレクトリが長すぎる環境もどうかと思うが、ホームディレクトリに socket 作るのもどうなんだろうと思わくもない。
ところで、kdelibs のコードをチラッと見た限りでは bind の第3引数は strlen(path) な感じになっている。ここは本来 sizeof(struct sockaddr_un) が来るはずなのではないかと思うのだけどどうなんだろう。