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
これか………
ユーザ登録しないと できないのか。
まぁそりゃそうか。
とりあえず、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
で治ってるみたいなんだけど、
私はこれじゃ治らなかった。なんなんだ…
2022-10-31 (Mo)
_ 原神
モンドの評判 Lv が MAX になった。 羽をくれたけど、主人公もうあんまり使ってないんだよな… 羽の出番が…
狼、やっと倒せた!! バーバラ/心海/アンバー/クレーで、水共鳴と炎共鳴にして、 心海で回復しながらクレーでボコった。
璃月の瞳あと2つ。共鳴石の素材がなかなか集まらない… 昨日の「近くにありません」にもびっくりしたけど、 今日の「近くにあります」にはもっとびっくりだった。 近くにあるなら、場所教えてよ!
2023-10-31 (Tu)
_ Bing にイラストを描いてもらう続き
「日本風イラスト」じゃなくて「二次元イラスト」にしたら、 すごい可愛いのが出てきた。
いまいち髪の先がふわふわしすぎなんだけどなー
この女の子は、ミライという名前の魔法少女です。彼女は、青い髪とツインテールが特徴的な可愛らしい少女で、白い背景に映えます。彼女は、魔法の杖とハート型のペンダントを持っており、それらを使って様々な魔法を使うことができます。彼女のドレスは、ピンク色と水色のフリルで飾られた、ふわふわしたスカートとリボンがついたものです。彼女は、自分の魔法を使って人々を助けたり、悪い魔法使いと戦ったりすることが大好きです。彼女は、明るく元気で勇敢な性格で、友達や家族を大切にしています。彼女の夢は、世界中の人々に幸せを届けることです。
その設定はどこから出てくんねんw
X(Twitter)用にうまく切り抜けるかなぁ...
_ 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
海をあっちへ行ったりこっちへ行ったり。 今回のマップは海らしい。
それはそれとして、イジとの戦闘以降、出航までの記憶がないのは何故だろう… たぶん一昨日の夜だと思うんだけど、寝ながらプレイしたのかな ^^;