笼中鸟技术笔记

系统工程、Android 与开源工具的个人实践

中文版

If you have tried Waydroid on an NVIDIA GPU, you have probably seen one of two things: software rendering slow enough to feel like a slideshow, or a container that never starts. Waydroid’s graphics stack is built around Mesa. Intel and AMD have drivers there; NVIDIA users are left out.

So I built Waydroid A17 NVIDIA: LineageOS 24.0 (Android 17) in Waydroid, with the GPU, hardware video decode and encode, root and desktop integration all working. On Arch Linux it is one yay -S waydroid-a17-nvidia-bin away.

Every Android app is its own KDE window

阅读全文 »

English version

用 N 卡跑 Waydroid 的人大概都见过这个场面:要么软件渲染,卡得像幻灯片;要么干脆起不来。Waydroid 的图形栈默认围着 Mesa 转,Intel 和 AMD 有现成的驱动,NVIDIA 用户只能看着。

所以我做了 Waydroid A17 NVIDIA:在 Waydroid 里跑 LineageOS 24.0(Android 17),GPU、视频硬解硬编、root、桌面集成全部打通。Arch 用户一条 yay -S waydroid-a17-nvidia-bin 就能装。

每个安卓应用都是一个独立的 KDE 窗口

阅读全文 »

有些丢包,本以为是物理信号或驱动层面的玄学博弈。

比如我这台机械革命蛟龙 16S 笔记本,搭载 AMD Ryzen 7 7840H 和 Intel AX210 网卡,运行着 Arch Linux 系统。

今晚在朋友家连上无线网,打算干点活。顺手在终端里 ping 了一下路由器网关 192.168.1.1,跳出来的统计结果却让我瞬间皱起了眉头:

1
2
3
--- 192.168.1.1 ping 统计 ---
已发送 437 个包, 已接收 375 个包, 14.1876% packet loss, time 437528ms
rtt min/avg/max/mdev = 0.846/1.689/70.606/4.780 ms

丢包率高达 14%。在无线连接下,这种规律性的、不高不低的丢包极其致命,会让网页加载频繁卡住,SSH 会话时不时挂起。

然而,拉出一根网线直连光猫,丢包率瞬间归零。
更诡异的是,旁边朋友那台装了 Intel AX201 网卡的 Windows 笔记本,同样连着 Wi-Fi,却稳如泰山,物理包一个不落。

这已经不是光猫上行宽带的问题了。这是无线局域网内的妖风。

阅读全文 »

我一直梦想着一种真正的、没有妥协的跨终端协作编程体验。

不是那种把所有协作者强行拉伸到同一个物理分辨率下的 tmux 共享——在那种模式下,用手机加入电脑的会话简直是一场灾难,你必须互相迁就对方的终端布局。我想要的是:主控端(笔记本)发起会话,协作者(手机 Termux、电脑浏览器、其他终端)可以独立渲染,各自以最适合自己屏幕尺寸的排版渲染 TUI 界面,但底层的数据流、光标和 AI 提示却保持完美同步。

Oh My Pi (OMP) 提供了原生的 /collab 协同信道,但官方默认使用的 wss://my.omp.sh 公网中转服务器因为地理位置阻隔以及全球负载,延迟通常在几百毫秒以上,打起字来有明显的粘滞感。

既然我手中有一套完整的、由 Headscale 协调的私有 Tailnet 网格,我们能不能打破这堵墙,利用 P2P 直连与自建 CA 证书,在内网搭建一套 1ms 延迟、全局 TLS 强加密的独立终端协同网络?

不仅能,而且其优雅与丝滑程度,远远超出了最初的想象。

阅读全文 »

有些问题,原本以为只是个小打小闹的配置微调。

就比如 Linux Chrome 下 claude.ai 网页的中文字体显示异常。按理说,写几行 Fontconfig 配置,把网页衬线字体栈(如 Georgia, Tiempos)强制重定向到无衬线的思源黑体(Noto Sans CJK SC)就完事了。

