A simple, robust teleprompter system built on Raspberry Pi 3 that automatically launches PDF files from USB drives using the Zathura PDF viewer. Designed for reliable operation with hot-pluggable USB drives and foot pedal/numpad controls, essentially as a better alternative to using an iPad on stage for song lyrics. It is built for reliable use during live performances.
- Hot-pluggable USB drives: Simply insert a USB drive with a PDF to start reading
- Automatic PDF detection: Finds and opens the first PDF file on any inserted USB drive
- Custom configurations: Support for per-drive Zathura configuration files
- Portrait mode display: Automatically rotates screen to 1280x720 portrait orientation
- Read-only filesystem: Uses overlayroot for reliability - safe to power off anytime
- Foot pedal support: Configured for foot pedal and numpad navigation controls
- Automatic cleanup: Kills PDF viewer when USB drive is removed
- Raspberry Pi 3 (or newer)
- MicroSD card (16GB+ recommended)
- HDMI display
- USB flash drives for content delivery
- Optional: USB foot pedal for hands-free operation
- Raspbian Debian 12 (bookworm)
- Wayland compositor (for wlr-randr)
- Zathura PDF viewer
- xdotool for window management
- Flash Raspbian to your SD card
- Clone this repository to
/home/pi/ - Run the setup script:
./setup/install.sh - Reboot the system
- Insert a USB drive with a PDF file in the root directory
Raspberry Pi Imager.app was used to get the Raspberry Pi OS (64-bit), which is a port of Debian Bookworm with the Raspberry Pi Desktop, onto an SD card. An 8GB SD card was not large enough, the minimum might be 16GB (what I tested with was 128GB).
# Update system
sudo apt update && sudo apt upgrade -y
# Install required packages
sudo apt install zathura xdotool wlr-randr overlayroot -ycd /home/pi
git clone https://github.com/yourusername/raspberry-pi-teleprompter.git
cd raspberry-pi-teleprompter
chmod +x setup/install.sh
./setup/install.shsudo raspi-config
# Navigate to Advanced Options → Overlay File System → Enable- Power on the Raspberry Pi
- Insert USB drive containing PDF files
- PDF automatically opens in Zathura
- Navigate using foot pedal or numpad
- Remove USB drive to close PDF and return to standby
Your USB drive should contain:
- PDF files: Place any PDF in the root directory (first one found will be opened)
- zathurarc (optional): Custom Zathura configuration for this specific drive
/media/pi/YOUR_DRIVE/
├── my-lyrics-for-the-show.pdf
└── zathurarc (optional)
See the zathura documentation for details on how to configure this. Note: The manpage for zathurarc is not as detailed as what is available on the website at https://pwmt.org/projects/zathura/documentation/
Create a zathurarc file on your USB drive to customize:
- Colors and themes
- Key bindings
- Display settings
Example zathurarc:
set default-bg "#000000"
set default-fg "#FFFFFF"
set recolor true
set recolor-lightcolor "#000000"
set recolor-darkcolor "#FFFFFF"
# Foot pedal mappings
map <space> navigate next
map <BackSpace> navigate previous
map <Right> navigate next
map <Left> navigate previous
scripts/: Core monitoring and PDF launch scriptsautostart/: Desktop entry files for automatic startupconfig/: Default configuration filesdocs/: Additional documentationsetup/: Installation and setup scripts
zathura-autostart.sh: Monitors for USB drive insertion and launches PDF viewerzathura-usb-monitor.sh: Monitors for USB drive removal and closes PDF viewer
rotate-display.desktop: Rotates display to portrait mode, sets resolutionzathura-autostart.desktop: Starts the PDF autostart monitorzathura-usb-monitor.desktop: Starts the USB removal monitor
Default key bindings for PDF navigation:
- Space/Right Arrow: Next page
- Backspace/Left Arrow: Previous page
- Home: First page
- End: Last page
- +: Zoom in
- -: Zoom out
- q: Quit (or remove USB drive)
- Ensure PDF is in the root directory of the USB drive
- Check that the file has a
.pdfextension (case-insensitive) - Verify the USB drive is properly mounted under
/media/pi/
- Check HDMI connection
- Verify display mode with:
wlr-randr - Ensure display supports 1280x720 resolution (at 60 frames per second)
- Check autostart files are in
/home/pi/.config/autostart/ - Verify script permissions:
chmod +x scripts/*.sh - Check system logs:
journalctl -u user@1000
- Fork the repository
- Create a feature branch
- Make your changes
- Test on actual Raspberry Pi hardware
- Submit a pull request
MIT License - See LICENSE file for details