落穂拾い

Gleanings in my life

【Gentoo】locale を UTF-8 に変更してみた

2009年08月09日 01時33分36秒 | Linux
これまで Gentoo 環境では euc-jp を使ってきた。
しかし世の中は UTF-8 の方向へと徐々に移行している。

たとえば、私が愛用しているオーディオプレーヤーexaileは、version 0.2 までは euc-jp でも utf-8 でも適切に動作したのだが、0.3 からは utf-8 でなければメニューが文字化けしてしまう。そろそろ utf-8 に移行するのも仕方がない頃合いかもしれない。

というわけで、下記の手順で移行してみた。


  1. locale -a を実行。結果に ja_JP.utf8 が含まれていることを確認する。これが無い場合は locale の追加からする必要あり。
  2. system のデフォルト locale を変更する。/etc/env.d/02locale ファイルを編集し、
    LC_ALL="ja_JP.utf8"
    

    という内容に書き換える。これで設定自体は終了だ。この設定を反映させるには、
    env-update 
    source /etc/profile
    

    を実行すればよい。
  3. 各ユーザーのlocaleを変更する。私の場合、~/.bashrc にlocale設定を書いてあるので、この中身を下記のようにする。
    export LANG="ja_JP.utf8"
    export LC_ALL="ja_JP.utf8"
    export G_FILENAME_ENCODING=UTF-8
    

    さらにに、私の場合には ~/.xsession でも locale を設定していたので、それも上記と同じ内容にしておく。
  4. ファイル名を utf-8 に変更する。これまではファイル名に日本語を使う場合には euc-jp を使っていた。それを全て utf-8 に変更する。コマンドとしては convmv を使う。
    cd ;                              # home directory に移動
    convmv -f euc-jp -t utf-8 -r .  ; # recursive にファイル名探査
    

    ここでは convmv は実際には実行されず、実際に実行した場合の処理内容をリストアップしてくれる。その内容をよくよく確認し、問題がなさげなら、--notest オプションを付けて実行する。
          
    convmv -f euc-jp -t utf-8 -r --notest . 
    

    以上で、各ユーザーのhomeディレクトリ内の全ファイル名が適切に漢字コード変換できているはずだ。もしもホームディレクトリ以外の場所にもユーザーファイルがあり、日本語ファイル名を使っているような場合には、適宜それぞれのディレクトリで上記の内容を実行する必要がある。
  5. utf-8にして困るのは、Gentoo の場合は日本語manである。日本語 man ファイルが euc-jp であるからだ。というわけで、man コマンドを実行するときだけ、euc-jp で実行するように設定する。これには /etc/man.conf の中の JNROFF に LC_ALL=ja_JP.eucJP を付記すればよい。具体的には下記のような行となる。
    JNROFF          LC_ALL=ja_JP.eucJP /usr/bin/groff -Tnippon -mandocj
    

    これで euc-jp で正常に man ファイルが処理できる。しかし、出力結果が euc-jp のままなので、utf-8 な環境では読むことができない。そこで読むときに適宜漢字コード変換がかかるようにページャーの設定を変更する。これには MANPAGER 環境変数に lv か w3m のような高機能なものを設定しておけばよい(lessはよくない)。私の場合、~/.bashrc に下記を付記した。
    export MANPAGER="/usr/bin/lv -c"
    

    これで man コマンドで普通に日本語マニュアルが閲覧できるようになる。
  6. emacs の設定。現時点では下記の設定を ~/.emacs.el に書いておいた。
    (setq-default enable-multibyte-characters t) 
    (set-terminal-coding-system 'utf-8-unix)
    (setq default-process-coding-system '(utf-8-unix . utf-8-unix))
    (set-keyboard-coding-system 'utf-8-unix)
    (setq default-buffer-file-coding-system 'euc-japan)
    

    ここでのポイントは、ファイル内の漢字コーディングは euc-jp を使うということだ。そう、ファイル名や表示は utf-8 に変更したのだが、ファイル内は euc-jp を使うという方針にしたのだ。これは Gentoo における LaTeX が euc-jp であることに理由がある。


以上で、とりあえず utf-8 環境に移行できた。
上記の最後にも書いたように、ファイル内では相変わらず euc-jp を使っているのが特徴だ。将来的に、これも utf-8 に変更する日がくるのであろうとは思うが、まだその時ではないと考えている。

なお、上記設定でも Emacs 内では M-x man ではマニュアルが文字化けしてしまう。これは M-x man では外部コマンドの man を呼び出してその結果を Emacs のバッファ内に表示するという形式であるためだ。というわけで、Emacs 内で man を参照する場合には M-x woman を使う必要がある。woman は WithOut man の意であり、Emacs 内で完結するため今回のような複雑な場合でも問題なく表示できる。

が、woman では直に section 番号を指定する方法が分からないので、man の参照がちょっと面倒臭い感じがする。これも今後の課題であろうか。

コメントを投稿