A powerful Quickshell extension that integrates your phone tightly with your Linux desktop.
-
Install Dependencies (The Easy Way): This extension requires several system packages to work, such as KDE Connect for communication,
sshfsfor file browsing,scrcpyfor screen mirroring, anddroidcam-clifor webcam support.To install them, just open the Phone Link extension tab, and click the "Install Dependencies" tab/button at the very bottom of the page!
This will instantly launch an interactive setup wizard in Kitty that allows you to choose exactly which features you want to install. It will also seamlessly configure your Linux kernel modules (
v4l2loopbackandsnd_aloop) so your virtual webcam and mic work reliably on every startup.(If you'd rather run it manually from the terminal, simply execute
./install_dependencies.shin the extension's folder). -
Pairing Your Phone: Make sure the KDE Connect app is installed on your Android/iOS device. Open the extension on your desktop, select your phone, and click Pair. Accept the pairing request on your phone.
-
Reload Quickshell: Once dependencies are installed, you must reload Quickshell to see the changes. Simply press
Ctrl + Super + Ron your keyboard!
Most settings can be customized instantly directly from the Extension Manager UI.
For example, if you want a higher webcam resolution (e.g., 1080p instead of 720p):
- Open the Quickshell Installed Extensions page.
- Click the dropdown arrow on the Phone Link card.
- Use the Webcam Resolution selector to choose between
480p,720p, or1080p. The extension will automatically remember this choice the next time you connect your camera!
Additionally, other settings can be changed directly inside the Phone Link interface:
- Open the Phone-Link extension UI.
- Navigate to the Webcam (DroidCam) or Screen Mirroring (Scrcpy) view.
- Tweak the dropdowns to change options like FPS, or Camera Facing (front/back).
Both DroidCam and Scrcpy (Screen Mirroring) can work completely wirelessly over Wi-Fi without needing a USB cable.
- Open the DroidCam app on your phone. It will display a "Wi-Fi IP" on the main screen (e.g.,
192.168.1.10). - Open the Quickshell Installed Extensions page, click the dropdown for Phone Link, and set the Manual Wi-Fi IP field to the IP shown on your phone.
- Click connect! DroidCam natively runs on port
4747, so no other setup is needed.
droidcam.wireless.mp4
Scrcpy relies on Android's built-in ADB Wireless Debugging, which works differently than DroidCam.
- Ensure Developer Options are enabled on your Android phone.
- Go to your phone's Settings → Developer Options → Wireless debugging and toggle it ON.
- Important: Native wireless debugging randomizes its port every time it's turned on. Look for the "IP address & Port" section under Wireless Debugging on your phone (e.g.,
192.168.1.10:42139). - In the Quickshell Installed Extensions page, check the "Scrcpy: Use Wireless Debugging" box.
- In the same settings view, copy the specific 5-digit number (e.g.,
42139) from your phone into the "Scrcpy: Wireless Port" field. - Make sure your IP is also in the "Scrcpy: Wireless IP" field, and click the Scrcpy button!
scrcpy.wireless.debugging.mp4
(Note: If you have never paired your phone with your PC via Wireless Debugging before, you must first open a terminal and run adb pair 192.168.x.x:PORT using the pairing port and code provided in your phone's "Pair device with pairing code" menu).
Phone-Link acts as a bridge between a customized QML user interface (Quickshell) and native Linux command-line tools.
- DBus Integration: The core of the extension relies on KDE Connect's local background service (
kdeconnectd). A Python background script (scripts/kdeconnect/monitor.py) listens to KDE Connect's DBus events in real-time (like battery percentage, connection status, and notifications) and broadcasts them directly to the QML UI as JSON objects. - Commands & Execution: Actions inside the extension execute raw shell commands natively (e.g., launching
scrcpyto mirror your screen ordroidcam-clito mount a webcam). We useqdbuscross-platform abstractions to securely invoke KDE Connect methods, such as mounting the phone's SFTP storage. - Reactive UI: The interface is built using Qt/QML. It uses
ExtensionServices.loadedbinding proxies to instantly update its states whenever the background services detect an event (e.g., hiding buttons if your phone disconnects from the Wi-Fi).
Special thanks to P3drovfx for providing the underlying functionality and inspiration for this project!