2026年5月31日日曜日

godotでandroid向けアプリを作る

godotで遊んでみて、適当に子供向けのプログラムを作った。ただミャクミャクが降ってきて物理演算しているだけだが、4〜5歳児としてはそこそこ暇つぶしにはなるようだ。

外出時にグダグダ言い出したときに与えられるようにandroidで動くようにしたが、godotだと意外と簡単だった。

と言ってもやったのは数ヶ月前なので、すでにかなりの部分を忘れてしまったが思い出した部分を書いておく。

操作

そのままandroidに持っていくと動かせなくて何も面白くない。CanvasLayerを作ってボタンを置いて、Actionを紐付ける。アイコンはgimpで文字書いたpngを作っただけ。これが一番面倒だった。

加速度センサーを使いたかったがうまく行かなくて断念。断念したあとに[プロジェクト設定] ->[入力デバイス]のところに加速度センサーとかを有効にする設定を見つけた。多分これチェックしておけば動いたんじゃなかろうか。まあもう面倒だからまた今度でいいや。 

android-sdk

android-sdkを入れる。javaも必要だった気がするが、自動的に入ったかもしれない。

apt install android-sdk

インストールしたらエディタの設定で指定する。linuxだとaptで入れるだけで便利。

debianでは/usr/lib/android-sdkに入るようだ。javaもdefault-javaのjvmを指定する。(/usr/lib/jvm/default-java)

export-templates

godotのサイトのダウンロードからexport-templatesとやらをダウンロードする。

ダウンロードしたら[エディター] -> [エクスポートテンプレートの管理]からインストールする。

多分これがgodotのメインアプリになって、あとはこの上でgdscriptが動くだけなんだろう。

c#を使っている場合はどうするんだろうと思ったが、export-templatesのc#版がありそうなのでそれで動くんだろうか。

export

[プロジェクト] -> [エクスポート]でエクスポートする。


できたapkファイルをandroidに持っていってインストールする。

実行

動いた。

いくつかandroidに入れてみて大体はなんの問題もなく動いたが、AQUOS sense 10だけ何か動きがおかしかった。弾を撃っても弾が動かない。

FPSの問題っぽい気がしたので、「なめらかハイスピード表示」とやらをgodotのアプリだけOFFにしたら問題が解決した。なめらかハイスピード表示とやらで 120FPSとかになっているのかもしれない。それによって時間の計算がうまく行かず弾が進まない?よくわからないがとりあえずOFFにして解決したので良しとする。

まあそもそもミャクミャクを弾で撃つなと言う話でもある。 

2026年5月29日金曜日

linuxのfirefoxでPasskeyを使いたい

linuxのfirefoxでパスキーを使いたい。現状では何か物理キーを繋げてないと動かなそうな感じ。なんとかしたいと思って調べたところ、keepass-xcがpasskeyに対応しているらしい。  

とりあえずやってみる。

拡張機能を入れる

KeePassXC-Browserをインストール 

拡張機能の設定で「パスキーを有効にする」 をやっておく。

keepass-xcインストール

なんとなくfullで入れておく。

apt install keepassxc-full

入れたらデータベースを作って動かす。

設定で「ブラウザー統合を有効にする」 とし、KeePassXC-Browserと接続する。

テスト

とりあえずパスキーを使っているサイトでパスキーを作ってみると、KeePassXCに登録できたっぽい。中銀証券ではログインもできた。

楽天証券はすでに作成済みと言って作らせてもらえなかったが、一回消したら登録できた。ログインも問題なし。だが、今度はlinuxのfirefoxからしかログインできなくなってしまう。

googleのパスワードマネージャーで登録しておいて、そこからエクスポートできれば良いんだが。まだできない?ようだ。 

とりあえずパスキーは使えるようになったが、本命の楽天証券が一箇所からしかログインできなくて不便だ。なんで一つしか登録できねーんだよアホか。 

と思ったら一旦電話認証で一時的にパスワード認証に変更してログインして パスキー追加できた。解決。アホとか言ってすいませんでした。

他の方法

firefoxでやろうとすると結構大変だが、 他のやり方もありそう。

chromeを使う 

chromeだとlinuxでもパスキーが使える。何も難しいことはない。androidともパスキーの同期が取れる。

が、chromeは使いたくない。スマホで使うときに広告ブロックできないからだ。ブックマークをスマホとPCで同期したいので必然的にPCでもfirefoxを使っている。

物理的なキーを使う

Yubikey?とやらを買えばできそうな気はするが、何か1万円くらいしそう。chrome使えばいいだけのものに1万円は払いたくない。

