日本語環境構築の Tips や FAQ だとか



まず最初にやるべき設定はなんですか?

若干の「問題点」はありますが、特にありません。

インストーラによってシステム標準のロケールが ja_JP.UTF-8 に設定されており、アプリケーション側が対応していれば、何もせずとも日本語で表示されます。

この設定は /etc/default/locale に

# File generated by update-locale

LANG="ja_JP.UTF-8"

として書かれています。 このファイルはログイン時に読み込まれ環境変数 LANGが ja_JP.UTF-8 に設定されます。

C と C.UTF-8 の違い

  • C は ASCII 文字しか使いませんし、扱えません。つまり日本語は表示も入力も一切不可。
  • C.UTF-8 は ASCII 文字しか使いませんが、ASCII 文字以外も扱えます。日本語を表示でき入力も可。

EUC-JP ロケールを追加したい場合

通常は必要ありませんが、一部のアプリ (例: TeX, Tgif) を使用したい場合、EUC-JP ロケールが必要になる場合があります。

EUC-JP ロケールを生成するには

# dpkg-reconfigure locales

ja_JP.EUC-JP を選択します。


X Window System

フォントの設定をカスタマイズする

最近の X 対応アプリケーションの大半は、 旧来の X11 のフォントシステムではなく fontconfig によるフォントシステムを使用しています。

具体的な設定は Software/fontconfig を参照。

Java アプリケーションで文字化けする

OpenJDK のフォント設定ファイルは /etc/java-*-openjdk/fontconfig.properties です。 デフォルトの設定では fonts-vlgothic、fonts-ipafont のいずれかがインストールされていれば、文字化けしないはずです。

他ベンダ提供の JDK バイナリは squeeze 以降の Debian ではもはやサポートされないため、Debian 標準の Java 環境に入れ替えてください (手順は Software/Java#environment を参照)。 現在システムで有効になっている実装を確認してください (手順は Software/Java#alternatives 参照)。

gv や ghostscript で日本語を処理できない

poppler-data、fonts-vlgothic、fonts-ipafont (その他の日本語フォント) を導入すれば日本語の処理回りについて問題ありません。なければ導入してください。

evince や xpdf などで日本語が表示されない

poppler-data パッケージをインストールしてください。

なお、dvi 文書については、 evince ではまだ表示できません (?) dvipsk-ja で pdf や ps に変換するか、xdvik-ja 等で代替してください。

openbox で文字化けする

一部のテーマが日本語に対応していないのが原因。 文字化けするテーマを

$ cp -r /usr/share/themes/hogehoge .themes/

して、~/.themes/hogehoge/openbox-3/themerc の中の

なんちゃら.font: (フォント名):pixelsize=(サイズ)

のような部分を片っ端から Sans とか日本語フォント名に置き替えればオッケー。

参考:

[debian-users:44180] OpenBoxのメニューの文字化け
http://lists.debian.or.jp/debian-users/200507/msg00238.html

fvwm で文字化けする

デフォルトでは xlib 経由で表示しようとするので、そっち系のフォントを揃えないと化けます。 てっとり早い解消方法は、フォント設定を xft (fontconfig) 経由にすることです。

~/.fvwm/config に

DefaultFont "xft:sans-serif:size=10"

コンソール

コンソールで文字化けする

基本的にコンソールでは日本語を表示できませんが、システム標準のロケールが ja_JP.UTF-8 に設定されているため、メッセージなどを日本語で出力しようとして化けます。

コンソールログインしたときに環境変数 LANG を未設定 (C) のままにするには、/etc/pam.d/login の

session       required   pam_env.so readenv=1 envfile=/etc/default/locale

という行をコメントアウトします。

もし X を使わないのであれば、システム標準のロケールを未設定 (C) にするのも手です。

# dpkg-reconfigure locales

コンソールで日本語の表示をするには

現在の Linux カーネルは、 VGA コンソールの規格上の制限を引きずっているため、 512 文字を越えるフォントをカーネルフォントに設定できません。

日本語フォントを表示させるためには、フレームバッファを準備しておき、それに fbterm (KMS, vesafb 環境で動作します。vga16fb では動作しません。) 等を被せる方法を取ることになります。

なお、fbterm の提供する擬似端末は securetty でないため、 デフォルトの設定ではフレームバッファターミナル上からユーザ権限による X の起動ができないなど、 いくつかのセキュリティ的制限があります。

1. フレームバッファを準備する

フレームバッファの準備は、使うドライバによって手順が異なります。

KMS (Kernel Modesetting) を有効にする
squeeze 以降では KMS が有効な場合は フレームバッファも有効にできる可能性があります。 KMS はカーネルコマンドラインに vga=xxx があるとエラーが出るので、有効化する前に必ず削除してください。 例: radeon ドライバの場合、radeondrmfb, i915 ドライバの場合、inteldrmfb が自動的に読み込まれます。
vesafb を使う
通常はこの方法が一番です。 Debian が配布しているカーネルでは、 vesafb が組み込まれていますので、 カーネルコマンドラインに vga=xxx を付けてやるだけです。
ブートローダが GRUB 2 なら、/etc/default/grub の

GRUB_CMDLINE_LINUX_DEFAULT="xxxxxxxx"

に、

GRUB_CMDLINE_LINUX_DEFAULT="xxxxxxxx vga=791"

と追記してください。 vga= に指定する値は vesafb.txt (日本語訳: 更新されていないので注意) を参照してください。動かない場合は表のより上の値、それでも動かない値は表のより左の値を使うようにするといいでしょう。
その他のフレームバッファドライバを使う
intelfb, radeonfb など各デバイス向けのドライバも、モジュールとして付いてきますが、 結局カーネル組み込みにして再構築しないとうまく動かない場合があります。

2. 再起動、ユーザグループの確認、フレームバッファデバイスファイルの確認

1. が完了したら、再起動して設定を有効にしたカーネルで起動します。

再起動後ログインし、ログインしたユーザが video グループのメンバか確認します。

$ id (ユーザー名)

uid=xxxxx(ユーザー名) gid=yyyyy(ユーザーグループ) 所属グループ=yyyyy(ユーザーグループ),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),107(nvram)

