トップ «前の日記 最新 次の日記»

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

これか……… ユーザ登録しないと plus1 できないのか。 まぁそりゃそうか。

とりあえず、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 で作って plus1 しておいた。

さて。どうやって回避しようかな。

https://bugs.launchpad.net/ubuntu-gnome/+bug/1662031

↑これのコメント #21 で治ってるみたいなんだけど、 私はこれじゃ治らなかった。なんなんだ…


編集 パスワード変更