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.
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.
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.
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
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.
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.
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:
krfb-virtualmonitor
creates the headless display buffer and exposes it as VNC on port 5900.
localhost:5900
as a VNC client and re-encodes what it sees as a WebRTC stream.
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.
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.
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.
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:
deskreen --disable-gpu
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'
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.
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.