7/10/2015

[note] Ubuntuのlogin時、$TERM変数未定義エラーが表示される現象への対処について

ちょっとした備忘メモ。Ubuntuのログイン時、デフォルトターミナルの変数$TERMがundefinedな旨のエラーを示すダイアログが表示される場合があったのですが、その簡単な調査と対処法を確認したので。

具体的には、ログインプロンプトからユーザ名とパスワードを入力した後、下記のメッセージが表示される現象についてです。

"setterm: $TERM is not defined in /HOME/[ユーザ名]/.profile"

と言っても、これは単なる警告に過ぎず、[OK]ボタンを押すとそのまま普通にログイン出来ます。鬱陶しいだけなので放置していたんですけど、気分はよろしくありません。

しかも$TERM変数が定義されない、という割に、ログイン後に確認してみれば$TERM=xterm等と定義はされているのです。要するに、ログイン処理中の変数定義・チェックの順序不整合が原因と考えられるわけで、確かにそれなら大した問題にはならないだろうと。

で、.profile読み込み段階で不整合が誤検出されているというのなら、そこに修正を加えてやればいいだろう、と思われたわけなんですが、TERMの定義を追記しても変わらずエラーダイアログが表示されます。どういう事なのかと、デフォルトの/etc/skel/.profileと比較してみたところ、自分で追加した変数の定義に加え、下記のターミナルオプション設定が差分にひっかかりました。

setterm -blank 0

これが最後尾に。これはターミナルの節電用画面ブラックアウト時間のオプションで、デフォルト端末の定義云々とは本来関係ない筈なんですが、これが裏でTERM変数とかそれに関係する諸々をチェックしてるのかなと。おそらく自前で追加した変数の設定等と区別出来なかったために仕様変更時に削除されず、そのために齟齬を来していたんだろう、とも。というわけで、 これを無効にしたらエラーダイアログは出なくなりました。

解決した事自体は喜ばしい事です。なんですがこれ、.profileに自前のユーザ変数定義を書き込んでいたのが問題だった、という結論になるわけです。しかし、それは自業自得かと言うと疑問無きにしもあらずです。というのも、.profileは.bashrcを読み込む仕様になっていて、ユーザが通常通りbashを使用し、.bashrcをいじるのならおそらく今回のような問題は発生しないように思われるところ、しかし少し前に起こったbashの致命的脆弱性の件以来、私はbashの使用は躊躇われるのでcsh系のtcshを使っているのです。なもんだから、変数を設定するには.bashrcは使えず、.profileが適切なんですよね。しかしそうするとアップデートから漏れると。Canonicalからすれば、デフォルト外のシェルまでサポート出来ないと言う事だろうし、対応しようとすればコストもかかる話だから、ある程度は切り捨てるのも仕方ない事なんでしょうけど、本来シェルはディストリビューションによらず、unix系システムを使うにあたって一番ユーザがこだわるところで、自由に選択し得えて当然の箇所な筈なわけで。どうにも不満の残る次第なのでした。 ともあれ、これでおしまい。やれやれです。

[過去記事 [IT] bashに最悪の脆弱性発覚]