Automatically keeps wireless ADB debugging enabled on Meta Quest devices — no root required.
Security notice: Wireless ADB provides full shell access to the device. Only use this on isolated, trusted networks. Never expose port 5555 to the internet or untrusted networks.
- On boot:
BootReceivercatchesBOOT_COMPLETED/LOCKED_BOOT_COMPLETEDand starts the service immediately, including during encrypted boot. - Settings observer: Watches the
adb_wifi_enabledglobal setting. Any change to0is immediately reversed. - Network callback: Re-enforces ADB on every WiFi connection and validation event (covers network changes and reconnects).
- Periodic watchdog: Fallback check every 60 seconds in case the above hooks are missed.
- Debounce: A 500 ms guard prevents rapid-fire re-triggering.
- VrUsb popup (Meta Quest): The accessibility service detects the "VrUsb" trust dialog by window title and sends TAB × 3 + ENTER to accept "Always allow", fully automatically.
- Meta Quest (tested on Meta Quest 3, and on several firmware versions)
WRITE_SECURE_SETTINGSpermission granted once via ADB from a PC (see Setup)- Accessibility service enabled on the headset
git clone https://github.com/your-org/adb-auto-enable.git
cd adb-auto-enable
./gradlew assembleRelease
adb install app/build/outputs/apk/release/app-release.apkOr download a pre-built APK from Releases.
This permission cannot be granted from within the app. Connect via USB and run:
adb shell pm grant eu.project_simple.adbautoenable android.permission.WRITE_SECURE_SETTINGSOn the headset:
- Settings → Accessibility
- Find ADB Auto-Enable and enable it
- Accept the confirmation prompt
The service is also enabled programmatically at startup, but manual activation ensures it survives reboots cleanly.
Open ADB Auto-Enable once (after installing) to start the foreground service. After that it starts automatically on every boot.
app/src/main/
├── java/eu/project_simple/adbautoenable/
│ ├── MainActivity.java # Starts AdbConfigService, then exits
│ ├── AdbConfigService.java # Foreground watchdog service
│ ├── BootReceiver.java # Boot broadcast receiver
│ └── AdbPopupAccessibilityService.java # Meta Quest VrUsb popup handler
├── AndroidManifest.xml
└── res/
├── xml/adb_popup_accessibility_config.xml
└── values/strings.xml
Check permission status:
adb shell dumpsys package eu.project_simple.adbautoenable | grep WRITE_SECURE_SETTINGSExpected: android.permission.WRITE_SECURE_SETTINGS: granted=true
Re-grant permission after reinstall:
adb shell pm grant eu.project_simple.adbautoenable android.permission.WRITE_SECURE_SETTINGSForce-restart the service:
adb shell am force-stop eu.project_simple.adbautoenable
adb shell am start -n eu.project_simple.adbautoenable/.MainActivityView live logs:
adb logcat -s ADBAutoEnable ADBAutoEnable.A11yReset permissions if stuck:
adb shell cmd appops reset eu.project_simple.adbautoenable
adb shell pm grant eu.project_simple.adbautoenable android.permission.WRITE_SECURE_SETTINGSForked from mouldybread/adb-auto-enable.