cd /news/developer-tools/linxr-part-5-live-boot-logs-saf-stor… · home topics developer-tools article
[ARTICLE · art-87322] src=dev.to ↗ pub= topic=developer-tools verified=true sentiment=↑ positive

Linxr | Part 5 — Live Boot Logs, SAF Storage & Merging Docker

Linxr v3.0.0 introduces live serial boot logs, Storage Access Framework (SAF) file sharing, and embedded Docker container management. The update redirects Alpine Linux's kernel console to serial output for real-time diagnostics, uses virtio-9p for host-guest file exchange, and merges the Pockr container manager into the Linxr app. A thread-safe SSH probe lock in Kotlin resolves race conditions during QEMU startup.

read1 min views1 publishedAug 5, 2026

In Part 4, we showcased Linxr booting Alpine Linux in QEMU on non-rooted Android devices. Today in Part 5, we dive deep into the major architectural updates that powered our v3.0.0 release: bringing live serial boot diagnostics, seamless Storage Access Framework (SAF) file sharing, and embedding full Docker container management directly into Linxr.

In earlier builds, VM startup was a bit of a black box—users saw a spinning indicator until port 2222 opened for SSH. If the kernel panicked or a system service hung during boot, there was no visibility inside the app UI.

To solve this, we redirected Alpine’s kernel console to serial output (/dev/ttyS0

): dmesg

, init

scripts, and sshd

startup logs directly from the guest virtual serial console.Linux virtual machines running under QEMU require clean POSIX filesystem access to exchange files with the Android host system.

virtio-9p-pci driver to expose host directories to the guest OS, mounting /storage/emulated/0/LinxrShare

inside Alpine Linux at /mnt/sdcard

.MethodChannel

handler (pickFolder

) calling Android’s Storage Access Framework (ACTION_OPEN_DOCUMENT_TREE

) to allow users to select custom host folders from Settings.Previously, container management lived in a separate project named Pockr. For v3.0.0, we unified our architecture by deprecating standalone Pockr and embedding its container controls directly into Linxr:

nginx

, redis

, alpine

).When launching QEMU, the OpenSSH daemon takes a few seconds to initialize. Probing TCP port 2222 concurrently from Flutter while QEMU bound socket ports caused intermittent race conditions.

We introduced a thread-safe SSH probe lock in Kotlin (VmManager.kt

):

Linxr v3.0.0 is officially live on [Google Play](https://play.google.com/store/apps/details?id=com.ai2th.linxr) and [GitHub Releases](https://github.com/AI2TH/Linxr/releases/latest)!

Join our community for feature requests and discussions:

👉 Google Group: https://groups.google.com/g/ai2th

── more in #developer-tools 4 stories · sorted by recency
── more on @linxr 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/linxr-part-5-live-bo…] indexed:0 read:1min 2026-08-05 ·