cygwin/X で xfs (X Font Server) にアクセスしようとすると常に同じエラーになる

2005.10.08 Takaya Sakusabe


症状

host# xset +fp tcp/fshost:7100
xset:  bad font path element (#58), possible causes are:
    Directory does not exist or has wrong permissions
    Directory missing fonts.dir
    Incorrect font server address or syntax

ホストやポートを変えても全く変わらず。


原因

== xc/programs/Xserver/dix/dixfonts.c:1946 ==
void
InitFonts ()
{
    patternCache = MakeFontPatternCache();

#ifndef KDRIVESERVER
    if (screenInfo.numScreens > screenInfo.numVideoScreens) {
	PrinterFontRegisterFpeFunctions();
	FontFileCheckRegisterFpeFunctions();
	check_fs_register_fpe_functions();
    } else 
#endif
    {
#ifdef KDRIVESERVER
	BuiltinRegisterFpeFunctions();
#endif
	FontFileRegisterFpeFunctions();
#ifndef NOFONTSERVERACCESS
	fs_register_fpe_functions();
#endif
    }
}

fs_register_fpe_function() が呼ばれるかどうかが NOFONTSERVERACCESS の有無で条件づけられていて、恐らく、cygwin のバイナリ配布は定義されてビルドされている。


対策

ソース配布には定義はされていないので、ソースから作れば OK かもしれない。

ただし、バイナリ配布をビルドした人が、わざわざ NOFONTSERVERACCESS を定義して xfs へアクセスできなくしているのには何か理由が?

X のビルドは大昔、Solaris 上で X11R5 を make world はしていたけど、 Linux とか cygwin 上でのソースからのパッケージのビルドは全然やったことないし、別の問題が潜んでいるのかもしれないので、時間が取れるまではとりあえず放置プレイ。