RPi Google Slides as Digital Signage

RPi Google Slides as Digital Signage
Photo by Harrison Broadbent / Unsplash

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:

  1. Select the video in Google Slides.
  2. 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:

  1. Launch full-screen.
  2. Open the Google Slides presentation.
  3. Start the presentation automatically.
  4. Advance through the slides.
  5. Play videos configured for autoplay.
  6. 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.