玩式草子─ソフトウェアとたわむれる日々

第98回 Plamo-7.0とUTF-8

この記事を読むのに必要な時間:およそ 4 分

前回はPlamo-7.0の特徴を簡単に紹介しました。今回からは,それらの特徴についてより詳しく掘り下げながら,Plamo Linuxの仕組みや内部構造について解説していこうと思います。まず最初に取りあげるのは,ユーザへの影響が大きい文字コードに関する話題です。

デフォルトの文字コードの設定

前回も触れたように,Plamo-7.0ではデフォルトの文字コードをEUC-JPからUTF-8に変更しています。この設定はログイン時に実行される~/.bashrcから,ja_JP.UTF-8を引数にして~/.set_lang_bshを実行することで行っています。

$ cat -n ~/.bashrc | grep -n2 lang
22-    22     IGNOREEOF=3
23-    23     
24:    24     source $HOME/.set_lang_bsh ja_JP.UTF-8
25-    25     
26-    26     # less で行番号をつけ,終了後に画面を残す

ここで使っている~/.set_lang_bshは,Bsh系が使うLANG環境変数をexportするためのコードです。

$ cat -n ~/.set_lang_bsh 
     1        case "$1" in
     2        *[uU][tT][fF]*)
     3          LANG=ja_JP.UTF-8 ;;
     4        *)
     5          LANG=ja_JP.eucJP ;;
     6        esac
     7        
     ...
    16        export LANG

このコードを独立したファイルにしているのは,必要に応じてこのファイルをsourceすることで,動的に文字コードを切り替えれるようにするためです。

tcshを使う場合,これらのファイルはそれぞれ ~/.tcshrc と ~/.set_lang_csh になります。

たとえば,EUC-JPな日本語ファイル名を見る場合,デフォルトのUTF-8な設定では正しく表示できませんが,端末ソフトの文字コードをEUC-JPにして

$ source ~/.set_lang_bsh euc

を実行すれば,その端末ソフト内はEUC-JPな環境になって,ファイル名を正しく表示できるようになります(図1で使っているmate-terminalの場合は,⁠端末(T)」⁠⁠文字コードの設定(C)」⁠⁠日本語(EUC-JP)」⁠

図1 利用する文字コードを動的に切り替え

図1 利用する文字コードを動的に切り替え

この~/.bashrcは新規ユーザを登録するadduserコマンドが作成します。adduserを起動すると,登録したいユーザのログイン名やユーザID,グループ名に加え,日本語localeの設定やウィンドウマネージャ,日本語入力等の設定を尋ねられます。ログイン名以外の設定はあらかじめデフォルト値が用意されているので,そのままでいい場合はEnterを入力するだけで進みます。

root@plamo7:~# adduser
Can you read Japanese chars on this term? [Y/n]
y
Japanese mode

新しいユーザのログイン名を指定してください(8 文字以内)。 []: mkojima
mkojima のユーザ ID は? [自動登録の場合は 1000 番台になります]: 
mkojima が属するグループは? [users]: 
mkojima は他のグループにも属しますか?
  (デフォルト設定に追加する場合 --> add:,,...
   他のどのグループにも属さない場合 --> none)
  [audio,dialout,video,cdrom,kvm,pulse,pulse-access,mlocate,libvirt]: 
mkojima のホームディレクトリは? [/home/mkojima]: 
mkojima が使うシェルは? [/bin/bash]: 

日本語 locale の設定
1 : ja_JP.UTF-8(今風)
2 : ja_JP.eucJP(obsolete)
mkojima はどちらの locale を使いますか? [1]: 

ウィンドウマネージャ設定
1 : Twm(X付属のごくシンプルなWM)
2 : LXDE Desktop(Gtkベースの軽めの環境)
3 : MATE Desktop(GNOME2 の進化版)
mkojima が使う WM は? [3]: 

IM の選択
1 : uim
2 : fcitx
mkojima が使う IM は? [1]: 

もちろんデフォルト値以外も指定できるので,ロケールにja_JP.eucJPを使い続けることも可能なものの,デフォルト値以外の設定はテストが十分ではないため,何らかの不具合が生じるかも知れません。そのような場合はPlamo Linuxのメーリングリストなどにご報告いただければ,可能な限り対応するつもりです。

UTF-8とコンソール

Plamo Linuxの特徴の一つは「日本語をコンソールに直接表示できる」ことです。

X Window System上ではfreetypeやcairo,pango/harfbuzzといったフォント描画やテキスト処理用の各種ライブラリが揃っているのに対し,Xを使わないコンソール環境では日本語を扱えるターミナルエミュレータを使うか,カーネルにパッチをあてて日本語を表示可能にするかぐらいの選択肢しかありません。

初期のPlamo Linuxでは,JEの生みの親でもある真鍋敬士さん作のKON(Kanji ON linux)と呼ばれるターミナルエミュレータを使ってコンソール上で日本語を表示していました。

今から考えると笑い話ですが,インストーラをFD1枚に収まるサイズにするため,日本語のフォントファイルからインストール時のメッセージに出てくる文字のフォントのみを抽出する,みたいなこともしていました。

その後,linux-2.xの時代になると,konの開発終了と入れ替わるように,uniconと呼ばれるカーネルパッチが現われました。uniconは,linuxカーネルのコンソールドライバを改造して,漢字のようなマルチバイト文字を表示可能にするパッチで,この修正を加えたカーネルはターミナルエミュレータ無しでコンソールに日本語を表示できます。

uniconパッチは,元々はTurbo Linuxの北京オフィスで開発されましたが,メンテされずに放置されていたのをdaiさんが引き継いでVD UNICONという名称で公開していました。

unicon機能を使えばカーネルのみで日本語が表示できるようになるものの,そのためにはカーネルに日本語フォントを組み込まなければなりません。そのような特定の言語のみに対応した実装はカーネル開発者たちの好むところではないため,このパッチが本家のソースコードに取り込まれることはないでしょう。

そう考えて,⁠メンテナンスが大変だから」ということでカーネルに対するローカルパッチは避けてきたPlamo Linuxなものの,uniconパッチは全面的に採用し,その後,daiさんがlinux-2.6.31対応で開発を終了した後も使い続けて,Plamo-6.xまでuniconでコンソールに日本語を表示していました。

ところが,このuniconはUTF-8には対応していないため,デフォルトの文字コードをUTF-8にしようと考えていたPlamo-7では利用できません。そこで代替案をあれこれ探し,一時期はkmsconと呼ばれるKMS機能を使ったターミナルエミュレータも検討したものの,最終的にはgentoo-zh方面で開発されたlinux-cjkttyと呼ばれるカーネルパッチを採用し,unicon同様,カーネル自身にUTF-8な日本語を表示させることにしました。

図2はPlamo-7.0のインストーラ画面で,Plamo-6.xまでと同じに見えるものの,uniconではなくlinux-cjkttyを使って,メッセージの文字コードもUTF-8になっています。

図2 Plamo-7.0のインストーラ画面

図2 Plamo-7.0のインストーラ画面

なお,linux-cjkttyはUTF-8決め打ちなので,EUC-JPな文字コードは正しく表示できません。前節で紹介したように,X上ならば端末ソフトの文字コードを変更することで以前のja_JP.eucJPな環境も利用できるものの,コンソール上での日本語表示はja_JP.UTF-8に限られるのでご注意ください。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入