Documentation · User manual · Glossary · Latest release
This guide uses the signed APK from GitHub Releases. APK means Android Package, the file installed on an Android device.
At the end, permanent root works, Debian 13 and systemd run from
/data/local/debian, the generated key logs in over TCP 22, and the same SSH
server remains available before and after first unlock.
- Android 7.0 / API 24 or newer
- File-Based Encryption (FBE)
armeabi-v7a,arm64-v8a, orx86_64- Magisk or a compatible
su, with permanent approval for DawnShell - Internet access and enough internal storage for Debian
- A ROM that restores a network connection before unlock if remote BFU access is required
See the glossary for every abbreviation and Google's Direct Boot guide for the platform requirements. ADB (Android Debug Bridge) is optional; see Google's ADB guide.
Resolve any existing TCP 22 conflict before setup. On vendor ROMs, exclude DawnShell from battery, sleep, and automatic-start restrictions.
Download the APK and SHA256SUMS from
DawnShell Releases. Download every
release asset when you want sha256sum -c to verify the whole set.
dawnshell-<version>.apk
SHA256SUMS
On Linux with every asset downloaded:
sha256sum -c SHA256SUMSWith only the APK and checksum file:
apk='dawnshell-0.3.1.apk'
grep " $apk\$" SHA256SUMS | sha256sum -c -On macOS with every asset and the built-in tools:
shasum -a 256 -c SHA256SUMSOn Windows PowerShell, compare the APK with its matching entry:
$apk = 'dawnshell-0.3.1.apk'
$actual = (Get-FileHash ".\$apk" -Algorithm SHA256).Hash.ToLowerInvariant()
$expected = ((Get-Content .\SHA256SUMS | Where-Object { $_ -match " $([regex]::Escape($apk))$" }) -split '\s+')[0]
$actual -eq $expectedChange the filename for the downloaded version. Do not install unless the final
PowerShell result is True and a matching entry was found. Ordinary workflow artifacts may be
debug-signed test builds; regular users should install a tagged Release APK.
See Google's app-signing guide.
Open the APK on the phone and temporarily allow that browser or file manager to install unknown apps. If ADB is already configured, this is equivalent:
adb install -r dawnshell-<version>.apkAn update normally needs the same signing key as the installed version.
Uninstalling DawnShell removes its DE/CE data and generated SSH client key, but
does not automatically remove /data/local/debian.
While Android is unlocked:
- Open DawnShell and tap Request / verify Magisk root permission.
- Confirm that the request is from package
me.aroxu.dawnshell. - Select Magisk's permanent or forever approval.
- Confirm
exit=0,root=true, anduid=0in the result.
BFU cannot display an approval prompt, so one-time approval is insufficient.
Recommended initial values:
- Enable the Direct Boot Debian bootstrap.
- Keep the BFU CE-readable override disabled.
- Select automatic cgroup v2-to-v1 fallback.
- Select safe host-network-only Docker mode.
- Keep the recommended Docker host-IPC compatibility switch enabled.
- Keep raw USB sharing off.
- Keep experimental hardware video acceleration off initially.
Tap the global Apply button. This stores non-secret settings and the ABI-specific runtime in Device Encrypted storage. Google explains why DE is available before unlock and CE is not in its Direct Boot storage guide.
- Tap Install Debian 13 Trixie rootfs and confirm.
- Open Logs → Debian installation.
- Wait for
SUCCEEDEDandINSTALL_SUCCEEDED.
The installer verifies Debian Release metadata and package hashes in a staging
tree, then publishes only a valid result to /data/local/debian. Preserve the
log if installation fails.
- Confirm that the generated Ed25519 public key is visible.
- Tap Configure Debian 13 systemd + SSH.
- Open Logs → System configuration.
- Wait for
SUCCEEDEDandCONFIGURE_SUCCEEDED. - Tap Status and confirm systemd, D-Bus, SSH, and TCP 22 are healthy.
The SSH account is debian. Password authentication and direct root login are
disabled; only the generated public key is accepted.
Use Export SSH private-key file for another computer:
chmod 600 dawnshell-ed25519
ssh -i ./dawnshell-ed25519 -p 22 debian@PHONE_IPFor a trusted local shell on the same phone, copy and run the local-shell key import command, then copy and run the SSH connect command. The import command contains the complete private key, so file export is safer.
Reboot without entering the PIN, pattern, or password. From another device:
ssh -i ./dawnshell-ed25519 -p 22 debian@PHONE_IPThen check:
id
cat /proc/1/comm
systemctl is-active ssh.service
ip addr
uptime/proc/1/comm should be systemd, and SSH should be active. Unlock Android
and confirm that the existing session and Debian PID 1 remain unchanged.
Verify the new Release, install an APK signed by the same key, open DawnShell after unlock, change any setting and use Apply if the bar appears. Back up the exported SSH private key before updates.