トップ «前の日(10-30) 最新 次の日(11-01)»

2019-10-31 (Th)

_ wayfire 更にデバッグ

wayfire を使い始めたころからの症状だけど、 wireshark を X11 で動かすと、

  • capture 開始
  • パケットが表示されたら
  • ctrl+q
  • ポップアップが出るので、保存せずに終了

これだけで wayfire が落ちる。

以前デバッグしてみたところ、解放済みメモリを使ってるらしいことは判った。

で、今日もっとデバッグしてみた。

  • unique_ptr が nullptr である。
  • しかし nullptr にしている箇所はない。
  • その unique_ptr はメンバなので、インスタンスが破棄された際に unique_ptr も破棄されて、結果 nullptr でクリアされたのかもしれない。
  • だとすれば、そのインスタンスは既に破棄されているはず。

で、

  • そのインスタンスを更に使おうとするのは、last_focus にセットされているせい。
  • last_focus は view になったり nullptr がセットされたりするようだ。
  • destroy されてるはずなのに last_focus が nullptr になってないのが問題なのだろう。

んで、destroy 時に set_last_focus() 漏れがある? と思ったけど、 そういう作りではない。 view が destroy されたら signal が emit されて、その signal handler で set_last_focus(nullptr) する感じ。 漏れようがない。

…と思ったんだけど、set_last_focus(nullptr) してるのは、 disappeared の時なんだよね。destroy 時ではなく、unmap の時。

これ… unmap 処理が呼ばれずに destroy してとか、ない?? と思った。

wlroots の xwayland 対応の仕様として、 map されてる view は、いきなり destroy されても必ず unmap は呼ぶ、 とか書いてあった。怪しい。そこがうまくいってないとか?

wayfire 側 unmap, destroy のところに fprintf を突っ込んでみたら、 確かに unmap が来て destroy が来てる。wlroots は正しそう。 そういう問題ではないのか?

でも set_last_focus() の引数を見ると、map してないのに set_last_focus() が 呼ばれてるんだよね。これ、まずくない?

constructor → set_last_focus → destroy って流れだと、 unmap が呼ばれないので last_focus がクリアされずに destroy が走ってしまって、 ポインタが残ってしまう。

んー、しかし、set_last_focus() の前に is_mapped() はチェックしてる。 ……ように見えて、その後、view の親を一番上まで辿って、set_last_focus() してる。 その際に is_mapped() はチェックしてない。

これ? と思ったらビンゴ。

ただ、子が map されてるのに親が map されてない、という奇妙な状況になるのが、 理由がわからない。とりあえず、一番上の親が map されてなかったら set_last_focus() しない、って処理を入れると回避はできた。

https://github.com/masm11/wayfire/commit/718c363b333f7ea5b69eda531ded84cce5005e44

……思えば遠くへ来たもんだw

ともかく、これで安心して使えるかな。使えるといいな。

_ リステップ 更新

お知らせを見て歓喜した!

ステージ中とそれ以外とで、別々にボリュームを設定できるようになった。

よし、これで、ステージ中以外は SE を鳴らしつつ、 ステージ中だけしゃんしゃん音を消すことができる!

このゲーム、私が始めたのは最近だけど、リリースから何年経ってるのかな。3年くらい? 今頃こんな小さな機能追加があるとは思ってなかった。 要望があるならとっくに追加されてるだろうし、追加されてないってことは要望は多くない んだろう、くらいに思ってた。

「神アプリ」の称号が相応しい。


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 で治ってるみたいなんだけど、 私はこれじゃ治らなかった。なんなんだ…


2022-10-31 (Mo)

_ 原神

モンドの評判 Lv が MAX になった。 羽をくれたけど、主人公もうあんまり使ってないんだよな… 羽の出番が…

狼、やっと倒せた!! バーバラ/心海/アンバー/クレーで、水共鳴と炎共鳴にして、 心海で回復しながらクレーでボコった。

璃月の瞳あと2つ。共鳴石の素材がなかなか集まらない… 昨日の「近くにありません」にもびっくりしたけど、 今日の「近くにあります」にはもっとびっくりだった。 近くにあるなら、場所教えてよ!

_ 原神の羽

…と思ったら、この羽、誰にでも装着できるのね。

クレーに付けとこ。


2023-10-31 (Tu)

_ Bing にイラストを描いてもらう続き

「日本風イラスト」じゃなくて「二次元イラスト」にしたら、 すごい可愛いのが出てきた。

Bing AI 製 二次元イラスト

Bing AI 製 二次元イラスト 魔法少女風

いまいち髪の先がふわふわしすぎなんだけどなー

この女の子は、ミライという名前の魔法少女です。彼女は、青い髪とツインテールが特徴的な可愛らしい少女で、白い背景に映えます。彼女は、魔法の杖とハート型のペンダントを持っており、それらを使って様々な魔法を使うことができます。彼女のドレスは、ピンク色と水色のフリルで飾られた、ふわふわしたスカートとリボンがついたものです。彼女は、自分の魔法を使って人々を助けたり、悪い魔法使いと戦ったりすることが大好きです。彼女は、明るく元気で勇敢な性格で、友達や家族を大切にしています。彼女の夢は、世界中の人々に幸せを届けることです。

その設定はどこから出てくんねんw

X(Twitter)用にうまく切り抜けるかなぁ...

_ 原神 - 秘境

氷の秘境は苦手だ… 4戦目全滅した…

あと風雅の秘境も回った。こっちの方がマシ。 忍のスキルLv10。

昨日は心海のスキルをLv10に上げた。

_ Chrome 設定

というか、GTK4 がインストールされてなかったww

日本語入力もできるようになった。

archlinux 専用だけど、設定は↓。

luna:~ % cat ~/.config/chrome-flags.conf 
--ozone-platform-hint=wayland
--enable-wayland-ime
--gtk-version=4
luna:~ % 

2024-10-31 (Th)

_ 原神 - 完凸ナヒーダ試用

うは、めちゃめちゃ強い。 ナタの競技場の南にある秘境で、 鍾離シールド→雷電スキル→ナヒーダスキル長押し・爆発→あとはけんけんぱしてれば倒せる。 ちゃんと爆発も溜まるのがすごい。

↓今のビルド。

ナヒーダ完凸

_ YsX

海をあっちへ行ったりこっちへ行ったり。 今回のマップは海らしい。

それはそれとして、イジとの戦闘以降、出航までの記憶がないのは何故だろう… たぶん一昨日の夜だと思うんだけど、寝ながらプレイしたのかな ^^;


追記 パスワード変更