locales – matoken's meme https://matoken.org/blog Sun, 28 Jul 2024 23:17:30 +0000 ja hourly 1 https://wordpress.org/?v=6.7.2 locale が間違っていて MComix が起動しなかった https://matoken.org/blog/2024/07/29/mcomix-did-not-start-because-locale-was-wrong/ https://matoken.org/blog/2024/07/29/mcomix-did-not-start-because-locale-was-wrong/#respond Sun, 28 Jul 2024 22:06:33 +0000 https://matoken.org/blog/?p=4051

最近新しく端末を購入し,例によって Debian sid を入れてセットアップ中です.
しかし, MComix が起動しません.

端末で試すとこのようなエラー.

$ mcomix
Traceback (most recent call last):
    File "/usr/bin/mcomix", line 8, in <module>
        sys.exit(main())
                 ^^^^^^
      File "/usr/lib/python3/dist-packages/mcomix/__main__.py", line 26, in main
        run()
      File "/usr/lib/python3/dist-packages/mcomix/run.py", line 154, in run
        i18n.install_gettext()
      File "/usr/lib/python3/dist-packages/mcomix/i18n.py", line 82, in install_gettext
        lang = portability.get_default_locale()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3/dist-packages/mcomix/portability.py", line 49, in get_default_locale
        lang, _ = locale.getdefaultlocale(("LANGUAGE", "LC_ALL", "LC_MESSAGES", "LANG"))
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/locale.py", line 549, in getdefaultlocale
        return _getdefaultlocale(envvars)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/locale.py", line 579, in _getdefaultlocale
        return _parse_localename(localename)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/locale.py", line 496, in _parse_localename
        raise ValueError('unknown locale: %s' % localename)
    ValueError: unknown locale: ja_JP-UTF-8
$ env | grep ja_JP-UTF-8
LANGUAGE=ja_JP-UTF-8

locale が ja_JP-UTF-8ja_JP.UTF-8 の Typo らしきものになっており知らない locale だということで起動に失敗しているようです.
$ LANGUAGE=ja_JP.UTF-8 mcomix とすると起動します.

ja_JP-UTF-8 をどこかで間違って設定してしまったのだろうと探すと /etc/locale.conf に見つけました.
これを ja_JP.UTF-8 に修正,再起動することで修正されました.

$ sudo localectl set-locale ja_JP.UTF-8
$ sudo git -C /etc diff locale.conf
diff --git a/locale.conf b/locale.conf
index ee5c432..6345544 100644
--- a/locale.conf
+++ b/locale.conf
@@ -1,2 +1,2 @@
 LANG=ja_JP.UTF-8
-LANGUAGE=ja_JP-UTF-8
+LANGUAGE=ja_JP.UTF-8

/etc/locale.conf は systemd のもののようです.
/etc/locale.conf がシステムワイドの設定, ~/.config/locale.conf がユーザーの設定のようです.

ということでこのように変更しました.

$ localectl set-locale LANG=C
$ cat /etc/locale.conf
LANG=C
$ cat ~/.config/locale.conf
LANG=ja_JP.UTF-8
LANGUAGE=ja_JP.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8


$ systemctl reboot

しかし, ~/.config/locale.conf はうまく反映されなかったので結局いつもの ~/.profile で設定し直しました.

$ locale
LANG=ja_JP.UTF-8
LANGUAGE=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=

この環境は,Debian testing の 20240718 スナップショットで導入してすぐに sid にアップグレードしたものです.
loale は ja_JP.UTF-8, en_US.UTF-8, C.UTF-8 をテキストインストーラーから選択, ja_JP.UTF-8 をデフォルトロケールに.インストール後 sid に dist-upgrade して手動設定を下覚えのない環境です.
折を見て再度試してみたいところです.

$ dpkg-query -W locales systemd
locales 2.39-6
systemd 256.4-2
$ lsb_release -dr
Description:    Debian GNU/Linux trixie/sid
Release:        n/a
$ arch
x86_64
]]>
https://matoken.org/blog/2024/07/29/mcomix-did-not-start-because-locale-was-wrong/feed/ 0
moshに繋がらなくなった(localeが不足していた) https://matoken.org/blog/2022/07/12/not-connected-to-mosh/ https://matoken.org/blog/2022/07/12/not-connected-to-mosh/#respond Tue, 12 Jul 2022 14:49:26 +0000 http://matoken.org/blog/?p=3718

リモートのmoshに繋がらなくなってしまいました.sshの認証後に失敗しています.
sshでは繋がります.

以下はmoshでssh認証以降のメッセージです.接続元で ja_JP.UTF-8 を使っているのでmoshサーバでもそれを使おうとして見つからずに失敗していそうです.

Authenticated to 192.0.2.5 (via proxy) using "publickey".
bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)
The locale requested by LC_ALL=ja_JP.UTF-8 isn't available here.
Running `locale-gen ja_JP.UTF-8' may be necessary.

The locale requested by LC_ALL=ja_JP.UTF-8 isn't available here.
Running `locale-gen ja_JP.UTF-8' may be necessary.

mosh-server needs a UTF-8 native locale to run.

Unfortunately, the local environment (LC_ALL=ja_JP.UTF-8) specifies
the character set "US-ASCII",

