QNAP TS-112 や Buffalo LS210D のファームウェアをアップデートしたら
~/.inputrc が効かなくなってしまった
暫く前にウチのNAS、QNAP TS-112 や Buffalo LS210D を最新ファームウェアにアップデートしたのですが、最近になってsshログインしてから日本語を入力しようとしても入らなくなっている事に気が付きました。
bashで日本語が入らない場合、定番の対処方法はホームディレクトリ配下に ".inputrc" ファイルを作成し、以下のように記述することです。
set convert-meta off
set meta-flag on
set output-meta on
set kanji-code utf8
|
しかし、今回の最新ファームウェアではこの対処方法では解決せず、"~/.inputrc" が全く効かなくなっているように思えました。調べてみたところ、原因は以下の2点のようです。
- bashの設定ファイル "/etc/profile" 内に "export INPUTRC=/etc/inputrc" と記述されている(INPUTRC環境変数が定義されるようになった)。ホームディレクトリ配下の ".bashrc" も同様。
- "/etc/inputrc" ファイルが存在している。
INPUTRC環境変数や "/etc/inputrc", "~/.inputrc" はbashが使用しているGNU readline ライブラリの設定ファイルに関するものだそうです。readlineライブラリの仕様は、
- INPUTRC環境変数が定義されていれば、そのファイルを読み込む。
- INPUTRC環境変数が定義されていなければ、"~/.inputrc" を読み込む。
- "~/.inputrc"が無い、または読み込めなかった場合は "/etc/inputrc" を読み込む。
とのこと。そのため、"~/.inputrc" が読み込まれず、INPUTRC環境変数の "/etc/inputrc" ファイルが読み込まれるようになったようです。"/etc/inputrc" ファイルには、
# /etc/inputrc - global inputrc for libreadline
# See readline(3readline) and `info readline' for more information.
# Be 8 bit clean.
set input-meta on
set output-meta on
set bell-style visible
# To allow the use of 8bit-characters like the german umlauts, comment out
# the line below. However this makes the meta key not work as a meta key,
# which is annoying to those which don't need to type in 8-bit characters.
# set convert-meta off
〜以下略〜
|
と書かれており、このうち "set convert-meta off" がコメントアウトされていることが問題でしょう。そのため、この行をコメントインするのが一番簡単な対処方だと思いますが、今後の事を考えると "~/.inputrc" も読み込まれるようにした方が何かと良さそうです。そこで "/etc/profile" の最後の方に以下のように書き加えてみました。
# ~/.bashrc: executed by bash(1) for non-login interactive shells.
〜略〜
# If running interactively, then:
if [ "$PS1" ]; then
〜略〜
export INPUTRC=/etc/inputrc
〜略〜
if [ -f ~/.inputrc ]; then
bind -f ~/.inputrc
fi
fi;
|
"~/.bashrc" も同様に修正します。これは、もし "~/.inputrc" ファイルがあればキーバインド設定に追加するという意味。bindはsocket通信やDNSの bind ではなく、bashのビルトインコマンドでキーバインドを設定するコマンドだそうです(ヤヤコシイ)。
これで、"/etc/inputrc"の設定に加え、"~/.inputrc" の設定も効くようになりました。それにしても、なぜこんな非互換が作り込まれたのでしょう?何かのセキュリティ対策なのかな?
|