---
type: "blog-post"
title: "Running Grafana Kiosk on a Raspberry pi"
description: "The motivation behind setting up a raspberry pi for kiosk mode, and sacrificing a tv, is that at work we've got kind of this control center factor, where at a glance, we can quickly get an overview of a problem. If an alert goes, it is super easy to just look up and there you go, you can see the spike in CPU, requests you name it. "
draft: false
date: "2023-07-26"
updates:
- time: "2023-07-26"
  description: "first iteration"
tags:
- '#blog'
---

# Introduction

The motivation behind setting up a raspberry pi for kiosk mode, and sacrificing
a tv, is that at work we've got kind of this control center factor, where at a
glance, we can quickly get an overview of a problem. If an alert goes, it is
super easy to just look up and there you go, you can see the spike in CPU,
requests you name it.

And it looks super cool :D

![grafana-dash](/assets/2023-07-26-grafana-dash.jpg)

# Prerequisites

You are gonna need a raspberry pi (ofc) or another small mini pc. It doesn't
technically have to be a raspberry pi, but the official docs, and this guide is
certainly geared towards it.

I am using a:

- Raspberry pi 4
- A monitor / TV. I am usually using the tv.
- A grafana server somewhere reachable by the raspberry pi

# Installation

I won't go too deep into the installation, I've used the raspberry pi imager, to
setup an sd-card, with raspberryp os 64 bit, You may have to choose the 32 bit
version if you're running on an older pi. I am choosing the default, not the
lite version, you want the desktop to be setup.

You can change the name of the user if you want, you will just have to swap out
the pi username later.

Simply hook it up to a display, get a keyboard and mouse (or ssh connection), I
did everything through an ssh connection personally.

## Grafana-kiosk

Grafana actually publishes an app for running a kiosk mode grafana dashboard, it
is just a single binary and can be fetched from their github page:
https://github.com/grafana/grafana-kiosk

Simply download the binary that you need:

```bash
lscpu | grep Arch
```

First figure out which architecture you're on. Raspberry pi 4 returns aarch64,
which maps to linux-arm64. Older raspberry pi editions, map to an armv7 or below
(I believe)

Next grab the release (make sure to look for an updated version)

```bash
export VERSION="v1.0.6" # as of 2023-07-26
export KIOSK_ARCH="linux.arm64"

wget "https://github.com/grafana/grafana-kiosk/releases/download/$VERSION/grafana-kiosk.$KIOSK_ARCH"

chmod +x "grafana-kiosk.$KIOSK_ARCH"
```

Now you should have got the executable in the home directory, you are free to
move it to a more appropriate place, but make sure to update the paths later.

Now give it a whirl using the default settings, this will show stats from a
template grafana dashboard provided by grafana themselves.

```bash
./grafana-kiosk.$KIOSK_ARCH
```

After a few seconds the built in chromium browser will open and you should see
the grafana page loading. To turn it off simply `Ctrl+C` the process.

Now we have a few choices for auto-setup. The official docs mention a few
different ways you can do it:
https://github.com/grafana/grafana-kiosk/blob/main/README.md#automatic-startup

I will personally use systemd, as it is a fairly convenient and homogenous way
of doing it. I am also not running LXDE on my workstation, so I'd rather choose
something I am slightly more familiar with.

## Setup Systemd

First we need to create a systemd service. I am personally using neovim, but you
are free to choose regular vim or nano, if you prefer.

First grab yourself a super user session

```bash
sudo su
<enter password>
```

And create the file

```bash
nvim /etc/systemd/system/grafana-kiosk.service
```

Now enter the contents:

```bash
[Unit]
Description=Grafana Kiosk
Documentation=https://github.com/grafana/grafana-kiosk
Documentation=https://grafana.com/blog/2019/05/02/grafana-tutorial-how-to-create-kiosks-to-display-dashboards-on-a-tv
After=network.target

[Service]
User=nefarious
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/nefarious/.Xauthority"

ExecStartPre=/bin/sleep 30
ExecStartPre=xset s off
ExecStartPre=xset -dpms
ExecStartPre=xset s noblank

ExecStart=/home/pi/grafana-kiosk.linux.arm64 -URL <your-playlist-url> -login-method local -username <your-user> -password <your-password> -playlists true -lxde-home /home/pi/ -lxde true

[Install]
WantedBy=graphical.target
```

This is specifically setup to use playlists, if you want to do the same, simply
create or view a playlist in grafana, and copy the shareable link or url to it.
Simple as that. I am also just using a user here, but checkout the options for
using api tokens or an oauth setup if this is used professionally.

Now we need to instruct systemd to reload all unit files

```bash
systemctl daemon-reload
```

And enable our service

```bash
systemctl enable --now grafana-kiosk
```

This will both enable and start the grafana-kiosk service. Not that this will
take atleast 30 seconds to take effect because of the 30 seconds sleep. You can
reduce or remove that at your own risk.

If it succeeds you should after a while see the same as before when you executed
the grafana-kiosk binary. Now it should display your dashboards instead tho.

If nothing happens or you get an error message, simply check with
`systemctl status grafana-kiosk` or using `journalctl -u grafana-kiosk`.

That should be it, you should now have a live dashboard view, which will be
automatically updated, when you update your grafana setup
