Linux Desktop

Linux Sidecar

A step-by-step guide to replicating Apple's Sidecar experience on Arch Linux with KDE Plasma and Deskreen. No extra hardware required, and no proprietary ecosystem lock-in.

📅 March 2026 ⏱ 8 min read 💻 Technology

Sidecar is one of those Apple features that makes the rest of the industry look slow. Pull out an iPad, tap a button, and it becomes a second monitor for your Mac, wirelessly, with barely any setup. It is genuinely useful, and it is also completely absent if your desktop runs Linux.

This guide walks through building the same experience on Arch Linux using KDE Plasma. The approach uses two pieces of free software already available in most package repositories: krfb-virtualmonitor, which creates a headless display, and Deskreen, which streams that display to any device with a modern browser over WebRTC. No HDMI dongles, no vendor lock-in, and it works with any tablet, not just an iPad.

💡 What You Need
An Arch Linux machine running KDE Plasma, the kdenetwork-filesharing / desktop sharing package for krfb-virtualmonitor, the Deskreen AppImage, and a tablet on the same local network with a modern browser. No physical adapters required.

Step 1: Open the Firewall

Deskreen serves its web interface on port 3131 and negotiates the actual video stream over WebRTC, which needs a range of UDP ports for the peer connection. If your firewall blocks these, the tablet will load the connection page but never receive a picture.

If you run UFW, allow the web interface port:

sudo ufw allow 3131/tcp

If you run firewalld instead, open both the web port and the WebRTC UDP range:

sudo firewall-cmd --permanent --add-port=3131/tcp
sudo firewall-cmd --permanent --add-port=10000-65535/udp
sudo firewall-cmd --reload
⚠️ Only Open This on Trusted Networks
These rules expose a screen-sharing service to your local network. That is fine on a home LAN you control, but avoid leaving these ports open on a machine connected to a public or untrusted network.

Step 2: Set Up a Virtual Monitor

The obvious way to add a second screen is a physical HDMI dummy plug or an actual adapter. Both cost money and clutter your desk for something that should be pure software. KDE Plasma already ships a better option: krfb-virtualmonitor, part of the KDE desktop sharing package. It creates a headless virtual display that KDE treats exactly like a real monitor, at zero hardware cost.

A basic invocation looks like this:

krfb-virtualmonitor --resolution 2732x2048 --name sidecar --password abc123 --port 5900

This creates a virtual display named sidecar, sized to match an iPad Pro's native resolution, and serves it as a VNC source on port 5900 protected by the password you set.

Addressing the "Retina Trap"

Matching your tablet's native resolution feels like the right move, but it is a trap. Pushing a full Retina-class resolution through WebRTC means encoding significantly more pixels every frame, which increases CPU load on the sending machine and adds visible latency to the stream. The picture looks sharp, but the experience feels laggy, and lag is what makes a second screen feel unusable.

In practice, a lower resolution looks perfectly sharp on a tablet held at a normal viewing distance and streams far more smoothly:

krfb-virtualmonitor --resolution 1920x1250 --name sidecar --password abc123 --port 5900

1920x1250 keeps the aspect ratio close to an iPad's screen while staying light enough for WebRTC to encode in real time without introducing noticeable delay. Treat the native resolution as a last resort, not a default.

Step 3: Run Deskreen

With the virtual monitor running, you need something to turn that VNC feed into a stream your tablet's browser can actually display. Deskreen does exactly this. The pipeline works in three hops:

Deskreen ships as an AppImage, which is the simplest way to run it on Arch without pulling in extra packaging:

chmod +x deskreen-ce-xxxxxxx.AppImage
./deskreen-ce-xxxxxxx.AppImage

Replace the filename with whatever version you downloaded. Once it launches, Deskreen will detect the running virtual monitor as an available source to share.

Step 4: Connect With Your Tablet

Once Deskreen is running and pointed at the virtual monitor, it displays a QR code and a local network URL on your desktop. Open your tablet's camera or QR scanner, point it at the code, and it will take you straight to the connection page in your browser. Alternatively, just type the local URL directly into the tablet's browser address bar.

Accept the connection prompt on the desktop side, and the virtual monitor's contents will start streaming to the tablet within a second or two. Drag windows onto the sidecar display in KDE's display settings the same way you would with a real second monitor, and they will appear on the tablet.

Convenience Script

Typing the full command with resolution, name, password, and port every time gets old fast. Add a pair of shell aliases to your .bashrc or .zshrc so the whole setup is a single word away:

alias sidecar-start='krfb-virtualmonitor --resolution 1920x1250 --name sidecar --password abc123 --port 5900'
alias sidecar-stop='pkill krfb-virtualmonitor && kscreen-doctor output.sidecar.disable'

Run sidecar-start to bring up the virtual monitor, launch Deskreen, and connect from your tablet. Run sidecar-stop when you are done to tear the virtual display down cleanly rather than leaving a stale monitor entry behind.

Troubleshooting

Black Screen on the Tablet

If the connection succeeds but the tablet shows a black rectangle instead of your desktop, the cause is almost always codec negotiation. iPadOS's WebKit engine is particular about which video codecs it will decode over WebRTC. Two things usually fix it:

Virtual Monitor Disappearing

Occasionally the virtual monitor entry vanishes from KDE's display configuration, usually after a suspend/resume cycle or a Plasma restart. A quick alias re-establishes it along with Deskreen in one shot:

alias secondscreen='krfb-virtualmonitor --resolution 1920x1080 && deskreen'
📌 Keep the Password Out of Shell History
The examples above hardcode a placeholder password directly in the alias for clarity. In practice, read it from an environment variable or a local secrets file instead of committing a real password to your shell config or dotfiles repository.

A Note for GNOME and Windows Users

This entire workflow is built around krfb-virtualmonitor, which is a KDE Plasma tool. If you run GNOME instead, you do not need any of it: GNOME has a built-in screen extension feature that covers the same use case natively, without a virtual monitor or a separate streaming layer.

Windows users looking for equivalent functionality should look at SpaceDesk, which solves the same problem with a dedicated Windows driver and companion tablet app rather than a browser-based WebRTC stream.

Closing Remarks

None of this requires special hardware, a subscription, or a walled garden. It requires a firewall rule, a virtual display that ships with KDE, and a piece of open-source streaming software that treats your browser as the client. The result holds up well against Apple's version of the same idea, and it works with whatever tablet happens to be on your desk, not just one brand's.

One-Sentence Summary
Open port 3131 and the WebRTC UDP range, spin up a modestly-sized virtual monitor with krfb-virtualmonitor, stream it with Deskreen, and connect from any tablet's browser to get a Sidecar-style second screen on Linux for free.