パス長すぎ

なんか Ubuntu GutsyKDE4 入れてみたら 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) が来るはずなのではないかと思うのだけどどうなんだろう。