2026年6月13日土曜日

tailscaleでローカルIPアクセスする

自宅wifiでもtailscale DNSの名前を使おうとして四苦八苦したが、中途半端にできた状態でうまく行ったとは言い難い。

DNSの名前を使うのは諦めて、local IPでアクセスすることにした。

自宅サーバ側 

自宅内のraspiサーバーでtailscaleを起動する。このとき192.168.11.0/24を外からアクセスできるようにアドバタイズする。

tailscale up --advertise-routes=192.168.11.0/24

tailscaleのページでedit routes settingから、アドバタイズしたsubnet routesをチェックして許可?する。

 

exit node

ついでにexit nodeにしても良さそうだが、しなくても良さそう?exit nodeにすれば自宅サーバ経由でインターネットアクセスができる。が、家のネットはあんまり早くないので積極的に使うほどでもない。怪しげなパブリックwifiを使うときとかに使えたら便利そうなので一応設定しておく。

tailscale up --advartise-exit-node --advertise-routes=192.168.11.0/24

exit nodeにする場合もtaiscaleのページから確定する必要がありそう。 

android側

ローカルLANにアクセスしたいだけなら、exit nodeのところからAllow LAN accessをONにすれば良さそう。

exit node経由でネットアクセスしたいなら、exit nodeで上記設定したサーバを使うよう設定する。 

これだけで良かったのか。苦労したのは何だったのか。。 

2026年6月7日日曜日

XR_Animatorで3Dモデルを動かす

以前作ったモデルをモーションキャプチャーで動かしたかった。 

ちょっと調べてみたところXR_Animatorとかいうソフトがあるらしい。electronで作ってあり、windowsでもlinuxでも動くようなのでやってみた。

起動して、vrmファイルをドラッグアンドドロップする。 

 

 一番左のアイコンをダブルクリックする。

できた。簡単。
 

2026年6月3日水曜日

pythonのkeyboardモジュールがroot権限を要求してきて困る

windowsのpythonでkeyboardモジュールを使って作ったプログラムがある。

キー入力「ctr l+g」とかで何かを実行する みたいな処理をするのに使っていたが、最近はほぼlinuxをメインで使ってるのでlinuxで動かしたい。

が、linuxでpythonのkeyboardを使うとroot権限が必要と言われて動かない。それでは困るのだ。

なんでも良いから動けばいいので、とりあえず以下のように回避した。

回避方法

とりあえずvenv環境でpythonを動かしてkeyboardを入れる。 (keyboard version 0.13.5)

python -m venv venv
. venv/bin/activate
pip install keyboard 

このvenvの中のkeyboardをいじって動くようにする。まずは以下の部分でrootを要求しているので、無効にする。

venv/lib/python3.13/site-packages/keyboard/_nixcommon.py

def ensure_root():
    if os.geteuid() != 0:
-        raise ImportError('You must be root to use this library on linux.')
+       pass

次は/dev/input/event*へのアクセスができれば良い。見たところinputグループに入っていればアクセスできる。

usermod -aG input ユーザ名

これでも以下でエラーが出る。

File "/usr/lib/python3.13/subprocess.py", line 577, in run
    raise CalledProcessError(retcode, process.args,
                             output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['dumpkeys', '--keys-only']' returned non-zero exit status 1.

「dumpkeys --keys-only」を使っているようだが、rootじゃないとエラーになる。ディストリによるのかもしれないが、こっちはグループでどうにかなるものじゃなさそう。/dev/consoleをa+rwにしてもいいとは思うが、なんか怖いので以下のようにした。

一旦sudoで動かして結果を取っておく。

sudo dumpkeys --keys-only > keys

そして、dumpkeysで取得すべき出力をcatで代替する。

    synonyms_template = r'^(\S+)\s+for (.+)$'
-    dump = check_output(['dumpkeys', '--keys-only'], universal_newlines=True)
+    dump = check_output(['cat', 'keys'], universal_newlines=True)
    for synonym_str, original_str in re.findall(synonyms_template, dump, re.MULTILINE):

問題なく動いた。 

その後 

ふと公式を見ると、masterブランチでは解決されているっぽい?また車輪の再発明をしてしまったのか?

https://github.com/boppreh/keyboard/commit/7f03a3d567b484ae6c2beebe2fe537be7643f7a9 

よく見ると/dev/consoleがttyグループでアクセスできる前提っぽい。それじゃあ動かねえんだよなあ。一応無駄ではなかったような気がするので良しとする。

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メモリを使って試してみたりしてみるか。。