Linuxで「perl: warning: Setting locale failed.」というエラーメッセージが表示されたので原因や解決法などについての覚え書き。
環境
ローカルホストからSSHでリモートホストにログインしている環境。
ローカル: Desktop (Ubuntu 16.04)
リモート: Raspberry Pi3 Model B (Raspbian)
エラーメッセージ
リモートホストで perl を実行すると Perl が下記のようなエラーメッセージを吐いた。
ロケール設定を確認しなおすように警告されている。
$ perl -v perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_MEASUREMENT = "ja_JP.UTF-8", LC_PAPER = "ja_JP.UTF-8", LC_MONETARY = "ja_JP.UTF-8", LC_NAME = "ja_JP.UTF-8", LC_ADDRESS = "ja_JP.UTF-8", LC_NUMERIC = "ja_JP.UTF-8", LC_TELEPHONE = "ja_JP.UTF-8", LC_IDENTIFICATION = "ja_JP.UTF-8", LC_TIME = "ja_JP.UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
SSH ではなく VNC を使ったリモートデスクトップにて perl -v を実行するとエラーは発生しなかった。
解決
方法A: locale-gen
リモートホストで /etc/locale.gen を開いて確認する。
en_US.UTF-8 UTF-8 以外の値がコメントアウトされていたので ja_JP.UTF-8 UTF-8 のコメントを解除して locale-gen を実行すると Perl のエラーが解決した。
$ sudo vim /etc/locale.gen en_US.UTF-8 UTF-8 ja_JP.UTF-8 UTF-8 $ sudo locale-gen Generating locales (this might take a while)... en_US.UTF-8... done ja_JP.UTF-8... done Generation complete.
方法B: ssh_config
locale.gen を編集して locale-gen をする方法で解決したがこちらの方法でもエラーは消えた。
ローカルホストの ssh_config を開き SendEnv LANG LC_* をコメントアウトして保存する。
再度 SSH でリモートホストにログインして perl -v を実行するとエラーは解決した。
$ sudo vim /etc/ssh/ssh_config # SendEnv LANG LC_*
この記事を読んだ人はこんな記事も読んでいます。
【Linux】perl: Setting locale failed の解決