Set up an always-on display

Turn an Android photo frame, an old tablet, a Raspberry Pi or a spare PC into an always-on Steadily.me display, on a wall or a desk, that boots straight into your habits and stays there.

Android photo frames and old tablets

Any Android 7.0 or newer device with OpenGL ES 3.0 graphics works, including the 10 to 15 inch digital photo frames that run Android, retired tablets and Fire tablets. You need the sideload APK from the download page, not the Play Store build: only the APK registers as a home app, which is what lets the device boot straight into Steadily.me. These steps were tested on a Frameo-based 15 inch frame running Android 8.1.

Install adb on your computer first: on a Mac, brew install android-platform-tools; on Windows and Linux, download the Android SDK platform tools from developer.android.com and unzip them anywhere.

  1. Turn on ADB on the device.

    On a Frameo frame (the software most Android photo frames ship with): open the frame's Settings, go to About, and turn on Beta Program. An ADB Access switch appears in the same About section once you are in the beta; turn that on too. Some frames ship with ADB Access already showing, so look for the switch before joining the beta.

    On a stock Android tablet: Settings → About → tap Build number seven times, then Settings → Developer options → USB debugging.

  2. Connect from your computer.

    Use the frame's USB-C or micro USB port; a USB-A port on a frame is for thumb drives and cannot talk to a computer. A USB-A to USB-C cable on the computer side is the safer choice: some frames never negotiate over a USB-C to USB-C cable and simply don't show up. Accept the "Allow USB debugging" prompt on the frame's screen, ticking "Always allow from this computer".

    adb devices

    If the frame isn't listed, turn ADB Access off and on again and replug the cable, which brings the prompt back. On some Frameo frames the port only comes alive after turning on USB transfers (Settings → Manage photos → Transfer from computer).

  3. Install the APK.

    adb install -r Steadily-me.apk

    -r keeps the app's data if it is already installed. If the streamed install stalls, copying the file over first is more reliable:

    If the install stalls
    adb push Steadily-me.apk /data/local/tmp/
    adb shell pm install -r /data/local/tmp/Steadily-me.apk
  4. Open it once and sign in.

    Launch Steadily.me from the app drawer, sign in, and set your schedule under Settings → Day & night and updates under Settings → Updates. The app stays on unless you tell it to sleep.

  5. Make it the home app.

    This is what makes the device boot into Steadily.me instead of its own launcher. On Android 8 or newer, set it from your computer:

    adb shell cmd package set-home-activity com.realitymoss.steadily/com.godot.game.GodotAppLauncher

    Without adb, or on Android 7: press the device's Home button, pick Steadily.me from the "Select a Home app" list and tap Always.

  6. Going back.

    To return the device to its original launcher, list the home apps it knows and pick the other one:

    adb shell cmd package query-activities -a android.intent.action.MAIN -c android.intent.category.HOME
    adb shell cmd package set-home-activity <package>/<activity>

    Or press Home and choose the other app with Always. Uninstalling Steadily.me also hands home back.

New releases reach the frame on their own: the app downloads small overnight updates, so you rarely need adb again after the first install.

Linux and Raspberry Pi

