I had a stack of old iPads collecting dust. Some had cracked screens, some were too old to install modern apps, and none of them were useful enough to sell. The hardware was fine, but the software support had ended, and turning them into a Home Assistant dashboard over VNC (Virtual Network Computing, a remote-desktop protocol that lets you view and control one computer’s desktop from another) had the kind of lag that makes “always-on” feel like “occasionally-on, after a delay.”
The fix turned out to be ripping the display panel out of one of them, hooking that panel up to a cheap display controller, and driving the panel directly from a Raspberry Pi over HDMI. No desktop, no browser, no VNC server. The Pi writes to the Linux framebuffer (the chunk of memory the kernel uses to represent what appears on the screen, which user programs can write to directly without going through a windowing system), and the display shows whatever the Pi tells it to show. The cracked iPad becomes a portrait-oriented picture frame that runs a live video doorbell feed.
The total cost is about $40 for the controller board, plus whatever you already have lying around for the Pi and the iPad you are cannibalizing.
Pulling the panel out
The first step is the part that sounds scary but is not. iPads have a glass cover over the LCD panel, and on most models the two come apart with a heat gun, some plastic spudgers, and patience. The cracked-screen iPad was actually easier because the glass was already lifting in places. There are teardown guides for almost every iPad model on ifixit.com, and the relevant detail is which LCD panel pinout (the mapping between physical connector pins and the electrical signals they carry) you are working with so you buy the right controller board.
You need a display controller that matches the panel’s LVDS (Low-Voltage Differential Signaling, the interface standard most laptop and tablet LCD panels use to carry the pixel data from a controller to the panel itself) pinout and resolution. The boards I used cost between $25 and $50 depending on the iPad generation, and they accept standard HDMI input. Search eBay or AliExpress for “iPad [model number] LCD controller HDMI” and you will find the right part within a few listings. Read the seller’s compatibility table carefully; the wrong controller will light up the panel at the wrong resolution or not at all.
The physical assembly is straightforward once you have the panel free: connect the controller to the panel’s ribbon cable, connect the controller to the Pi over HDMI, and power both. On my setup the controller takes 12V and the Pi takes 5V, so I run them off separate supplies. If you want a single supply, the controller boards often have a 5V output that can power the Pi, which simplifies the wiring to one barrel jack.
Driving the display from the Pi
Once the panel lights up and shows the Pi’s desktop, you can stop using a desktop entirely. The cleanest setup is to disable the Pi’s window manager and write directly to the framebuffer. That gives you a single program that controls every pixel on the screen, no chrome, no taskbar, no wasted resources.
For static images, the ffmpeg one-liner is enough:
ffmpeg -i input.png -vf "rotate=PI/2,scale=1080:1920" -f fbdev /dev/fb0
The rotate=PI/2 rotates the image 90 degrees so portrait orientation works on a panel that defaults to landscape. The fbdev (framebuffer device) output target writes the result straight to /dev/fb0, which is the Linux framebuffer for the primary display. No X server, no Wayland, no compositor.
For the video doorbell, the command is the same pattern with a stream URL instead of an image:
ffmpeg -i "rtsp://homeassistant.local:8554/doorbell" \
-vf "rotate=PI/2,scale=1080:1920,crop=1080:1080:0:420" \
-f fbdev /dev/fb0
The crop filter handles the aspect ratio mismatch. My Reolink doorbell outputs 4:3 video (the standard ratio for most doorbell cameras), but the iPad panel is taller than it is wide in portrait orientation. The crop pulls the central 1080×1080 square out of the rotated image, which keeps the most useful part of the frame (the person at the door) visible without stretching or letterboxing.
The full pipeline runs as a systemd service on the Pi, which means it starts on boot, restarts on crash, and survives power outages without manual intervention.
Adding automation
A live feed running 24/7 is more video than you actually need. The doorbell only matters when something is happening at the door. Home Assistant’s motion detection (using the doorbell’s built-in motion events) drives a simple automation that turns the feed on when motion is detected and turns it off after 30 seconds of no motion.
The result is a display that shows whatever you want most of the time (I have it cycling through movie posters from my Jellyfin server and a weekly trash-day reminder) and switches to the live doorbell feed the moment the doorbell sees anything moving. The transition is a single ffmpeg process restart, which takes about half a second.
The display controller I used supports an HDMI “blank” signal that turns off the backlight, which lets the automation put the screen to sleep at night. Without that, the panel would run at full brightness 24 hours a day, which is wasteful and would shorten the panel’s lifespan. The blank signal is a separate GPIO (General Purpose Input/Output, a generic pin on the Pi’s header that you can read or set high or low in software) on the Pi, driven by a second automation in Home Assistant.
Trade-offs
Build cost is small, but it is not zero. The controller board is around $40, the Pi is whatever you have on hand (a Pi 4 or Pi 5 has plenty of headroom for ffmpeg at 1080p; a Pi 3 will struggle), and the iPad is one you were not using anyway. There is no recurring cost and no subscription.
Build time is real. Pulling the panel out cleanly takes an hour or two the first time, and you need a clean workspace with good lighting. If you have never opened a tablet before, budget a full evening for the first one. Subsequent builds are faster because the teardown is the slow part, not the wiring.
Display quality is the panel’s native quality. My iPad 2 panel is dimmer and has worse viewing angles than a modern external monitor. It works fine as a picture-frame display that you glance at across the room. It would not work as a primary monitor.
Pi failure is the single point of failure. If the Pi crashes, the display goes black. The systemd service restarts on crash, but the 30-second downtime during a restart is visible. For a security application, that is a meaningful gap. For a movie-poster display, it does not matter.
Framebuffer-only means you give up everything a real desktop gives you. There is no way to click on a button or type into a form. The display shows what the Pi tells it to show, period. For the doorbell-and-movie-poster use case, that is exactly what you want. For a general-purpose smart-home dashboard, you want a different setup.
What I would tell past me
- Buy the controller board first. The teardown is the slow part. If you pull the panel and then wait two weeks for the controller to ship, you have a cracked iPad sitting on your desk for no reason.
- ffmpeg to /dev/fb0 is the right path. I spent an hour trying to make X11 work in portrait orientation before realizing the framebuffer approach was simpler and gave up nothing for my use case.
- Plan for the Pi’s failure mode. A systemd service that auto-restarts is the minimum. A spare Pi with the SD card cloned is the next step up if you cannot tolerate 30 seconds of downtime.
- The crop filter matters more than you think. A 4:3 video on a portrait display looks wrong without it. Center-crop on the action region (the door, the path) and the rest of the pipeline falls into place.