root時のログイン時の日本語環境とタイムゾーンの変更

 10.3の時、shellを日本語表示する為に、以下の作業を行っていた。

FreeBSDで日本語を使う為に、端末をvtに変更する。/boot/loader.confを追加して、
kern.vty=vt
hw.vga.textmode=0
の2行を記述する。
日本語フォントを入手する。
# mkdir /usr/local/share/fonts/vt
# cd /usr/local/share/fonts/vt
# fetch http://people.freebsd.org/~emaste/newcons/b16.fnt
# fetch http://www.wheel.gr.jp/~dai/fonts/jiskan16u.fnt
# fetch http://www.wheel.gr.jp/~dai/fonts/jiskan16s.fnt
# fetch http://www.wheel.gr.jp/~dai/fonts/unifont-8.0.01.fnt
rootで、端末から、vidcontrol -f /usr/local/share/fonts/vt/b16.fnt、次に、setenv LANG ja_JP.UTF-8

 11.1はデフォルトで端末の設定はvtになっている。loader.conf は存在しない。

 テストとして、、

 su して root のまま、/home/muh に移動して、

# echo テスト >test.txt

としてみようとしたが、shellは日本語入力を受け付けない

# setenv LANG ja_JP.UTF-8

としてみた。

以下、RLonginのコンソールからコピー

root@FreeBSD-11:/home/muh # setenv LANG ja_JP.UTF-8
root@FreeBSD-11:/home/muh # echo テスト >test.txt
root@FreeBSD-11:/home/muh # cat test.txt
テスト 

 日本語入力を受け入れた。

  日本語に対応したRLoginからのテストなので、仮想マシン上の環境にフォントをインストールしなくとも問題はない。仮想マシンのコンソールでは豆腐になっているはず。(試してみたら豆腐ではなくクエスチョンマークで表示された。)CUIだし仮想マシンのコンソールも当面使う予定はないので、フォントのインストールは後回しにする。

 時刻表示をさせてみた。

root@FreeBSD-11:/home/muh # date
2018年 3月20日 火曜日 02時07分13秒 JST

  正常に表示された。時間がずれているのは、インストール時にデフォルトで設定したタイムゾーンJSTだったせい。普通考えればJSTで良いはずなのだが、以前の作業ではUTCに変更したら、正常表示になった。

 時間をホストであるWindowsから得ている為だろう。

 UTCJSTに変更するには、コマンド 'tzsetup' でインストール時と同様に対話的に作業できる。

root@FreeBSD-11:/usr/share/zoneinfo/Asia # date
2018年 3月19日 月曜日 17時41分55秒 UTC

 ホストであるWindowsと日時が一致した。

 他にも、手動で”/usr/share/zoneinfo 配下にtimezoneファイルがあるので、これを/etc/localtimeにコピーする”という方法があるらしいが、tzsetupの方が簡単で無難。

 

 日本語環境については、前回はユーザーごとにログインスクリプトで環境設定を行った。全ユーザーまとめて共通の環境設定を行う方法はないのか?

 UTC-8が標準になって、EUCの頃と較べて悩みが少なくなったような、逆にEUC時代の古い情報が混在して逆に混乱したり。いずれにせよ、日本語化はFreeBSDの標準情報から外れているので、一筋縄ではいかない。

 英語がネイティブに生まれていたら、今頃凄腕プログラマーになっていたという負け惜しみ。

FreeBSD 日本語表示に対応させる設定手順。必読です!

 では、etc/login.conf で環境設定している。こっちの方がスマート。、、、と思って試してみたが、結果として参考にはならなかった

 まずは、login.confのオリジナルのバックアップをとっておく。

root@FreeBSD-11:/ # cd /etc
root@FreeBSD-11:/etc # ls -l login.conf
-rw-r--r-- 1 root wheel 6790 7月 21 2017 login.conf
root@FreeBSD-11:/etc # cp login.conf login.conf.original
root@FreeBSD-11:/etc # ls -l login.conf*
-rw-r--r-- 1 root wheel 6790 7月 21 2017 login.conf
-rw-r--r-- 1 root wheel 16384 7月 21 2017 login.conf.db
-rw-r--r-- 1 root wheel 6790 3月 19 18:44 login.conf.original

login.conf を修正。chrsetとlangを追加する。但し、参考にした記事では、langへの設定を'en_US.UTF-8'に設定しているが、とりあえず日本語を表示させたいだけなので、'ja_JP.UTF-8'に設定してみた。

:charset=UTF-8:\
:lang=ja_JP.UTF-8:

rebootして結果を確認。

$ pwd
/usr/home/muh
$ ls
test.txt
$ cat test.txt
テスト
$ su root
Password:
root@FreeBSD-11:/usr/home/muh # cat test.txt
テスト

 一般ユーザーでもrootでも日本語の表示が可能である事を確認できた。但し、入力はできない。ja_JP.UTF-8 を en_US.UTF-8に変更しても結果は同じ。shellはshell。shellがloader.confから環境設定を引き継いでくれるかもしれないというのは甘かった。

 表示だけなら、デフォルトのままでloader.confの設定をしなくても可能だろう。

 追加した charset と lang をコメントアウト。リブートして試してみたら可能だった。つまりこの目的ではlogin.confへの設定追加は何の効果もない。また何かに使う事があるかもしれないので、とりあえずコメントアウトしたままにしておく。

 日本語入力ができない場合の対応として、telenetの引数として-8を使う事で、文字列の通信が可能になるとしているが、ここではそれに当たらないので、却って混乱するサジェスト。

 

 シェルが何であれ、一発の記述ですべてのユーザーの環境を日本語化するというのは難しくても、各ユーザーごとにそれぞれの設定ファイルを変更するのではなく、ひとつの設定ファイル、つまり/etc/login.confへの記述で設定しまいたい。

 こちらの記事が参考になるか、、

FreeBSDで日本語環境(UTF-8対応)を整える | レンタルサーバー・自宅サーバー設定・構築のヒント

 CUIで日本語化を問題にするのなら、その前にshellについて良く調べる必要がある。 

 しかし判らないのは、何故rootのshellがcshで、追加ユーザーのshellがshなのか?

 rootのshellを変更する気はないのだが、追加ユーザー用のshellは好みを追求した方が良いのかもしれない。何でもよければshで統一した方が良いし、Linuxと互換を求めるのならbashか。環境設定の構文だけなら、今のところcshの方が好み。

 

 煮詰まりそうだから今日はこれくらい。

  拙速を避けて、作業よりも確認を優先する。趣味としてのコンピュータの優先度は、意識的に低い位置に置く。趣味より実用を優先する。