2020-10-31 (Sa) [長年日記]
_ 相変わらず LANG がわからない
仕方ないので 片っ端から log を突っ込んで調べてる。
pam_systemd ではちゃんと設定されてる。
pam_putenv でも設定されてる。
しかしその後に LANG=C に戻ってる。
gdm-session-worker の中みたい。
gdm は /etc/gdm/env.d や /usr/share/gdm/env.d を見て、 そこから環境変数をインポートする機能はあるけど、 これらのディレクトリは存在しないので、これは違う。
gdm_session_worker_handle_set_environment_variable() が呼ばれて、 その先でセットしてるっぽい。けど、どこから呼ばれてるのかわからない。
abort() して gdb 使っても、関数名が出力されない。うまくデバッグビルド できてないのだろう。meson とか使われるとさっぱり手が出ない。
引数が GdmDBusWorker *object
なのか。
dbus か…
dbus-update-activation-environment で設定したのかしら。 これで設定した環境変数の一覧ってどうやったら見れるのかな。
dbus-daemon does not provide a way to unset environment variables after they have been set (although systemd does), so dbus-update-activation-environment does not offer this functionality either.
unset できない、ってそれはひどくないっすか?
お。gdm のビルドディレクトリにソースができてた。
SetEnvironmentVariable か。 これきっと、外部から注入してるなぁ。 どっから来てるんだろう…
gdm-session.c の gdm_dbus_worker_call_set_environment_variable を呼んでるところか。
https://gitlab.gnome.org/GNOME/gdm/-/issues/338
これか………
ユーザ登録しないと できないのか。
まぁそりゃそうか。
とりあえず、gdm の daemon/gdm-session.c を
static void
send_environment_variable (const char *key,
const char *value,
GdmSessionConversation *conversation)
{
if (strcmp(key, "LANG") == 0)
return;
gdm_dbus_worker_call_set_environment_variable (conversation->worker_proxy,
key, value,
conversation->worker_cancellable,
NULL, NULL);
}
って感じで、無理やり LANG を送らなくしたら、私の設定が効くようになった。 gdm が LANG を送ってるのが原因なのははっきりした。
gitlab の issue は、gitlab のアカウントを github oauth で作って しておいた。
さて。どうやって回避しようかな。
https://bugs.launchpad.net/ubuntu-gnome/+bug/1662031
↑これのコメント #21
で治ってるみたいなんだけど、
私はこれじゃ治らなかった。なんなんだ…