▼デフォルト設定のtwmで、タイトルバーなどが異様に大きくなる件▼

最近のGnomeやKDEデスクトップを導入している環境で、 軽いウィンドウマネージャを試してみようと、X11初期からある twm を起動してみると、タイトルバーやメニューなどが異様に大きかったりします。 (2017/11)
[タイトルバーが異様に大きいxtermのウィンドウ]

$Keywords: twm, tall titlebar, big titlebar, big font $


▼手っ取り早い解決法

LANG=C で twm を起動すれば、 とりあえず通常の大きさのタイトルバーになります。 フォントは fixed が使われていると思います。 日本語は出ません。

[LANG=C で fixedフォント使用のtwm]

▼ちゃんと理解して解決しよう

twm を LANG=ja_JP.utf-8 などのlocaleで起動すると、twm は XCreateFontSet(3) でフォントを読み込み、フォントセット中のフォントを 全部検索して、最大のascent/descent を計算して、全部の文字が収まる高さを 文字のレンダリング用に確保します。

で、異様にタイトルバーが大きくなるというのは、 Unicode (iso10646) エンコードのフォントとして -arabic-newspaper-medium-r-normal--32-246-100-100-p-137-iso10646-1 というフォントを引き当ててしまった、という場合だと思われます。

twmにパッチを当てて XFontSet に含まれるフォントの一覧を吐かせてみると、

src/twm: XCreateFontSet(,-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*,*)
src/twm: extracting ascent 11/descent 2 from -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1
src/twm: extracting ascent 11/descent 2 from -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1
src/twm: extracting ascent 14/descent 2 from -jis-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1983-0
src/twm: extracting ascent 14/descent 2 from -daewoo-gothic-medium-r-normal--16-120-100-100-c-160-ksc5601.1987-0
src/twm: extracting ascent 14/descent 2 from -isas-fangsong ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0
src/twm: extracting ascent 12/descent 2 from -misc-fixed-medium-r-normal--14-130-75-75-c-70-jisx0201.1976-0
src/twm: extracting ascent 24/descent 11 from -arabic-newspaper-medium-r-normal--32-246-100-100-p-137-iso10646-1
src/twm: ascent=24 descent=11

で、なんでこんなフォントが選ばれてしまうのかですが、 デフォルトで設定されている -adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-* に相当するフォントが無い、ので、偶然か何かで -arabic-newspaper-medium-r-normal- を引き当ててしまうようです。

-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-iso10646-1 のフォントは、 xorg-x11-fonts-75dpi パッケージに含まれていますが、 これはレガシーなビットマップフォントなので、 fontconfigなアウトラインフォントをメインで使うデスクトップ環境では インストールされてない場合もあるかと思います。

▼xorg-x11-fonts-75dpiをインストールすると

-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-iso10646-* なフォントが解決できるので、 タイトルバーが「正常な」高さになります。

[正常な高さのタイトルバー]

▽ちょっと待て、これは -adobe-helvetica- ではないだろう?

なので、またパッチ当てた twm の XFontSet の出力を見てみましょう。

src/twm: XCreateFontSet(,-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*,*)
src/twm: extracting ascent 11/descent 2 from -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1
src/twm: extracting ascent 11/descent 2 from -misc-fixed-bold-r-normal--13-100-100-100-c-70-iso8859-1
src/twm: extracting ascent 14/descent 2 from -jis-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1983-0
src/twm: extracting ascent 14/descent 2 from -daewoo-gothic-medium-r-normal--16-120-100-100-c-160-ksc5601.1987-0
src/twm: extracting ascent 14/descent 2 from -isas-fangsong ti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0
src/twm: extracting ascent 12/descent 2 from -misc-fixed-medium-r-normal--14-130-75-75-c-70-jisx0201.1976-0
src/twm: extracting ascent 11/descent 3 from -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso10646-1
src/twm: ascent=14 descent=3
なので、ASCII文字領域には iso8859-1 エンコーディングで選ばれた -misc-fixed-bold-r-normal- が使われているようです。

twmrcのTitleFont には XFontSet形式でカンマで区切って エンコーディングが違う複数のフォントを詰められるので、

を列挙してやると、それっぽいフォントにできます。
~/.twmrc:
TitleFont "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*,-*-liberation sans-*-r-*-*-14-*-*-*-*-*-iso8859-*"
[liberation sans 14ドットのタイトルバー]
※ -misc-liberation sans- は17ドットフォントなので、 14ドットにスケーリングするとちょっと汚くなりますが。

▼xorg-x11-fonts-ISO8859-1-75dpi パッケージを追加する

と、 -adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1 が 使えるようになるので、もう少しすっきりしたタイトルバーにできます。 これが本来の姿なんでしょう。

~/.twmrc:
TitleFont "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"	デフォルト値
[Helvetica 12ドット、JIS 14ドットのタイトルバー]

昔のX11環境ではこれらのフォントはインストールされているのが普通だったので、 今になってから問題になっている感じです。


▼f.identifyの情報ウィンドウがやたら間延びしてるんですけど

f.identifyの情報ウィンドウは内部的には DefaultFont という フォントセットを使っているのですが、 これは "fixed" 固定で .twmrc で設定が出来ません。 -arabic-newspaper- を拾ってしまうと やたら隙間の多いウィンドウになります。 自分でパッチ作るかあきらめてください。 (vtwmでは設定できる模様)


kabe.sra-tohoku.co.jp