Termux の sshd はどんなユーザー名でも同じユーザーで入れる ── ソースで確かめる

母艦から Pixel 6(Termux の sshd)へ画像を scp するために ~/.ssh/config に エントリを足したとき、User を書いた。あとで気づいたが、相手が Termux だと ssh banana@<phone> でも ssh root@<phone> でも、同じユーザーでログインできる。 ~/.ssh/config の User 行は効いていない。設定の問題ではなく、Termux の OpenSSH ビルドの話だった。 まず観察 $ ssh -p 8022 banana@100.65.202.69 'whoami' u0_a440 $ ssh -p 8022 root@100.65.202.69 'whoami' u0_a440 Copy banana も root も通って、着地するのは u0_a440(Termux アプリのユーザー)。 鍵は /data/data/com.termux/files/home/.ssh/authorized_keys だけを見ている。 通常の OpenSSH がユーザーをどう解決するか sshd は、接続してきたユーザー名を struct passwd に解決する。これをやるのが auth.c の getpwnamallow()。素の OpenSSH ではこう: pw = getpwnam(user); Copy user はクライアントが送ってきた名前。それを /etc/passwd(実際には NSS 経由で LDAP / SSSD なども)で引く。 ...

nvim-treesitter の master→main 移行で踏んだ treesitter エラー3連発(Neovim 0.12)

