Skip to content

Device Control

thejaustin edited this page Sep 19, 2026 · 1 revision

Device Control

Device Control is a Shizuku+ screen that turns the privileged service into a rootless remote for the parts of Android that normally sit behind Settings, svc, or system-only permissions. Because the service runs at shell UID (2000) with WRITE_SETTINGS/WRITE_SECURE_SETTINGS, it can flip connectivity radios, change display/audio state, and even reboot — no root or ADB session required once Shizuku+ is running.

Open it from the Shizuku+ home screen under Device Control. Developers can drive the same operations through the IDeviceControlPlus API (see the Plus APIs repo).

What you can control

Connectivity

  • Airplane mode — toggles Settings.Global.airplane_mode_on and broadcasts ACTION_AIRPLANE_MODE_CHANGED, so radios actually respond.
  • Wi-Fi, Bluetooth, Mobile data, NFC — each driven through the framework svc command at shell privilege.
  • Private DNS — dropdown to set DNS mode off, opportunistic (automatic), or hostname (a specific DoT provider). Applied via NetworkGovernor.setPrivateDns.

Display

  • Adaptive/auto brightness toggle. When off, a brightness slider (0–255) sets a fixed level; enabling auto-brightness is disabled first so the manual value sticks.
  • Auto-rotate toggle.
  • Screen timeout — pick from 15s / 30s / 1m / 2m / 5m / 10m / 30m.

Audio

  • Independent volume sliders for Media, Ring, and Alarm streams. Values are read from and written to the real AudioService (with a media volume command fallback), so they move the same levels the hardware keys do.

System appearance

  • Animations toggle — sets window / transition / animator scales together (1.0 on, 0.0 off).
  • Font scale slider — 0.70× to 2.00×, the same knob as Settings ▸ Display ▸ Font size, applied system-wide.

Power

  • Reboot and Shutdown buttons, each behind a confirmation dialog. Reboot supports targeted reasons (normal, recovery, bootloader, fastboot, edl, quiescent) at the API level.

How it works

Everything routes through the IDeviceControlPlus binder implemented by the privileged server:

  • Toggles that map to system settings use putSetting/getSetting across the system, secure, and global namespaces.
  • Radios and USB functions use the framework svc command (svc wifi, svc data, svc usb setFunctions, …).
  • Audio uses the IAudioService binder directly, falling back to media volume if the binder call is unavailable.
  • The screen reads current state on launch (settings values + stream volumes) so switches and sliders reflect reality.

Because it's all shell-level framework access, none of this needs root — but it also can't do things shell UID isn't allowed to (that's the same boundary described in the Permissions page).

Notes & caveats

  • Reboot reasons like edl or fastboot depend on the device/OEM honoring them; unsupported reasons fall back to a normal reboot or do nothing.
  • USB function switching (MTP, RNDIS/tether, MIDI, NCM, ADB, charging-only) is exposed by the API; on some OEM ROMs the USB HAL resets the function shortly after, which is a platform behavior, not a Shizuku+ limitation.
  • Setting Private DNS to hostname mode requires a valid DoT provider hostname; an invalid host will leave DNS unresolved just as it would in Settings.

Related

Clone this wiki locally