入っていなければユーザを video グループに入れてください。

# adduser (ユーザー名) video

udev が正常に機能しているとフレームバッファデバイスファイルは以下のような感じで自動的に生成されています。

crw-rw---- 1 root video 29, 0 2010-12-27 15:44 /dev/fb0

フレームバッファが用意できたら、 以下のコマンドを叩いてください。何も表示されない場合は 残念ながらフレームバッファが準備できていません。

$ cat /proc/fb
0 radeondrmfb

3. フレームバッファ対応ターミナルの起動

fbterm を起動します。UTF-8 環境の場合、特にオプションは必要ありません。 fbterm は fontconfig で管理しているフォントならば全て使えます。

$ fbterm

日本語入力

一般に、日本語の入力をするためには、

  • キーの入力、候補リストの表示などユーザとの対話を司る「入力メソッド」、
  • 実際に文節区切りやかな漢字変換を行う「変換エンジン」

が必要ですが、インストール時に日本語と「デスクトップ環境」を選択していれば標準的な設定が済んでいると思います。

キー配列を変更したいんだけど

pc101 から jp106、qwerty から dvorak のようなおおまかな変更をする場合は

# dpkg-reconfigure keyboard-configuration

設定は /etc/default/keyboard に保存されます。

/etc/default/keyboard の XKBOPTIONS の値には xorg.conf の指定 (/usr/share/X11/xkb/rules/base.lst) がそのまま使えます。 例えば CapsLock を Ctrl にするなら

XKBOPTIONS="ctrl:nocaps"

という風に。 その場で設定を反映するには

# service keyboard-setup restart

X Window System のキー配列は xmodmap コマンドで変更できます。 例えば CapsLock を Ctrl にするなら

$ xmodmap -e "clear lock" -e "keycode 66 = Control_L" -e "add control = Control_L"

もしくは setxkbmap コマンドで

$ setxkbmap -option ctrl:nocaps

キーコードは

$ xev

してから調べたいキーを押せば表示されます。

コンソールのキー配列は /etc/console-setup/remap.inc で変更できます。 これには kbd が別途必要です。 例えば CapsLock を Ctrl にするなら

keycode 58 = Control

のような感じで。 キーコードは

$ showkey -k

してから調べたいキーを押せば表示されます。 その場で設定を反映するには

# setupcon --force --save