但现实永远比“按理说”要诡异得多。

重新加载了配置,重启了 Chrome,结果拉开 Claude 的页面一看,血压直接上来了:
“确实会 segfault” 里的 “实” 字,以及 “复杂时” 里的 “复杂”,在满屏清爽的思源黑体里,依然顽固地显示为带有尖锐修饰角的宋体。

更要命的是,“复杂”这两个字,在屏幕上呈现出一种极度不协调的姿态——“复”字是正常的宽字,而“杂”字却极度窄缩,挤在旁边。一宽一窄,看得人想直接砸键盘。

这已经不是简单的“没有生效”了。这是系统底层字形渲染的鬼故事。

阅读全文 »

国内的几款主流即时通讯/会议软件(如钉钉、腾讯会议)在 Linux 平台上的更新速度一向较为保守。特别是在 Wayland 会话渐成主流的今天,这些客户端由于内部仍然使用古老的 X11/XShm(X11 Shared Memory)API 进行屏幕捕捉,在 Wayland 桌面下共享屏幕时,往往只能看到一片漆黑,或者干脆静默失效。

为了打破这种尴尬,社区的前辈们(如 xuwd1 与 yatli)曾先后提出了通过 LD_PRELOAD 劫持 X11 共享内存 API,转而向系统 xdg-desktop-portal 申请 PipeWire 视频流,并把画面注入回 X11 XImage 空间的奇招。

本文将记录我们在此基础上的进一步探索:将该方案用纯 Rust 重写,彻底干掉臃肿的 OpenCV 和 C++ 运行时依赖,进行极致的性能与并发锁优化,并顺手排查并解决腾讯会议在 Bubblewrap 沙盒下因 PID 隔离导致投屏失效的深水坑。

阅读全文 »

这天晚上,本来应该结束了。

交付包已经打好,模型已经换好,板子已经测过,HTTP 接口也通了。仓库干净,交付目录里有 deb、manifest、使用说明。按理说,这个夜晚应该属于睡觉。

但现实不是按理说。

客户群又响了。

他们说:识别不到。

阅读全文 »

这台笔记本的休眠问题拖了一年多。

它不是那种“点一下没反应”的简单故障,而是每往前推进一步,就暴露下一层问题:先是 systemd 直接拒绝休眠,然后是 NVIDIA 恢复路径出错,再后来是镜像明明写进去了,机器却黑屏、键盘亮、风扇转,死活不真正断电。

最后真正稳定工作的状态反而很朴素:

1
2
3
4
5
6
7
8
Arch Linux
KDE Plasma Wayland
2560x1600 @ 240Hz
独立 swap 分区
resume=UUID=<swap-uuid>
HibernateMode=platform
NVIDIA 走 systemd/procfs sleep 路径
NVIDIA 不进 initramfs

这篇记录一下完整判断过程。重点不是照抄某个配置,而是把“休眠失败”拆成几个阶段来看。

阅读全文 »

这次遇到的是一个很离谱但又很典型的问题:一个明明有 Linux 原生版本的 Steam 游戏,在 Arch Linux 上切到中文后,主菜单按钮框还在,文字却空了;反而用 Steam Legacy Runtime / Wine 跑 Windows 版时中文正常。

最后修好以后,结论不是“Linux 没装中文字体”,而是更具体的一类坑:老 Unity Linux 原生版在 Steam Runtime 里直接读了 DejaVu 字体,绕开了宿主系统的 CJK fallback。

阅读全文 »

这次记录一场非常典型、也非常折磨人的开发板无线网络排障:Orange Pi 5 Pro 在 Joshua-Riek/ubuntu-rockchip 系统上,开机后短暂能连 5GHz,但几分钟内就会掉回 WORLD / 只剩 2.4GHz,最终断网。

最后真正的解法,不是继续在路由器、DFS、DNS、翻墙环境上兜圈子,而是把这块板子的 Wi‑Fi 驱动路径从 brcmfmac 切到 bcmdhd_sdio。

阅读全文 »
0%