Neovim を 0.12.4 に上げたあたりから、nvim-treesitter 関連のエラーが立て続けに出るようになった。原因を追っていくと、nvim-treesitter の master ブランチがすでに EOL で Neovim 0.12 に付いてこられていないという一点に行き着く。main ブランチへ移行して解決したが、その過程と、移行後にもう一段踏んだ落とし穴をまとめておく。 環境: 項目 値 Neovim v0.12.4(Arch Linux) nvim-treesitter master(tag v0.10.0、2025年5月で凍結)→ main へ移行 プラグインマネージャ Lazy.nvim 症状1: Markdown を開くと gotmpl parser で落ちる Markdown ファイルを開いた瞬間、エラーで停止する(続けるにはENTERを押すか…)。 Error in BufReadPost Autocommands for "*": ... ftplugin/markdown.lua: Vim(runtime):E5113: Lua chunk: .../treesitter.lua:460: Parser could not be created for buffer 1 and language "gotmpl" Copy これを ENTER で流すと、今度はコードフェンス(```go など)のシンタックスハイライトが効かなくなり、:messages に別のエラーが出ている。 Decoration provider "start" (ns=nvim.treesitter.highlighter): .../treesitter.lua:197: attempt to call method 'range' (a nil value) Copy Packer.nvim → Lazy.nvim へ移行した時期と重なっていたので最初はプラグインマネージャを疑ったが、それは無関係。同時期に上げた Neovim 0.12 が引き金だった。原因は2つ重なっていた。 ...

swayfxのscratchpadクラッシュを追う: git blameで見つけたupstreamとの噛み合わせ問題

事象 普段使っているswayfx上で、scratchpadに入れたウィンドウを表示している状態からもう一度scratchpad showを叩くと、コンポジタごと丸ごと落ちる現象に遭遇した。SDDMのログイン画面まで戻される、なかなか派手なクラッシュ。 環境: 項目 値 swayfx 0.5.3-4(sway 1.11.0ベース、Arch Linuxパッケージ) wlroots 0.19.3 GPU AMD Radeon RX 6600 XT(amdgpu) bindsymはこう組んでいた: bindsym $mod+minus scratchpad show, resize set width 90 ppt height 90 ppt, move position center Copy scratchpad showと同時にresize・moveを連続実行する形。これを2回続けて押す(1回目で表示、2回目でフォーカスしたまま押してhideパスに入る)とクラッシュする。 スタックトレースを取る coredumpctl + gdb(デバッグシンボル入り)でコアダンプを解析した。 #0 root_scratchpad_hide (con=0x55f058a52400) at ../swayfx-0.5.3/sway/tree/root.c:257 257 set_container_transform(con->pending.workspace, con); seat = 0x55f0580db940 focus = 0x55f058a41760 ws = 0x0 Copy ws(= con->pending.workspace)がNULLのままset_container_transform()に渡され、内部で参照外しして落ちていた。該当箇所のコードはこうなっていた: void root_scratchpad_hide(struct sway_container *con) { struct sway_seat *seat = input_manager_current_seat(); struct sway_node *focus = seat_get_focus_inactive(seat, &root->node); struct sway_workspace *ws = con->pending.workspace; if (con->pending.fullscreen_mode == FULLSCREEN_GLOBAL && !con->pending.workspace) { // If the container was made fullscreen global while in the scratchpad, // it should be shown until fullscreen has been disabled return; } ... set_container_transform(con->pending.workspace, con); // ガードなし Copy NULLチェックが「FULLSCREEN_GLOBALのときだけ」に絞られていて、それ以外の理由でpending.workspaceがNULLになるケースを素通りしてしまう。set_container_transform()はswayfx独自の追加関数(本家swayには存在しない)なので、一見swayfx側のバグに見えた。 ...

Street Fighter 6 (Proton) で日本語入力ができない問題は /etc/environment のIME環境変数で解決した

訂正 (2026-08-08) この記事の当初の結論「ユーザー側の設定では解消できない」は 誤りでした。 /etc/environment にIME環境変数を設定することで、Ctrl+Space での直接入力が動作するようになりました。 結論だけ必要な方は 追記: 解決した へ。 以下の調査記録は、当時どう考えて誤った結論に至ったかの記録として、そのまま残します。 事象 Street Fighter 6のチャット欄でCtrl+Space(fcitx5のトリガーキー)を押しても、日本語入力(Mozc)に 切り替わらない。ローマ字のまま反応しない。 項目 値 OS Arch Linux WM Sway (swayfx) IME fcitx5 + fcitx5-mozc ゲーム Street Fighter 6 (Steam, AppID 1364780) Proton Proton Experimental / GE-Proton11-3 当時の結論(誤り) Proton公式ビルドは意図的にXIMを無効化しており、加えてWineの新しいIME実装がキー入力を XIMサーバーまで橋渡ししていない。この二つが重なっているため、レジストリでXIMを 再有効化しても効果が出ない。Street Fighter 6固有の不具合ではなく、Wine/Proton全体に 共通する構造的な制約であり、ユーザー側の設定では解消できない。 ——これが誤りだった。 実際には環境変数がゲームの起動経路まで届いていなかっただけの可能性が高い。 詳細は末尾の追記を参照。 当時の根拠 以下は2026-08-06時点で実際に観測した内容。観測自体は正しいが、そこから導いた結論が誤っていた。 Sway/fcitx5の設定は正常 — Ctrl+Spaceに該当するbindsymはなし、GTK_IM_MODULE/ QT_IM_MODULE/XMODIFIERSはenvironment.dで正しく設定済み、fcitx5のトリガーキーも Control+spaceのままでXIMアドオンも無効化されていない。 後から振り返ると、ここが見落としの核心だった。 「environment.dで設定済み」であることは確認したが、 その変数がSteam経由で起動されるゲームプロセスまで届いているか は確認していなかった。 Protonは意図的にXIMを無効化している — Proton公式リポジトリのIssueに記載がある。 XIM is disabled for working around a X11 issue ...

Arch Linux と Windows 11 を安全にデュアルブートするためのメモ

このメモの目的 このメモは、ASRock 環境で実際にトラブルを踏んだ経験を元に、 Arch Linux と Windows 11 を同じディスクでデュアルブートしたい systemd-boot を使いたい 変な EFI トラブルで何日も溶かしたくない Arch / Windows / systemd-boot / UEFI の関係図 という人向けの「基礎まとめ」です。 詳細なチュートリアルというより、やってはいけないポイント や 設計の考え方 を中心にしています。 前提環境 例として想定している環境はこんな感じです。 マザーボード: ASRock A520M Pro4(UEFI) CPU: Ryzen 7 5700X GPU: Radeon RX 6600 XT メモリ: DDR4 32GB ストレージ: NVMe SSD 1 本 OS: Windows 11 + Arch Linux ブートローダー: systemd-boot パーティション形式: GPT ブート方式: UEFI(Legacy BIOS / CSM は使わない) 他のマザーボードでも基本の考え方は同じですが、UEFI のクセはメーカーごとに違うので、あくまで「考え方の参考」として読んでください。 ...

Waydroid Binder/BinderFS

Waydroidが起動しない原因とBinder/BinderFSの仕組み

概要 Arch Linux で Waydroid を動かそうとした際、 「Can't open /dev/anbox-binder: No such device or address」というエラーが発生した。 原因は カーネルが BinderFS を正しくマウントしていなかったことにあった。 ここでは、Binder/BinderFS の役割と、実際に動作させるまでの手順をまとめる。 1. Binder と BinderFS の違い Android のアプリ間通信(IPC)は Binder ドライバで実現されている。 Linux でこれを再現するためには、カーネルモジュールと特別な仮想ファイルシステムが必要になる。 名称 説明 /dev/binder Android のプロセス間通信 (IPC) のコアデバイス /dev/hwbinder ハードウェア抽象層 (HAL) 用 Binder /dev/vndbinder ベンダーサービス用 Binder BinderFS これらのデバイスノードを動的に管理するためのファイルシステム 昔の環境では /dev/binder を直接作っていたが、 最近の Waydroid や Mainline カーネルでは BinderFS を使うのが標準。 2. エラーの原因 Waydroid 起動時のログ: [gbinder] ERROR: Can't open /dev/anbox-binder: No such device or address [08:49:18] Failed to add presence handler: None Copy これは、/dev/anbox-binder が存在しても中身が無効、 つまり Binder デバイスがカーネル側で認識されていないことを意味する。 ...