なお VirtualBox 上で、上記のように CapsLock を他のキーに変更しようとすると、入力がおかしくなりますが、これに対応するとコードが複雑化するのでイヤザンスとのことで、直る見込みはありません。どうしても変更したい場合は、ホスト側のキーを入れ換える等で頑張ってください。

入力メソッドの設定

etch 以降、標準の入力メソッドは uim です。

インストールされていなければ

# aptitude install uim

でインストールできます。

詳しくは Software/uim 参照。

標準以外の入力メソッドは、

などがあります。

X Window System

im-config という入力メソッドのためのフレームワークが 各環境変数等の面倒を見てくれるので、単に X を再起動すれば入力メソッドが自動的に起動するはずです。 ユーザ側で何か設定する必要はありません。

設定を変更するには

$ im-config

もし "E: zenity がインストールされなければいけません。" と表示されても dialog が入っているなら

$ DISPLAY= im-config

とすれば起動できます。

コンソール

uim-fep を使えばコンソールで日本語入力ができます。

fbterm 等により日本語表示ができる状態にしてから uim-fep を起動。

$ uim-fep

コンソールでは、全角半角キーや Shift + Space キーなど、いくつかのキーシンボルを扱えないため、 キーバインドをデフォルトのままにしていると問題があります。 例えば、 ON/OFF の切り替えは、 Ctrl + \ など代替手段を用意する必要があります。 これには、 uim-pref で別のキーを割り当てるか、 ~/.uim に

