STed2が「Cannot open display. Aborting.」となって起動できない件についてとその対処
エラーメッセージ
$ sted2 MIDI Music Composer STed 2.07m + 20021104 Copyright 1990-97 TURBO Cannot open display. Aborting.
手元のGentoo Linuxで試したところ、このエラーで起動できず、環境変数DISPLAYを未定義にすることでncurses版を起動することはできたが、日本語が化けるため、英語で使うのが無難なのだが
$ LC_MESSAGES=C env -u DISPLAY sted2
X Window System版と比べると見づらく、操作がうまくいかない部分もある。
どこでエラーになっている?
エラー自体は、(邪道な方法かもしれないが)ソースにputs()関数を色々なところに追加して場所を特定したところ、
[引用]ファイル名: sted2-20021104/sted2/sub/xwin.c
int Setup_FontSet( void ) { XFontSetExtents *e; char **miss, *def; int n_miss; XRectangle i_ret, l_ret; if ( font_name[0]==0 ) strcpy( font_name, XSTed_Default_Font ); XSTed_fs = XCreateFontSet ( XSTed_d, font_name, &miss, &n_miss, &def); if ( n_miss > 0 ) return -1;
このXCreateFontSet()関数が失敗したところまでは分かったのだが、対処の方法が分からなかった。
解決策
(ディストリによっては「libx11-dev」などの開発パッケージをインストールした上で)
http://www.nabble.com/Re%3A-3.9-8VM%E7%94%A8%E3%81%AESqueakImmX11Plugin%E3%83%91%E3%83%83%E3%83%81-p8959897.html
のテストプログラムをビルド(gcc [保存したファイル].c -o [実行ファイル名] -lX11)して実行し、色々なパターンを渡して出力を得たところ、XCreateFontSet()の3番目の引数のポインタが指すint型変数の値(sted2-20021104/sted2/sub/xwin.cの例だと変数n_miss)が0を越えてもフォントは見つかり、表示される(XCreateFontSet()の戻り値もNULLではない)ことが分かった。つまり、
--- sted2-20021104.orig/sted2/sub/xwin.c +++ sted2-20021104/sted2/sub/xwin.c @@ -341,7 +341,7 @@ XSTed_fs = XCreateFontSet ( XSTed_d, font_name, &miss, &n_miss, &def); - if ( n_miss > 0 ) return -1; + if (XSTed_fs == NULL) return -1; e = XExtentsOfFontSet( XSTed_fs ); XmbTextExtents( XSTed_fs, "A", 1, &i_ret, &l_ret );
とするのが正しいのではないか、ということになる。*1
実際、修正後にビルドした結果としても、条件付きで無事に起動するようになったことが確認できた。
sedを使用したソース修正例としては
$ sed -i 's/n_miss > 0/XSTed_fs == NULL/' sted2/sub/xwin.c
のようになる。
起動の追加条件について
STed2の設定ファイル*2のフォント設定部分で、該当フォントが使用できる必要がある。
そのままではまだエラーになる場合、設定ファイルを開いて
ファイル名: ~/.sted2rc もしくは [インストール先]/lib/sted/sted2.cnf
*#font_name=-\*-fixed-\*-r-normal--12-\*-\*-\* *#font_name=-\*-fixed-\*-r-normal--14-\*-\*-\* #font_name=-\*-fixed-\*-r-normal--16-\*-\*-\* *#font_name=-\*-fixed-\*-r-normal--18-\*-\*-\* *#font_name=-\*-fixed-\*-r-normal--20-\*-\*-\* *#font_name=-\*-fixed-\*-r-normal--24-\*-\*-\*
となっている部分を見つけたら、コメント記号(アスタリスク)の付く項目を変えて他のフォント設定が有効になるようにするか、PCF*3フォントを追加してみる。あるいは、フォントセットのパターンを書き換える。
うまくいかない場合、上のテストプログラムを使用して試すのもよい。
手元のGentoo Linuxでは、16ドットでのフォント表示ができなかったため、media-fonts/font-jis-misc*4とmilkjfフォントを追加したところ、16ドットでも起動するようになった。
関連記事:
font-jis-misc(jiskan16)だけだと
X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 1 (X_CreateWindow) Value in failed request: 0x0 Serial number of failed request: 32 Current serial number in output stream: 34
となってしまった(この状態では、テストプログラムの検出フォントが「-jis-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1983-0」の1つだけしか出ないが、そのせいかもしれない)。
画像はmilkjf+font-jis-miscでの表示(16ドット)で、テストプログラムの結果は
$ [実行ファイル名] "-*-fixed-*-r-normal--16-*-*-*" pattern: -*-fixed-*-r-normal--16-*-*-* default: missing: KSC5601.1987-0 missing: GB2312.1980-0 found: -milkjf-fixed-bold-r-normal--16-150-75-75-c-80-iso8859-1,-milkjf-fixed-bold-r-normal--16-150-75-75-c-80-iso8859-1,-jis-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1983-0,-milkjf-fixed-bold-r-normal--16-150-75-75-c-80-jisx0201.1976-0,-misc-fixed-bold-r-normal--16-116-100-100-c-0-iso10646-1
のようになっている。
Vine Linux 4.2では、設定の必要がなく、既定の16ドットで動作している(ビルドには「XOrg-devel」パッケージが必要)。
しかし、見ての通り、そのままでは音符の位置がずれている(Gentoo上でも同様)。この件に関しては別の記事で扱う。