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で代替する。(2箇所有ったと思う)

    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グループでアクセスできる前提っぽい。それじゃあ動かねえんだよなあ。一応無駄ではなかったような気がするので良しとする。