(define-key generic-on-key? '("zenkaku-hankaku" "<Shift> " "<IgnoreShift><Control>\\"))
(define-key generic-off-key? '("zenkaku-hankaku" "<Shift> " "<IgnoreShift><Control>\\"))

などと記述すればいいでしょう。その他、 /usr/share/doc/uim-fep/README.ja.gz を参照のこと。

screen などを使う人は、以下の設定を $HOME/.screenrc に導入すると、

  • <escape key> + m で uim-fep を起動、
  • <escape key> + k で uim-fep を終了

できます。

# Setup uim-fep like screen-uim
bind m exec | uim-fep -S
bind k eval 'exec cat' kill redisplay

詳しくは UimFep 参照。 もし uim ではなく fcitx を使っているなら、fcitx-frontend-fbterm で。

$ fbterm -i fcitx-fbterm

テキストなどに入力したいだけなら日本語入力システムを内蔵したエディタを使うのも手です。

など。

Emacs

Emacs には kkc.el という仮名漢字変換エンジンが付属しているので、Ctrl+\ を押せばとりあえず日本語入力できます。

uim で Emacs に入力する方法は

  • Emacs 用フロントエンドである uim.el を用いる
  • X11 上であれば XIM である uim-xim を用いる
  • 端末上 (-nw) であれば FEP である uim-fep を用いる

があります。 おすすめは Emacs 用フロントエンドを用いる方法です。

# aptitude install uim-el

インストールすると Emacs 起動時に uim-leim がロードされるようになるので、~/.emacs に

(setq default-input-method "japanese-anthy-uim")

などとするだけで使えるようになります。

詳しくは UimEl 参照。

なお、 Emacs のバージョンにより、XIM 側が優先されてしまう場合は、~/.Xresources に

Emacs.UseXIM: false

と記述して、 X サーバを再起動(または X リソースを更新)してください。

Emacs で利用できる日本語入力は色々あります

mlterm

mlterm 上で日本語入力する方法は IM プラグイン、XIM、uim-fep の 3 種類の方法がありますが、IM プラグインがおすすめです。

# aptitude install mlterm-im-uim

そして、 ~/.mlterm/main

input_method = uim

uim における変換エンジンの設定

etch 以降、標準の変換エンジンは Anthy です。 インストールされていなければ

# aptitude install uim-anthy

でインストールできます。

詳しくは Software/uim#uim-anthy 参照。

言語バー (IME ツールバー) ぷりーず

Software/uim#uim-toolbar 参照。

ATOK for Linux を使う

ATOK X3

deb パッケージが同梱されており、 FAQ のようにインストールすれば特に問題なく使える模様。

参考 (squeeze の場合には以下の全てが必要)

ただし lenny 以降だと、上記のやり方だけでは GTK の iiim モジュールの設定がされていないままのため、
/usr/lib/gtk-2.0/2.10.0/immodule-files.d/iiim-gtk2.0.immodules とでもいうファイルを作成し、

"/usr/lib/gtk-2.0/immodules/im-iiim.so"
"iiim" "Internet/Intranet Input Method" "iiimgcf" "/usr/share/locale" "ja"

のように書いておく。

etch 以前を使っていた時に user-ja-conf 等により ~/.Xresources に

*inputMethod: XIM

の行が書かれたままの状態が残っている場合には、この行をコメントアウトしないとパレットが表示されなくなる。

im-switch ではなく im-config パッケージを利用している場合には、 /opt/atokx3/bin/atokx3start.sh の内容を ~/.xinputrc に記述すると使えるようになる。

wnn7 や vje-delta がインストールできない

XFree86-4.3.0 以降では xlib6g をサポートしなくなった事が原因らしい。

回避案1
依存関係を無視してインストール
# dpkg -i --ignore-depends=xlib6g wnn7-server_1.01-1_i386.deb
回避案2
debian/control を書き直す
# dpkg-deb -x wnn7-server*.deb wnn7-server
# dpkg-deb -e wnn7-server*.deb wnn7-server/DEBIAN
wnn7-server_1.01-2_i386/DEBIAN/control の depend の行にある xlib6g のところを xlibs, libxaw6 に書き換えて
# dpkg-deb -b wnn7-server wnn7-server_1.01-2_i386.deb
# dpkg -i wnn7-server_1.01-2_i386.deb
回避案3
関係パッケージを hold しておく。

参考:

[debian-users:39770] Wnn7 の debianパッケージ onsid
http://lists.debian.or.jp/debian-users/200403/msg00045.html

パッケージ libglib1.2 が libglib1.2ldbl に変更されたため、wnn7-server, wnn7-xclients の依存関係に問題が出る。

上記回避案2 と同様に debian/control を修正する。 debian/control の depend の行にあるlibglib1.2 を libglib1.2ldbl と書き換えればよい。

コンソールのキーマップが変更できない

/etc/vconsole.conf というファイルが存在しないかチェック。あれば削除。

なんで uim が日本語標準のインプットメソッドなの?

etch からは標準のインプットメソッドは uim だが、

  • 採用された当時は日本語が使えるまともなインプットメソッドは uim (と kinput) ぐらいしかなかった。
  • (敢えて乱暴な言い方をすると) 他の IM も含めてどれも一長一短で、わざわざ変更する理由がない。
  • X を使用せずコンソールで動作する uim-fep があることから、何らかの理由で X, emacs (uim-el) が使えない、 コンソールベースの環境を救済するには選択肢がこれしかない。

などの理由から etch 以降も変更されていない。


日本語ファイル/ディレクトリ

ファイルシステム

vfat など特殊なものを除き、ファイルシステム上でのファイル名の文字コード変換は必要ありません。
ちなみに Linux のファイルシステム (正確には VFS) 上でのファイル名は内部ですべて Unicode (UCS4) で取り扱っています。
必要に応じて fs/nls/ 以下の変換モジュールを利用しています。

NTFS

NTFS では、ディスクには UTF-16 で記録されていますが、OS が文字コード変換を行うので特に意識する必要はありません。

ntfs-3g を使って以下のようにすればいいでしょう。

# ntfs-3g (NTFSデバイス) (マウントポイント) -o locale=ja_JP.UTF-8

常時マウントするには、/etc/fstab に以下のように書いておきます。

(NTFSデバイス) (マウントポイント) ntfs-3g locale=ja_JP.UTF-8  0 0

FAT

FAT では、 Windows 用の長いファイル名は UTF-16 、 MS-DOS 用の短いファイル名は日本語圏では Shift_JIS (cp932) で それぞれディスクに記録されており、 OS が文字コード変換を行います。 これを UTF-8 環境から扱うためには、マウントオプションに iocharset=utf8,codepage=932 を指定します。

# mount -t vfat -o codepage=932,iocharset=utf8 /dev/sdb /mnt

zip を展開したら文字化け

unzip コマンドは、ファイル名の文字コードを UTF-8 として扱うため、 Shift_JIS (cp932) で記録されていると文字化けします。

Ubuntu では、 -O / -I オプションでファイル名の文字コードを指定できるようにする パッチが当たっています (LP#10979)。

Debian でもこのパッチを適用してビルドしなおせば動きます。

Ubuntu Japanese Team でも、これとはまた別のパッチを適用した unzip を PPA で配布しているようです。

EUC-JP 環境のディスクを使う

以前の EUC-JP 環境を使っていたディスクを使うには、記録されるファイル名自体を UTF-8 のものにリネームします。

このリネーム処理は、 convmv パッケージが便利です。

カレントディレクトリ以下のファイル名を EUC-JP や Shift_JIS (CP932) から UTF-8 に変更するには、

$ convmv -f euc-jp -t utf8 * --notest
$ convmv -f sjis -t utf8 * --notest

または

$ convmv -f euc-jp -t utf8 -r . --notest
$ convmv -f sjis -t utf8 -r . --notest

とします。

また、パッケージ化はされていませんが、似たようなツールに FCC というのがあります。

コンソールで文字化けしたディレクトリの中に入れない

bash の menu-complete 機能を使う

$ bind TAB:menu-complete
$ cd [TAB]

ls の行番号を使う

$ ls | cat -n
$ cd "`ls | head -n 番号 | tail -n 1`"

その他

バックスラッシュが円記号になる

IPA フォントを窓から投げ捨ててください。

全角が半角の 2 倍の幅にならないことがある

フォントサイズが (ピクセル単位で) 奇数の場合そうなります。

一部のアプリで ASCII 文字が全角幅の文字と同じ幅で表示される

恐らくそのアプリは、dual-width (2 種類の幅を持つフォント) の処理周りがバグってます。

$ fc-list :spacing=dual

で表示されるフォントが dual-width です。

回避するには ~/.conf/fontconfig/fonts.conf や /etc/fonts/local.conf に

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

  <match target="font">
    <test name="spacing">
      <const>dual</const>
    </test>
    <edit name="spacing">
      <const>proportional</const>
    </edit>
    <edit name="globaladvance">
      <bool>false</bool>
    </edit>
  </match>

</fontconfig>

一部の文字の幅がおかしい

基本的に (e)glibc がすべての文字幅を半角に決めうちしているので、(e)glibc に丸投げしているアプリでこの問題が起きます。 また、表示に使用するフォントにも依存しているので、Ambiguous 文字が全角になっていないフォント (fonts-mplus など) では正常な表示は期待できません。

(e)glibc 側での対処方法

  1. UTF-8-EAW-FULLWIDTH.gz をダウンロードして /usr/share/i18n/charmaps に置く
  2. root で echo "ja_JP.UTF-8 UTF-8-EAW-FULLWIDTH" >> /usr/local/share/i18n/SUPPORTED
  3. dpkg-reconfigure locales を実行し、「ja_JP.UTF-8 UTF-8-EAW-FULLWIDTH」 を有効に

wcwidth-cjkを使うことでも同等の効果が得られます。

独自対応しているアプリとその設定方法

  • vim
    • /.vimrc に set ambiwidth=double を追加

  • emacs
    • 23 以降はロケールを見て自動設定されますが、set-language-environment を Japanese/English 等することで制御可能
  • xterm
    • 起動オプションに -cjk_width をつける
    • ~/.Xresources に XTerm*cjkWidth: true

  • mlterm
    • 起動オプションに -a 2 をつける
    • ~/.mlterm/main に col_size_of_width_a = 2 を追加

  • vte (gnome-terminal、xfce4-terminal...)
    • 環境変数に VTE_CJK_WIDTH=1 を指定
  • w3m
  • screen
    • ロケールを見て自動設定されますが、~/.screenrc に cjkwidth on/off を追加することで制御可能
  • fbterm
    • 起動オプションに -a をつける

dialog などで罫線がおかしくなる場合、環境変数に NCURSES_NO_UTF8_ACS=0 というおまじないを指定してみる。

ja_JP.eucJP や ja_JP.uft8 みたいな表記はなに?

ja_JP.eucJP は ja_JP.EUC-JP の昔の表記です。更に前には ja_JP.ujis と表記していました。

Linux における日本語ロケールに関する指針
http://archive.linux.or.jp/JF/JFdocs/Japanese-Locale-Policy/

ja_JP.utf8 は locale の内部表現です。locale -a すると見られます。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-11-09 (水) 21:02:46 (1725d)