uumで/dev/ptsを使う |
YAMAMORI Takenori ●yamamori |
日本語入力環境としては、やはりWnn + uumが手に馴染みます。 しかし、Fedora Core 3などの標準カーネルでは、legacy pty (BSDの疑似端末)が組み込まれなくなったので、/dev/ttyp0,1,2...等を利用する uumが「Can't get pty.」というエラーを出して起動しなくなってしまいました。
今後は、疑似端末は/dev/ttyp0,1,2...ではなく、/dev/pts/0,1,2...を使わなければならないようです。
uumを使えるようにするためには、CONFIG_LEGACY_PTYS=y に変更してカーネルを再構築するか、またはuumのソースを変更するかしかありません。
カーネルを再構築しなくてもuumが使えるようにするために、 /dev/pts/0,1,2...を使うようにuumのソースを修正してみました。
/dev/pts/0,1,2...を使うためには、openpty()という便利な関数が用意されていますので、これを使えばよさそうです。 該当のソースファイルは、FreeWnnのソースの中の、Wnn/uum/jhlp.cです。 実際には、さらに、savetmioという構造体に ioctl()で端末のデータをセットしている部分も修正する必要がありました。 以上のpatchを作ってみましたので、以下に置いておきます。
FreeWnn-1.1.1-a020-uum-openpty.patch.gz
このパッチは、FreeWnn-1.1.1-a020.tar.bz2 に対して作ってありますが、近似バージョンならたいてい当たるのではと思います。 FreeWnnのソースを展開したトップディレクトリで、次のようにします。
$ zcat /path/FreeWnn-1.1.1-a020-uum-openpty.patch.gz | patch -p1
さらに、./configureの実行後、Wnn/uum/Makefileの、LOCAL_LIBRARIESところに、 -lutil を追加する必要があります。
LOCAL_LIBRARIES = $(WNNJLIB) $(WNNCONVLIB) -lnsl -lcrypt ↓ LOCAL_LIBRARIES = $(WNNJLIB) $(WNNCONVLIB) -lnsl -lcrypt -lutil
これは、openpty()関数が含まれる libutil.so.*とリンクするためです。 (Makefileの修正については、上記 patchには含まれていません)
これでmakeしてできたuumを実行すると、無事、/dev/pts/0,1,2...を使って uumが立ち上がると思います。
$ uum -Uu ← uumをEUCモードで起動 uum(かな漢字変換フロントエンドプロセッサ) $ tty ← 試しにttyコマンドを実行 /dev/pts/7 ← /dev/pts/7が使われている $