Skip to content

Device management

The ADB page in the operator dashboard reconciles your configured fleet (stored in db/state/wos.db) with whatever adb devices is currently reporting on the host. It picks the fastest viable capture/input backend per device automatically and gives you one-click controls to fix the rare cases when it can’t.

ADB device management page
  • Configured vs live — two side-by-side tables: what you’ve declared in the SQLite devices table (configured) and what adb devices is reporting right now (live). Mismatches are obvious at a glance.
  • Auto-picked capture backend per device. Physical phones default to scrcpy. Emulators default to quartz (a software path that doesn’t need /dev/uinput). Override per device by setting capture_backend: scrcpy | quartz | adb | auto in the devices table.
  • Auto-picked input backend per device. adb input is the universal-compatibility default (~50–80 ms/tap). mintouch is the fast path (~5–20 ms/tap) but needs /dev/uinput access (rooted devices or accessible emulators). Opt in with input_backend: mintouch in the devices table.
  • Live binary status. For each connected device, the page shows whether scrcpy-server and mintouch are installed, with the actual architecture (e.g. arm64-v8a · android-33).
  • One-click recovery. Per-device action buttons:
    • Reinstall scrcpy — push scrcpy-server.jar onto the device.
    • Reinstall mintouch — same for the input binary.
    • Reset screen — clear any wm size / wm density overrides the bot might have applied during a failed run (a common cause of “everything’s drifted by 8 pixels” mysteries).
  • Refresh scan — re-runs adb devices and the binary probes without restarting anything.
BackendLatencyRequires
adb input~50–80 ms/tapnothing — works everywhere
mintouch input~5–20 ms/tap/dev/uinput (rooted device or --allow-root emulator)
quartz capture~30–60 ms/framenothing — software path
scrcpy capturelive H.264 streamscrcpy-server jar installed on device (page handles install)

The defaults are chosen for safety (works-everywhere). Opt into the fast path when your emulator/device supports it and you need the extra throughput — e.g. when running many instances on one host.