Native Shell
Native Shell은 모든 플랫폼의 앱 안에서 만들어지는 AI UI입니다
Android에서 Linux(Termux·proot·Flatpak) GUI를 창으로 열고 각각을 앱으로 전환하는 패키지
A package for your Linux environments on Android (Termux, proot distros, Flatpak): their GUI programs open as Android windows, and each one can become an Android app of its own, built on the phone.
개발 도구Rust · ShellGitHub @dixonSolutions온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
A package for your Linux environments on Android (Termux, proot distros, Flatpak): opens their GUI programs as Android windows and exports each one as an Android app of its own, built on the phone. Not an app or a container itself; no root.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗curl -fsSL https://dixonsolutions.github.io/lindroids/install.sh | sh # in Termux
lindroids run org.gnome.Calculator # a window of its own, now
lindroids export org.gnome.Calculator # an app of its own: tap Install, then its icon
pkg in
Termux, or with the package manager of a proot distro. There is no Lindroids app to get
from a store, and nothing to install on Android first.lindroids export fills it in with a program's name and icon and signs it on the phone.
The resulting app belongs to that program and opens its window. The optional windows app
(lindroids app install) is built the same way, for programs you run without exporting.lindroids export builds an APK for the
program on the phone (its package, name, icon and start page; about 180 KB, in milliseconds)
and hands it to Android's installer. Its icon starts the program, also when Termux is not
running; its window is Android's own WebView, full screen; Recents shows its icon.
How, and what was tested →lindroids run opens the program in the
Lindroids windows app (lindroids app install builds it on the phone, once): one window per
run with the program's name, closed when the program ends or Termux stops. One UI draws the
windows app's icon on those cards; only an exported program's own app shows its own.install.sh, no root), X11 programs. Termux / proot distro / Flatpak Android
┌────────────────────────────────────┐ ┌──────────────────────────────────┐
│ Linux programs │ │ the program's own app (WebView) │
│ │ Wayland │ PulseAudio │ X11 │◀═ WebSocket on ═▶│ canvas, touch, keys, sound │
│ lindroids server + desktop portals │ loopback, │ file pickers, clipboard │
│ app_process helper (as Termux) ────┼── P-256 keys ───▶│ installer, notifications, theme │
└────────────────────────────────────┘ └──────────────────────────────────┘
lindroids server is a Wayland compositor and a PulseAudio server in one Rust binary; it
sends each window as a page on a loopback port, tile by tile, and takes back input.packaging/webview-app) under the program's
identity, filled in and signed on the phone by crates/lindroids-apk (no Android SDK, aapt or
Java there). Programs that are not exported open in a browser Custom Tab, or in the optional
shared app (lindroids app install).More: docs/ARCHITECTURE.md, docs/DISPLAY.md.
In Termux (from F-Droid, GitHub or Google Play):
curl -fsSL https://dixonsolutions.github.io/lindroids/install.sh | sh
install.sh adds the Lindroids repository to the package manager (Termux's APT or pacman;
Debian/Ubuntu, Arch, Fedora, openSUSE, Alpine, Void in proot distros and on desktops), so the
usual upgrade keeps it current, and offers to set up Flatpak. Details:
docs/INSTALL.md.
The first lindroids export asks Android once to allow installs: from Termux (F-Droid/GitHub
Termux), or from the file manager (Google Play Termux, which may not install apps itself).
Google Play Protect may then ask to scan the new app; More details → Install without scanning
keeps it on the phone.
lindroids run <command> [args] # a program in a window of its own
lindroids run org.gnome.TextEditor # a Flatpak
lindroids run --prootdistro=debian gedit # from a proot-distro distro
lindroids export <command> [args] # an app of its own (again: updates it)
lindroids list | launch <id> | remove <id>
lindroids open --linux <file> # a file in a Linux program; `open <file|URL>` in Android
lindroids notify <title> [body] # an Android notification
lindroids status | doctor | stop | version
lindroids config browser chooses what an export becomes: app (the default, its own app),
webapk (an app made by Chrome or Samsung Internet, docs/WEBAPK.md),
home-screen (a Termux shortcut) or a browser.
On a Samsung Galaxy Tab Active5 (Android 16, Termux from Google Play): building, installing and updating VSCodium's app, starting it from its icon with Termux closed, one window in Recents with VSCodium's icon (docs/APPS.md). On Android 13 lab VMs: Calculator, Text Editor, Mousepad, foot, Xournal++, X11 programs, home screen icons after a reboot, Open with, the file picker, notifications, theme (docs/TESTING.md, lab/CHECKLIST.md).
cargo test --workspace
scripts/build-release.sh # CLIs for 8 targets and every package → dist/
packaging/build-app-template.sh # after changing packaging/webview-app (needs the SDK)
Needs Rust with the Android and musl targets, cargo-ndk and NDK 27:
docs/PACKAGING.md.
MIT or Apache-2.0, at your option. Packages also ship xwayland-satellite (MPL-2.0): third_party/README.md.