localeがデフォルトに戻ってしまう

スポンサーリンク
PC関連
スポンサーリンク
スポンサーリンク

環境

サーバー:ヘッドレス ubuntu 22.04 LTS Server (22.04.2 LTS (Jammy Jellyfish))
クライアント:PuTTY-ranvis版

問題点

クライアントからサーバーへアクセスする時にサーバーのシステム文字コードを

localectl set-locale LANG=ja_JP.UTF-8

で変更したにも関わらず、再起動してみると/etc/default/localeは変更されているのにLANGが空になってしまう(つまり設定がされていないと同等)ことが発生していました。

色々と質問をさせて頂いたのですが、思ったような回答が無い状態が続き困っていました。

ヒント

  • ログインしてユーザーを変更するとちゃんと設定が反映されます。
  • 一度ディスプレイやキーボードを繋げて確認してみると、ちゃんと反映されています。
  • Puttyで環境変数を設定しようとしても撥ねられる設定でした。(ここは想定通り)
  • ユーザーを追加してみましたが、ログインしたユーザーはもれなく同じ状況になりました。

という事はPuttyでログインしたユーザーだけ現象が発生します。ここがヒントになりました。

調査

まずは環境変数が変わる理由を調査しました。

色々なファイルを確認したのですが、元々初期設定から弄ってないのでどのファイルを見ても問題ありませんでした。

ほかに変わる理由とすればSSHで接続した時だけという事になります。そして決まって日本語環境にした変数だけが変わっています。(もしかしたらほかにも変更されているのかもしれません)

そこでSSHの仕様を確認するとありました。AcceptEnvという項目が。

なんでもログインする環境の変数を自動的に設定してくれる項目だという事がわかりました。

仮説

という事は環境変数をセットすれば引っ張ってくれるのか?と考えましたが、手持ちに端末が無いので調査できません。そのためPuttyに環境変数をセットする機能があるので設定を試みました。

結果はそもそも読み取るように設定されていないので変更しようとしても撥ねられます。

ではもともと読み込むという機能を殺してしまえばいいのでは?と思いつきました。

結果

通常の設定に

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE

を付けて再起動すると大成功!機能は無事に停止しているようで、環境変数も日本語設定が反映されています。

最後に

今までなんで気づかなかったんだろうと思い返してみたのですが、いまいちわかりません。SSHのバージョンを見ていなかったのでもしかしたらその辺りの修正がされたのではともおもいます。

とりあえず自分の環境では

  • sshd_configを修正する。
  • とりあえず.bashrcなどにexport LANG=ja_JP.UTF8と追加する

のどちらかで対応できることがわかりました。

同じ悩みをお持ちの方はぜひ試してみて下さい。

コメント

タイトルとURLをコピーしました