拡張機能? 

もう少しどうにかならんかと思って探していたら、そういうfirefox拡張機能(linux passkey manager?)がありそう?

が、どう考えてもユーザ数が少ないし、レビュー0件。
これを脳死で使うのはさすがに恐ろしすぎる。


2026年5月23日土曜日

428クリア

428の続編を作るプロジェクトが始まったようだ。楽しみではあるが何か内輪の同窓会みたいにならないか心配でもある。フレッシュな人も居てほしいなあ。金八先生のゲームも面白かったので期待はしたい。 

とりあえず久しぶりに思い出したので、結構前に買ったsteamで428のトロフィーコンプリートした。

昔は428のためだけにwiiを買ったのだが、今はsteamでもできて非常にありがたい。街も出してほしいが何か難しいんだろうか?PS版もあったような気がするんだけど。 


 前に買ったときはwindowsで遊んでいたが、今はlinux上のsteamでも問題なく動く。昔のwineからは考えられないくらい進化しててすごい。下手したら今のwindowsで動かなくなった昔のソフトとかも動かせるんじゃないだろうか。

一つ不具合っぽいものとしては安物bluetoothコントローラーの接続が切れたら一回立ち上げ直さないとジョイスティック操作できないくらい。(元からなのかwineのせいなのかはわからない)

2026年5月21日木曜日

systemdのDynamicUserに引っかかってRead Only Filesystemエラー

 前回、luanti-serverをraspberry-piで動かすようにした。とくに問題なく快適に動いている。ただ、よく考えるとrootファイルシステムはmicroSDなので、頻繁に書き込みが発生しそうなマイクラクローンのデータを置いておくのは良くないような気がしてきた。

USB接続のHDDをつけてるので、そこに移動しようとしてみたが、色々引っかかって難航。

systemdのDynamicUser

[Service]
Restart=on-failure
DynamicUser=yes
ExecStart=/usr/libexec/luanti/luantiserver --config /etc/luanti/default.conf --logfile /var/log/luanti/default/server.log --gameid $LUANTI_GAMEID
Environment=MINETEST_USER_PATH=/var/lib/luanti/default
Environment=MINETEST_MOD_PATH=/usr/share/games/minetest/mods
Environment=LUANTI_GAMEID=minetest_game
EnvironmentFile=-/etc/luanti/default.env
StateDirectory=luanti/default
LogsDirectory=luanti/default

systemdのluanti-serverのサービスは上記のようになっている。MINETEST_USER_PATHを/etc/luanti/default.envで変えればそれだけで変更できそうだと思ったが動かなかった。

2026-05-21 01:00:36: ERROR[Main]: Failed to open "/mnt/disk/luanti/default/worlds/world1/ipban.txt.~mt0": Read-only file system 

何度やってもworldデータに書き込めない(Read Only Filesystem)みたいなエラーが出て起動できない。systemdから動かすとNGでrootで動かすとOK。cp -aでコピーしたから権限は問題ないはず。。。と思ったのが間違い。そもそもchmod -R a+wとしても駄目。なぜなんだ。

psをよく見ると存在しないluanti-serverみたいなユーザで動いていて、データファイルはnobodyユーザの持ち物になっている。

なんでnobodyの持ち物に書き込みできるんだ?と思ったら、どうやら上記DynamicUser=yesとなっている場合に、/var/lib/private以下のStateDirectoryで指定したパスを動的に作られたユーザ権限?で使う仕組みになっているようだった。 

そういう状態なのに別の場所に置いているパスを指定してもそこはDynamicUserでは書き込み権限が無いという仕組みのようだ。 

 DynamicUserをやめるか、なんとかして/var/lib/private/luanti/default以下に見えるようにしなければ動かない。できるだけインストールされているsystemdのファイルはいじりたくなかったので、bindマウントでなんとかした。

とりあえずこれで起動はうまく行った。

USB-HDD遅い

これで安心と思ったのも束の間、実際動かしてみるとかなり遅い。microSDより遅いってのはどういうことだろう。

raspberry-piのUSBドライバの問題という話も見たが、関係なさそうだ。(uasだと遅い?のでusb-storageにすると良いらしい?けど、usb-storageになっている。)

hdparmの値を見る限りではSDよりもHDDのほうが早いのでそんなに遅いってこともなさそう。HDDだとSDに比べてランダムアクセスが遅いのでそこが致命的なんだろうか。SSDにしてみると良いのかもしれない。 

とりあえず今のところこれは未解決。SSD買うのももったいないので、一旦そのへんのUSBメモリを使って試してみたりしてみるか。。