Run real Android apps and games from your phone/tablet as windows on your PC — no emulation.
dexwire is a thin, standalone CLI over scrcpy 4.0 that turns any connected Android device into a Samsung-DeX-style experience on Linux (built and tested on CachyOS / KDE Plasma 6 Wayland). Each app runs on the device's own hardware and appears as its own resizable desktop window on the PC, with audio and keyboard/mouse/gamepad input.
It's not an emulator and not a VM — the apps execute on real Android, dexwire just orchestrates scrcpy's virtual-display feature and adds the desktop glue (KDE launchers, games profile, wireless-adb auto-connect, killswitch integration).
scrcpy 4.0 already does the hard part (--new-display + --start-app + --gamepad + --flex-display).
What it lacks for a real "apps on my desktop" workflow is the glue: an app picker, per-app KDE
menu launchers, sensible desktop/games profiles, a resizable window that actually re-lays-out the
Android side, and one-command device handling. dexwire is that glue.
- Per-app windows —
dexwire launch <app>opens one Android app in its own PC window (scrcpy --new-display --start-app=+<pkg>), running on the device. - Truly resizable (DeX-style) — uses
--flex-display, so dragging the window resizes the Android virtual display and the app re-lays-out (not just scaling). Phone-only apps are made resizable viaforce_resizable_activities. - Games profile —
dexwire games <app>adds--gamepad=uhid, low-latency/perf flags, and a bigger bitrate for Android games with a real controller. - KDE menu integration —
dexwire export <app>writes a.desktoplauncher so the Android app shows up in your application menu (games land under the Games category). - App picker —
dexwire appslists installed apps (parsed fromscrcpy --list-apps). - Wireless or USB — auto-connects to a configured wireless-adb endpoint, falls back to a single USB device; fails fast and clearly when the device is unreachable (no silent fallbacks).
- killswitch-aware — registers with killswitch so the stream is paused (GPU encoder freed) while a PC game is running.
- Persistent config —
~/.config/dexwire/config.json(device, profiles, audio).
scrcpy4.0+ andadb(android-tools) inPATH- An Android device with USB or wireless debugging enabled
- (optional) KDE/any freedesktop menu for
export;killswitchfor the auto-pause integration
install -m755 dexwire ~/.local/bin/dexwire
dexwire config init # writes ~/.config/dexwire/config.json
dexwire config set-device auto # or 192.168.x.y:5555 for wireless adb
dexwire doctor # check scrcpy/adb/devicedexwire apps # list installed apps
dexwire launch "Firefox" # one app in its own desktop window
dexwire launch org.mozilla.firefox # by package id
dexwire desktop # a full Android desktop in a new display
dexwire games "Dead Cells" # games profile (gamepad + perf)
dexwire export "Dead Cells" --games # add a KDE menu launcher
dexwire export-all # menu launchers for every app
dexwire unexport --all # remove dexwire launchers
dexwire launch X --dry-run # print the scrcpy command without runningPass extra scrcpy flags after --extra:
dexwire launch X --extra --turn-screen-off --stay-awakeEdit ~/.config/dexwire/config.json. Defaults:
- desktop —
--new-display=1920x1080/240,--flex-display, free resize, audio on. - games —
--new-display=1920x1080/160,--gamepad=uhid,--max-fps=60,--video-bit-rate=20M,--flex-display.
python3 test_dexwire.pydexwire builds and runs:
scrcpy -s <device> --new-display=<WxH/dpi> --start-app=+<package> [--gamepad=uhid] --flex-display ...
The --new-display recipe and the --list-apps parser are adapted from escrcpy
(desktop/electron/middleware/scrcpy/{index.js,helper.js}); scrcpy itself is the engine.
dexwire stands entirely on these projects:
- scrcpy (Genymobile, Apache-2.0) — the display/audio/input engine.
- escrcpy (viarotel-org, Apache-2.0) — the per-app
virtual-display launch recipe and
--list-appsparser were adapted from it. - Android-Dex (Shrey113) — UX inspiration (per-app audio, multi-app desktop); no code used.
See NOTICE.
Apache-2.0. See LICENSE.