uumで/dev/ptsを使う

YAMAMORI Takenori ●yamamori
●/dev/ttyp0が使えない !

日本語入力環境としては、やはり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のソースを変更するかしかありません。


○openpty()を使ってuumのソースを修正

カーネルを再構築しなくてもuumが使えるようにするために、 /dev/pts/0,1,2...を使うようにuumのソースを修正してみました。

/dev/pts/0,1,2...を使うためには、openpty()という便利な関数が用意されていますので、これを使えばよさそうです。 該当のソースファイルは、FreeWnnのソースの中の、Wnn/uum/jhlp.cです。 実際には、さらに、savetmioという構造体に ioctl()で端末のデータをセットしている部分も修正する必要がありました。 以上のpatchを作ってみましたので、以下に置いておきます。



○uumでopenpty()を使うための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には含まれていません)



○uumが動いた !

これでmakeしてできたuumを実行すると、無事、/dev/pts/0,1,2...を使って uumが立ち上がると思います。

  $ uum -Uu                                     ← uumをEUCモードで起動
  uum(かな漢字変換フロントエンドプロセッサ)
  $ tty                                         ← 試しにttyコマンドを実行
  /dev/pts/7                                    ← /dev/pts/7が使われている
  $

| Free Solaris 7 | Free Solaris 7(ja) | Solaris 8 | Solaris 9 | Free UnixWare 7.1 | Vine Linux 1.1 | Linux & FreeBSD | CD-R(cdrecord/mkisofs) | CD-ROM game system | VMware/Bochs | PXE/diskless | gcc | booting PC UNIX | dialup PPxP | SunOS MO | SunOS 4.1.4 | CD bootable Linux | rescue HDD by CD-linux |

To 謎の処理系 SunOS 4.1.4 with Linux/FreeBSD[Home]
yamamori