A Raspberry Pi 4 or 5 running the 64-bit Raspberry Pi OS (Bullseye or newer), or any 64-bit distro with glibc 2.31 or newer and OpenGL 3.3 or OpenGL ES 3.0 graphics. Use the Linux (ARM) zip for a Pi and the Linux zip for an Intel or AMD machine; the file names below are the Pi's.

  1. Unpack it.

    mkdir -p ~/steadily
    unzip Steadily-me-linux-arm64.zip -d ~/steadily
    chmod +x ~/steadily/Steadily-me.arm64

    Keep Steadily-me.pck next to the binary; the app is the pair of them. On x86_64 the binary is Steadily-me.x86_64.

  2. Run it once and sign in.

    ~/steadily/Steadily-me.arm64

    It opens fullscreen. Steadily.me uses X11; on Raspberry Pi OS's Wayland desktop it runs under XWayland automatically, nothing to configure. Touchscreens work as they are.

  3. Log the Pi in automatically.

    On Raspberry Pi OS: sudo raspi-config → System Options → Boot / Auto Login → Desktop Autologin. Other distros have the same switch in their display manager (GNOME: Settings → Users → Automatic Login).

  4. Start Steadily.me at login.

    The easy way is in the app: Settings → Appearance → "Start automatically at login". It writes a standard autostart entry, which you can also create by hand (replace /home/pi with your home directory):

    ~/.config/autostart/steadily.desktop
    [Desktop Entry]
    Type=Application
    Name=Steadily.me
    Comment=Habit wall painting
    Exec="/home/pi/steadily/Steadily-me.arm64"
    X-GNOME-Autostart-enabled=true

    If your desktop ignores autostart entries (Raspberry Pi OS with the labwc compositor), start it from the compositor's own autostart file instead:

    mkdir -p ~/.config/labwc
    echo '/home/pi/steadily/Steadily-me.arm64 &' >> ~/.config/labwc/autostart

    A dedicated kiosk user, a systemd user service, or your distro's session autostart all work too: whatever runs after the desktop is up, run the binary from it.

  5. Let it turn the screen off at night.

    Steadily.me switches the panel off with whichever tool is installed: wlopm on Wayland desktops (labwc, Wayfire), xset on X11, or brightnessctl. The "Screen off" choice under Settings → Day & night → Sleep overnight only appears when one of them exists; if it is missing, install one and restart the app:

    sudo apt install wlopm            # Wayland desktops
    sudo apt install x11-xserver-utils # X11 desktops (provides xset)

    Use "Test (off for 3 seconds)" on the same settings row to confirm the panel actually goes dark and comes back.

  6. Signing in with Google or Apple on a stripped-down image.

    Sign-in opens your browser. A kiosk image with no desktop browser can point the app at one by exporting BROWSER=chromium (or whatever is installed) in the script that starts it. Email and password sign-in needs no browser at all.

Windows PCs and tablets

Windows 10 or 11 on x64, with any graphics from roughly 2010 onward. An old Surface or a cheap mini PC behind a monitor both make good displays.

  1. Unzip it.

    Put Steadily-me.exe and Steadily-me.pck together in a folder that stays put, for example C:\Steadily. The paths below assume that folder.

  2. Run it once.

    The download is not code-signed, so the first launch shows SmartScreen's "Windows protected your PC" screen: click More info, then Run anyway. Sign in and set your schedule under Settings → Day & night.

  3. Sign in to Windows automatically.

    Press Win+R, run netplwiz, select your account and untick "Users must enter a user name and password to use this computer". On Windows 11 with Windows Hello, first turn off "For improved security, only allow Windows Hello sign-in" under Settings → Accounts → Sign-in options, or netplwiz hides the checkbox.

  4. Start Steadily.me at login.

    In the app: Settings → Appearance → "Start automatically at login". It registers a Run entry for your account, the same one this command creates:

    reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v Steadily.me /t REG_SZ /d "C:\Steadily\Steadily-me.exe" /f

    Also stop Windows from sleeping the PC on its own: Settings → System → Power, set "Put my device to sleep" to Never, and let Steadily.me manage the screen instead.

  5. Make it the shell (the launcher equivalent).

    Windows can start Steadily.me instead of the desktop for one account. The taskbar and Start menu don't load for that account; Steadily.me is all there is, which is exactly right for a display:

    reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /t REG_SZ /d "C:\Steadily\Steadily-me.exe" /f

    To get the desktop back for a moment, press Ctrl+Alt+Del, open Task Manager, and runexplorer.exe as a new task. To undo it for good:

    reg delete "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /f

    On Windows Enterprise, Education and IoT editions, Shell Launcher (Settings → Accounts → Other users → Set up a kiosk, or the Shell Launcher policy) is the supported way to do the same, and survives Windows updates more gracefully.

macOS

Unzip Steadily.me.app and move it to Applications. The app is signed but not notarized, so the first time, right-click it and choose Open, then Open again in the dialog; after that it opens normally. Settings → Appearance → "Start automatically at login" registers a launch agent (~/Library/LaunchAgents/me.steadily.app.plist) so it comes back after a restart. Pair it with automatic login under System Settings → Users & Groups, and let Steadily.me sleep the display on its own schedule.

Stuck on a device this page doesn't cover? Write to [email protected] and we'll work it out together. Or head back to the downloads