RPi Google Slides as Digital Signage
Purpose
This setup turns a Raspberry Pi into an unattended Google Slides digital-signage player.
It will:
- Boot automatically
- Launch Chromium full-screen in kiosk mode
- Open a published Google Slides presentation
- Automatically advance slides
- Loop the presentation
- Allow embedded videos to autoplay
- Relaunch Chromium if it closes or crashes, or when power is cycled to the device
This configuration has been tested successfully with a Raspberry Pi Zero W running Raspberry Pi OS and Chromium.
1. Prepare the Google Slides Presentation
Create the presentation normally in Google Slides.
For unattended signage, publish the presentation rather than using the normal editor or presentation URL.
In Google Slides:
File → Share → Publish to web
Configure the desired slide timing and enable automatic playback/looping as appropriate.
The resulting URL should look similar to:
https://docs.google.com/presentation/d/e/PRESENTATION_ID/pub?start=true&loop=true&delayms=30000
The useful URL parameters are:
start=true
Starts the presentation automatically.
loop=true
Restarts the presentation after the final slide.
delayms=30000
Sets automatic slide advancement to 30,000 milliseconds, or 30 seconds.
Examples:
delayms=5000
5 seconds.
delayms=10000
10 seconds.
delayms=30000
30 seconds.
2. Configure Videos in Google Slides
For any video that should begin automatically:
- Select the video in Google Slides.
- Go to the Format menu, Format Options, the Video Playback dropdown, and set it to Play (Automatically).
Later, the browser that is auto-launched will be configured. This is particularly important for videos.
3. Create the Kiosk Script
Open a terminal on the Raspberry Pi.
Create the script:
nano ~/kiosk.sh
Paste the following:
#!/bin/bash
# Wait until the Pi is actually online
until ping -c1 -W1 1.1.1.1 >/dev/null 2>&1; do
sleep 2
done
URL="YOUR_GOOGLE_SLIDES_PUBLISHED_URL"
# Relaunch Chromium forever if it ever closes or crashes
while true; do
/usr/bin/chromium --kiosk --noerrdialogs --disable-infobars --no-first-run --start-maximized --password-store=basic --autoplay-policy=no-user-gesture-required "$URL"
sleep 2
done
Replace:
YOUR_GOOGLE_SLIDES_PUBLISHED_URL
with the complete published Google Slides URL.
For example:
URL="https://docs.google.com/presentation/d/e/PRESENTATION_ID/pub?start=true&loop=true&delayms=30000"
Save the file in nano:
Ctrl+O
Enter
Ctrl+X
4. Make the Script Executable
Run:
chmod +x ~/kiosk.sh
5. Validate the Script
Before configuring automatic startup, check the script for syntax errors:
bash -n ~/kiosk.sh
If the script is valid, this command should return nothing. No output is good. If Bash reports an error, fix the script before continuing. You can inspect the file with line numbers using:
nl -ba ~/kiosk.sh
6. Test the Kiosk Manually
Run:
~/kiosk.sh
Chromium should:
- Launch full-screen.
- Open the Google Slides presentation.
- Start the presentation automatically.
- Advance through the slides.
- Play videos configured for autoplay.
- Loop when it reaches the end.
Pressing Alt+F4 may close Chromium, but the script will reopen it after approximately two seconds.
To stop the script itself, return to its terminal and press:
Ctrl+C
7. Launch Automatically at Login
Current Raspberry Pi OS releases may use the Labwc Wayland compositor.
Its autostart file is commonly:
~/.config/labwc/autostart
Create the directory if necessary:
mkdir -p ~/.config/labwc
Edit the file:
nano ~/.config/labwc/autostart
A simple configuration is:
/home/YOUR_USERNAME/kiosk.sh &
For example:
/home/pi/kiosk.sh &
Save the file and reboot:
sudo reboot
The desktop should load and the kiosk should start automatically.
8. Chromium Options Explained
The working Chromium command is:
/usr/bin/chromium --kiosk --noerrdialogs --disable-infobars --no-first-run --start-maximized --password-store=basic --autoplay-policy=no-user-gesture-required "$URL"
--kiosk
Runs Chromium in full-screen kiosk mode without normal browser controls.
--noerrdialogs
Prevents Chromium error dialogs from interrupting unattended signage.
--disable-infobars
Suppresses browser information bars where supported.
--no-first-run
Prevents Chromium's first-run experience from appearing.
--start-maximized
Starts the browser maximized.
--password-store=basic
Avoids desktop keyring/password-store dialogs that can interfere with unattended startup.
--autoplay-policy=no-user-gesture-required
Allows web media to autoplay without someone clicking or touching the screen first. This option was required to make Google Slides embedded video autoplay reliably in this kiosk configuration.
9. Verify Chromium Is Running Correctly
To see the main Chromium process:
pgrep -a chromium | head -1
A working configuration should show arguments including:
--kiosk
and:
--autoplay-policy=no-user-gesture-required
For example:
/usr/lib/chromium/chromium ... --kiosk ... --autoplay-policy=no-user-gesture-required ...
10. Determine What Started Chromium
If Chromium is running but it is unclear which script or service launched it, first find its PID:
pgrep -a chromium
Locate the main Chromium process and then run:
pstree -asp PID
For example:
pstree -asp 1389
This can reveal something such as:
systemd
└─kiosk.sh
└─chromium
That shows exactly what launched the browser.
11. Find Existing Chromium Startup Configurations
A Raspberry Pi that has been configured multiple times may accidentally have more than one mechanism launching Chromium.
Search for the Google Slides URL:
grep -R --line-number --fixed-strings 'docs.google.com/presentation' ~/.config ~/.local ~ 2>/dev/null
Or search more broadly for Chromium startup commands:
grep -R --line-number --fixed-strings 'chromium' ~/.config ~/.local ~ 2>/dev/null
Possible launch locations include:
~/kiosk.sh
~/.config/labwc/autostart
~/.config/autostart/
cron:
crontab -l
or systemd services.
Avoid having multiple independent kiosk launchers unless that is intentional.
One component should ideally be responsible for launching and restarting Chromium.
12. Troubleshooting: Chromium Does Not Start
Check whether Chromium is running:
pgrep -a chromium
If nothing is returned, validate the script:
bash -n ~/kiosk.sh
Then inspect it:
nl -ba ~/kiosk.sh
A syntax error such as:
syntax error: unexpected end of file
usually indicates:
- A missing
done - An unmatched quote
- A malformed multi-line command
- Accidental duplicated script contents
13. Avoid Multi-Line Chromium Command Problems
Shell commands can be spread across multiple lines using \:
/usr/bin/chromium \
--kiosk \
--noerrdialogs \
"$URL"
However, the backslash must be the final character on each continued line.
Even stray whitespace can cause confusing problems.
For a small kiosk script, keeping the Chromium invocation on one line is simpler and more reliable:
/usr/bin/chromium --kiosk --noerrdialogs --disable-infobars --no-first-run --start-maximized --password-store=basic --autoplay-policy=no-user-gesture-required "$URL"
This is the recommended approach.
14. Troubleshooting: Slides Work but Video Does Not Autoplay
First verify that the video itself is configured for automatic playback in Google Slides.
Then verify Chromium was launched with:
--autoplay-policy=no-user-gesture-required
Check with:
pgrep -a chromium | head -1
If that flag is absent, Chromium may refuse to autoplay media until it receives user interaction.
After changing the launch script, restart Chromium or reboot the Pi:
sudo reboot
15. Troubleshooting: Pi Boots Before Internet Is Available
The kiosk script deliberately contains:
until ping -c1 -W1 1.1.1.1 >/dev/null 2>&1; do
sleep 2
done
This checks for working network connectivity every two seconds before launching Chromium.
This avoids opening the signage browser while Wi-Fi is still connecting.
If Google Slides fails to load after startup, test connectivity manually:
ping -c4 1.1.1.1
and:
ping -c4 google.com
The first checks basic Internet connectivity.
The second also verifies DNS resolution.
16. Troubleshooting Commands Cheat Sheet
Is Chromium running?
pgrep -a chromium
Show only the main Chromium process
pgrep -a chromium | head -1
See what launched Chromium
pstree -asp $(pgrep -o chromium)
Validate the kiosk script
bash -n ~/kiosk.sh
Display the script with line numbers
nl -ba ~/kiosk.sh
Find Google Slides startup commands
grep -R --line-number --fixed-strings 'docs.google.com/presentation' ~/.config ~/.local ~ 2>/dev/null
Find Chromium startup commands
grep -R --line-number --fixed-strings 'chromium' ~/.config ~/.local ~ 2>/dev/null
Check failed systemd services
systemctl --failed
Reboot
sudo reboot
17. Recommended Final kiosk.sh
For future Raspberry Pi signage devices, this is the baseline configuration:
#!/bin/bash
# Wait for Internet connectivity
until ping -c1 -W1 1.1.1.1 >/dev/null 2>&1; do
sleep 2
done
# Published Google Slides presentation
URL="YOUR_GOOGLE_SLIDES_PUBLISHED_URL"
# Keep the signage browser running
while true; do
/usr/bin/chromium --kiosk --noerrdialogs --disable-infobars --no-first-run --start-maximized --password-store=basic --autoplay-policy=no-user-gesture-required "$URL"
sleep 2
done
After creating it:
chmod +x ~/kiosk.sh
bash -n ~/kiosk.sh
Then configure:
~/.config/labwc/autostart
to launch:
/home/YOUR_USERNAME/kiosk.sh &
This provides a simple, reproducible Raspberry Pi Google Slides digital-signage appliance.