The client-supplied environment (LC_ALL=ja_JP.UTF-8) specifies
the character set "US-ASCII".

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=ja_JP.UTF-8
LANGUAGE=
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=ja_JP.UTF-8
Connection to 192.0.2.5 closed.
Transferred: sent 3232, received 4688 bytes, in 3.3 seconds
Bytes per second: sent 975.2, received 1414.6
/usr/bin/mosh: Did not find mosh server startup message. (Have you installed mosh on your server?)

試しに LC_ALL=en_US.UTF-8 を渡すと接続できました.

$ LC_ALL=en_US.UTF-8 mosh $SERVER

sshで接続して確認すると en_US.UTF-8 しか設定されていません.

$ grep -v ^# /etc/locale.gen


en_US.UTF-8 UTF-8

ja_JP.UTF-8 とついでに ja_JP.EUC-JP を追加して, locale-gen コマンドでlocaleを生成しました.

$ sudo vi /etc/locale.gen
$ sudo git diff /etc/locale.gen
diff --git a/locale.gen b/locale.gen
index afb6141..0f91c36 100644
--- a/locale.gen
+++ b/locale.gen
@@ -286,7 +286,7 @@ en_US.UTF-8 UTF-8
 # it_IT.UTF-8 UTF-8
 # it_IT@euro ISO-8859-15
 # iu_CA UTF-8
-# ja_JP.EUC-JP EUC-JP
-#  ja_JP.UTF-8 UTF-8
+ja_JP.EUC-JP EUC-JP
+ja_JP.UTF-8 UTF-8
 # ka_GE GEORGIAN-PS
 # ka_GE.UTF-8 UTF-8
 # kab_DZ UTF-8
$ sudo locale-gen
Generating locales (this might take a while)...
  en_US.UTF-8... done
  ja_JP.EUC-JP... done
  ja_JP.UTF-8... done
Generation complete.

この状態で再度 LC_ALL=ja_JP.UTF-8 の状態でmoshで接続してみるとうまく接続できるようになりました :)
以前は繋げていたのでいつの間にか /etc/locale.gen を書き換えてしまっていた?

/etc はetckeeperでgit管理しているので探してみると,locales 2.28-10locales 2.28-10+deb10u1 の更新時に ja_JP.UTF-8 UTF-8 がコメントアウトされていました.確認不足ですね><

環境
$ dpkg-query -W mosh locales
locales 2.28-10+deb10u1
mosh    1.3.2-2.1+b1
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ arch
x86_64
]]>
https://matoken.org/blog/2022/07/12/not-connected-to-mosh/feed/ 0
localeが足りなくてmcomixが起動しなくなっていた https://matoken.org/blog/2019/09/12/mcomix-did-not-start-due-to-lack-of-locale/ https://matoken.org/blog/2019/09/12/mcomix-did-not-start-due-to-lack-of-locale/#respond Thu, 12 Sep 2019 13:57:58 +0000 http://matoken.org/blog/?p=2510

mcomix が起動しなくなりました.こないだのエンバグ?と思ったけど

エラーが違う.

$ mcomix
Traceback (most recent call last):
  File "/usr/bin/mcomix", line 11, in <module>
    load_entry_point('mcomix==1.2.1', 'console_scripts', 'mcomix')()
  File "/usr/lib/python2.7/dist-packages/mcomix/run.py", line 127, in run
    i18n.install_gettext()
  File "/usr/lib/python2.7/dist-packages/mcomix/i18n.py", line 71, in install_gettext
    locale.setlocale(locale.LC_ALL, '')
  File "/usr/lib/python2.7/locale.py", line 581, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

localeぽいので適当に指定してみると起動.

$ LC_ALL=C mcomix

しかし,C だと日本語ファイル名などでエラーとなる.

UnicodeEncodeError: 'ascii' codec can't encode characters in position 25-27: ordinal not in range(128)
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/mcomix/file_chooser_base_dialog.py", line 215, in _response
    if os.path.isdir(path):
  File "/usr/lib/python2.7/genericpath.py", line 49, in isdir
    st = os.stat(s)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 25-27: ordinal not in range(128)

en_US.UTF-8 だととりあえず利用できるけど,ja_JP.UTF-8 とかで日本語を指定すると……うまく行かない?

$ export LC_ALL=ja_JP.UTF-8 mcomix
bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)

localeを確認するとインストール時に設定していたつもりの ja_JP.UTF-8 がありません.

$ grep -v ^# /etc/locale.gen |uniq

en_US.UTF-8 UTF-8

/etc/locale.gen を編集して,ja_JP.UTF-8 のコメントを外して locale-gen コマンドで生成したら動くようになりました.

$ sudo git diff HEAD~~ /etc/locale.gen
diff --git a/locale.gen b/locale.gen
index c432a9a..afb6141 100644
--- a/locale.gen
+++ b/locale.gen
@@ -287,7 +287,7 @@ en_US.UTF-8 UTF-8
 # it_IT@euro ISO-8859-15
 # iu_CA UTF-8
 # ja_JP.EUC-JP EUC-JP
-# ja_JP.UTF-8 UTF-8
+ja_JP.UTF-8 UTF-8
 # ka_GE GEORGIAN-PS
 # ka_GE.UTF-8 UTF-8
 # kab_DZ UTF-8
$ sudo locale-gen
Generating locales (this might take a while)...
  en_US.UTF-8... done
  ja_JP.UTF-8... done
Generation complete.
環境
$ dpkg-query -W locales mcomix
locales 2.29-1
mcomix  1.2.1-1.1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64
]]>
https://matoken.org/blog/2019/09/12/mcomix-did-not-start-due-to-lack-of-locale/feed/ 0