I wanted a digital photo frame with no cloud dependency — a kiosk device that displays photos directly from my Immich server. I bought a Frameo digital photo frame, which is known to support ADB. I installed the Fully Kiosk Browser and used it to display the Immich Kiosk web interface.
Install ADB tools on NixOS
nix-shell -p android-tools
Enable ADB on the Frameo Device
Navigate to: Settings → About → Enable Beta Program
This unlocks developer options and enables ADB access over the network.
Connect via TCP
USB didn't work on my device, so I connected via TCP instead.
adb connect <ip>:5555
Make ADB Persistent Across Reboots
Set the USB config to keep ADB enabled:
adb shell "setprop persist.sys.usb.config adb"
Also ensure ADB and developer settings stay enabled after a reboot:
adb shell "settings put global adb_enabled 1"
adb shell "settings put global development_settings_enabled 1"
Verify it worked:
adb shell getprop persist.sys.usb.config
Expected output: adb
Test after reboot
adb reboot
Note: My device gets a new IP address after every reboot, so reconnecting is necessary. I found no way to prevent this — there is no static IP option in the Android settings. Oddly, this behavior is typically associated with Android 11's MAC address randomization, but my device runs Android 6. Regardless, just reconnect with the new IP:
adb connect <new-ip-address>:5555
Install Fully Kiosk Browser
Android 6 and MQTT: If you're on Android 6 or lower and need MQTT support, install version 1.49.1 — the last release to support MQTT on Android 6.
Download: https://www.fully-kiosk.com/files/2022/10/Fully-Kiosk-Browser-v1.49.1.apk
adb install /path/to/Fully-Kiosk-Browser-v1.49.1.apk
Launch Fully Kiosk Browser:
adb shell am start -n de.ozerov.fully/.MainActivity
Enable the Action Bar
Since my device has no hardware buttons, I enabled the action bar to navigate within the app:
Settings → Toolbars and Appearance → Show Action Bar in Settings → Enable
(Scroll to the bottom — there are several similar-looking options.)
After saving, restart Fully Kiosk Browser. You can do this via ADB:
# Press back twice inside an adb shell session:
adb shell
input keyevent KEYCODE_BACK
input keyevent KEYCODE_BACK
# Or simply reboot the device:
adb shell reboot
Enable Launch on Boot
Settings → Device Management → Launch on Boot → Enable
I did not disable the Frameo app. This means that if Fully Kiosk Browser exits, the Frameo app will take over automatically — useful as a fallback.
Other Useful ADB Commands
adb disconnect
adb shell
adb shell su
adb shell input keyevent KEYCODE_BACK
adb shell pm disable net.frameo.frame
adb shell pm enable net.frameo.frame
adb shell am start -n com.android.settings/.Settings
adb shell am start -n de.ozerov.fully/.MainActivity
adb shell pm uninstall de.ozerov.fully