Raspberry Pi Screen Sharing Hotspot, perfect for accesing your raspberry pi whilst travelling.
Caution
This version is in very early alpha stages and may not work
Note
Some parts of this README talks about USB cables and v3. That is the old version (on the v3 branch)
Note
This code is COMPLETELY AI-Generated and is mainly for a proof of concept/testing purposes only.
Note
All devices using this version of the software have the same SSID except for the last 2 letters which are only randomised on setup. Aswell, the password is the same on all devices.
Note
To use a different network device (such as the Pi's inbuilt wlan0), you will have to modify the setup script to use your network device instead of wlan1 (an external adaptor).
Full iPad remote desktop over a dedicated hidden WiFi hotspot from a USB WiFi adapter. No USB cable required. Works like TeamViewer but self-hosted on your Pi.
iPad Safari ←── Hidden WiFi (wlan1) ──→ Raspberry Pi
live video · audio · touch · files · terminal
| Feature | v3 (USB) | v4 (WiFi) |
|---|---|---|
| Connection | USB-C cable | WiFi hotspot |
| Setup complexity | Medium | Low |
| Pi 5 quirks | Many | None |
| iPad distance | 1m max | ~10m |
| Multiple clients | No | Yes (up to 10) |
| Internet sharing | Via USB | Via NAT from eth0 |
| Clipboard sync | No | ✅ |
| Screen recording | No | ✅ |
| Process kill | No | ✅ |
| System controls | No | ✅ (reboot/shutdown/sleep) |
| Connected client list | No | ✅ |
| Pi model | Raspberry Pi 4 or 5 (also Zero 2 W) |
| OS | Raspberry Pi OS Bookworm (64-bit recommended) |
| WiFi adapter | USB WiFi dongle that supports AP mode |
| Tested adapters | Edimax EW-7811Un, TP-Link TL-WN823N, Alfa AWUS036ACS |
⚠️ AP mode required. Most USB WiFi dongles support it. You can check with:iw list | grep -A 10 "Supported interface modes" # Must show "AP" in the list
# 1. Plug in USB WiFi adapter
# 2. Clone / copy files to Pi
scp -r rpi-link-v4/ pi@raspberrypi.local:~/
# 3. Edit WiFi credentials (optional)
nano setup.sh
# Change: HOTSPOT_SSID, HOTSPOT_PASS, HOTSPOT_CHANNEL
# 4. Run setup
cd ~/rpi-link-v4
sudo bash setup.sh
# 5. Reboot
sudo rebootBecause the network is hidden, you must manually enter the network details:
- iPad → Settings → Wi-Fi
- Scroll down → Other…
- Name:
RPiLink(or whatever you set in setup.sh) - Security: WPA2
- Password:
raspberry123(or what you set) - Safari →
http://10.42.0.1orhttp://rpi.link
💡 After first connection, iPad will remember the hidden network and auto-connect.
- Live MJPEG stream (adjustable FPS, quality, resolution)
- Touch / Apple Pencil / mouse input injection
- Keyboard shortcuts + text input
- Right-click via stylus barrel button or long-press
- Double-tap = double click
- Scroll gesture
- Screenshot download
- Screen recording (saved as MP4 → download via Files tab)
- Live audio stream from Pi via WebSocket PCM
- Volume control slider
- Mute toggle
- Pull clipboard content from Pi to iPad
- Push text from iPad to Pi clipboard
- Full file browser (home, /tmp, /media, /mnt, recordings)
- Upload files from iPad to Pi
- Download files from Pi to iPad
- Create folders, delete files
- Recordings folder shortcut
- Command execution (sandboxed, dangerous commands blocked)
- Command history (arrow keys)
- Colour output
- Real-time CPU, RAM, temperature, disk
- Connected WiFi clients list
- Process list with kill button
- System controls: Reboot, Shutdown, Sleep
| Problem | Fix |
|---|---|
| iPad can't find network | Network is hidden — use Settings → Wi-Fi → Other… |
| hostapd fails to start | Check adapter supports AP mode: `iw list |
| Wrong interface detected | Edit WIFI_IFACE at top of setup.sh |
| Dashboard not loading | Check sudo systemctl status rpi-link |
| Stream black / frozen | Check sudo systemctl status rpi-link-xvfb |
| Audio not working | Run pulseaudio --check -v as your user |
# Diagnose
sudo systemctl status hostapd
sudo systemctl status rpi-link
sudo journalctl -u rpi-link -f
# Check hotspot interface
ip addr show wlan1 # should show 10.42.0.1
iw dev wlan1 info # should show type AP
# Check who's connected
cat /var/lib/misc/dnsmasq.leasesrpi-link-v4/
├── setup.sh ← one-time root setup
├── uninstall.sh ← clean removal
├── server.py ← Flask server (stream, input, files, stats)
├── static/
│ └── index.html ← full iPad UI
└── README.md
- The hotspot is hidden (SSID not broadcast) — adds obscurity
- WPA2 encryption protects the connection
- The dashboard has no authentication — anyone on the hotspot can control the Pi
- Consider changing the default password before deploying
- Terminal blocks the most dangerous commands but is not a full sandbox
- For added security, add HTTP Basic Auth to server.py (Flask-HTTPAuth)