Skip to content

Instantly share code, notes, and snippets.

@phalconyx
Created August 2, 2026 07:48
Show Gist options
  • Select an option

  • Save phalconyx/8e4d1d54bceff52440e277c8ca797f8f to your computer and use it in GitHub Desktop.

Select an option

Save phalconyx/8e4d1d54bceff52440e277c8ca797f8f to your computer and use it in GitHub Desktop.

Tutorial: Kiosk Dashboard Web di Raspberry Pi (Pi OS Lite)

Panduan lengkap menampilkan sebuah halaman web (dashboard) secara fullscreen di monitor yang tercolok ke Raspberry Pi, tanpa menginstal desktop environment. Halaman tampil otomatis saat Pi menyala, dan layar bisa diputar (portrait).

Didokumentasikan dari setup nyata pada 2 Agustus 2026.


1. Ringkasan

Aspek Nilai
Perangkat Raspberry Pi 4 Model B
OS Raspberry Pi OS Lite berbasis Debian 13 (Trixie), 64-bit
Display server Wayland/KMS (bukan X11)
Compositor kiosk sway
Browser chromium (mode --kiosk)
Login Console autologin di tty1
Rotasi output * transform 270 (270° searah jarum jam)

Alur singkatnya: Pi boot → autologin di tty1~/.profile menjalankan ~/kiosk.sh~/kiosk.sh menjalankan sway dengan config ~/.config/sway/kiosk.confsway memutar layar lalu menjalankan Chromium fullscreen.


2. Konsep

Pi OS Lite tidak punya tampilan grafis apa pun (tidak ada desktop, tidak ada browser). Untuk menampilkan web di monitor kita hanya butuh 3 hal:

  1. Compositor yang menggambar ke layar (kita pakai sway, sangat ringan).
  2. Browser yang berjalan fullscreen dan terkunci di satu halaman (Chromium --kiosk).
  3. Autostart saat boot (console autologin + ~/.profile).

Tidak perlu desktop environment penuh — itu justru berat dan tidak diperlukan untuk kiosk.

Kenapa sway dan bukan cage? cage adalah compositor khusus kiosk yang lebih sederhana, tapi build cage di Debian/RPi (versi 0.2.0) tidak punya opsi rotasi. Karena kita butuh memutar layar, kita pakai sway yang punya perintah bawaan output transform. (Lihat Bagian 12.)


3. Prasyarat

  • Raspberry Pi dengan Raspberry Pi OS Lite sudah terpasang dan bisa boot.
  • Monitor tercolok ke port HDMI0 (yang dekat USB-C power pada Pi 4).
  • Akses SSH ke Pi (atau keyboard langsung).
  • User biasa (contoh di sini: fajarb) yang tergabung di grup video, render, input — pada Raspberry Pi OS user default sudah otomatis masuk grup ini. Cek dengan:
    id
  • Koneksi internet di Pi (untuk apt dan untuk memuat dashboard).

4. Langkah 1 — Install paket

sudo apt update
sudo apt install -y sway chromium
  • sway — compositor Wayland yang menjalankan aplikasi fullscreen + mendukung rotasi.
  • chromium — browser. (Di Debian Trixie nama paketnya chromium, bukan chromium-browser.)

5. Langkah 2 — Aktifkan console autologin

Supaya saat boot langsung login ke tty1 (tanpa desktop) dan memicu kiosk:

sudo raspi-config nonint do_boot_behaviour B2

Alternatif lewat menu: sudo raspi-configSystem OptionsBoot / Auto LoginConsole Autologin.

Perintah di atas membuat file override: /etc/systemd/system/getty@tty1.service.d/autologin.conf yang berisi --autologin <user>. Pastikan user-nya benar (di sini fajarb).


6. Langkah 3 — Buat skrip launcher ~/kiosk.sh

File ini adalah "titik masuk" kiosk. Di sinilah URL dashboard diatur.

nano ~/kiosk.sh

Isi dengan:

#!/bin/sh
# =====================================================================
#  Web dashboard kiosk launcher  (sway + chromium, Wayland/KMS)
#  Dijalankan otomatis dari ~/.profile saat login di tty1 (layar fisik).
#
#  >>> GANTI DASHBOARD : ubah baris URL di bawah.
#  >>> GANTI ROTASI    : ubah "output * transform" di
#                        ~/.config/sway/kiosk.conf  (0/90/180/270).
#
#  Terapkan perubahan  : reboot, atau dari SSH jalankan:
#                        pkill -f kiosk.sh; pkill sway
# =====================================================================

export URL="https://www.google.com"

# Loop luar: kalau sway keluar (mis. crash), jalankan lagi.
while true; do
    sway -c "$HOME/.config/sway/kiosk.conf"
    sleep 2
done

Jadikan executable:

chmod +x ~/kiosk.sh

7. Langkah 4 — Buat konfigurasi sway ~/.config/sway/kiosk.conf

mkdir -p ~/.config/sway
nano ~/.config/sway/kiosk.conf

Isi dengan:

# =====================================================================
#  Konfigurasi sway untuk kiosk (dipakai oleh ~/kiosk.sh)
# =====================================================================

# --- ROTASI LAYAR ---------------------------------------------------
# 0 = normal, 90 / 180 / 270 = putar searah jarum jam.
# Ganti angka di bawah lalu terapkan (reboot atau: pkill -f kiosk.sh; pkill sway)
output * transform 270

# --- Tampilan bersih: tanpa border, gap, dan status bar -------------
default_border none
default_floating_border none
gaps inner 0
gaps outer 0
bar {
    mode invisible
}

# Browser memakai Wayland langsung, tidak perlu XWayland
xwayland disable

# --- Jalankan Chromium fullscreen -----------------------------------
# URL diambil dari variabel $URL yang di-export oleh ~/kiosk.sh.
# Dibungkus loop supaya kalau Chromium crash, otomatis dijalankan ulang
# (sway/rotasi tetap hidup).
exec sh -c 'while true; do chromium --kiosk --ozone-platform=wayland --no-first-run --noerrdialogs --disable-infobars --disable-session-crashed-bubble --incognito "$URL"; sleep 2; done'

Penjelasan flag Chromium yang penting:

Flag Fungsi
--kiosk Fullscreen terkunci, tanpa toolbar
--ozone-platform=wayland Wajib — paksa Chromium pakai Wayland (bukan X11/XWayland)
--no-first-run Lewati dialog first-run
--noerrdialogs Tanpa dialog error
--disable-infobars Tanpa bar info
--disable-session-crashed-bubble Tanpa notifikasi "Restore pages"
--incognito Sesi bersih tiap kali start

8. Langkah 5 — Pasang pemicu di ~/.profile

Tambahkan blok berikut di akhir ~/.profile:

nano ~/.profile
# --- Web dashboard kiosk: auto-start di layar fisik (tty1) ---
# Hanya jalan di console fisik tty1 dan hanya jika 'sway' sudah terpasang,
# jadi login lewat SSH (pts/*) tidak terpengaruh.
if [ "$(tty)" = "/dev/tty1" ] && command -v sway >/dev/null 2>&1; then
    exec "$HOME/kiosk.sh"
fi
# --- end kiosk ---

Kenapa ~/.profile dan bukan ~/.bash_profile? Bash login shell membaca ~/.bash_profile~/.bash_login~/.profile (yang pertama ada). Pada Raspberry Pi OS biasanya hanya ada ~/.profile, jadi itu yang dipakai.

Kenapa ada penjaga command -v sway? Supaya kalau sway belum terpasang, login di tty1 tidak error — cuma tidak menjalankan kiosk. Penjaga tty1 memastikan sesi SSH (pts/*) tidak ikut menjalankan kiosk.


9. Langkah 6 — Jalankan

Reboot untuk melihat hasilnya:

sudo reboot

Setelah ~20–30 detik, monitor akan menampilkan halaman fullscreen dalam orientasi portrait (270°). Kalau Chromium/sway crash, otomatis dijalankan ulang.


10. Rotasi layar

Rotasi diatur pada satu baris di ~/.config/sway/kiosk.conf:

output * transform 270
Nilai Hasil
0 Normal (landscape)
90 Putar 90° searah jarum jam
180 Terbalik
270 Putar 270° searah jarum jam

Ubah angkanya lalu terapkan (lihat Bagian 11).

Untuk monitor tertentu bisa juga pakai output HDMI-A-1 transform 270 (nama output spesifik). Cek nama output dengan perintah swaymsg -t get_outputs (lihat Bagian 12).


11. Mengganti URL / rotasi tanpa reboot

Ganti URL dashboard: edit baris URL= di ~/kiosk.sh. Ganti rotasi: edit output * transform di ~/.config/sway/kiosk.conf.

Lalu terapkan dengan salah satu cara:

# Cara cepat tanpa reboot (dari SSH):
pkill -f kiosk.sh; pkill sway

getty akan otomatis autologin ulang di tty1 → menjalankan kiosk versi baru.

Atau cukup:

sudo reboot

12. Verifikasi

Cek rotasi & output aktif (dari SSH). swaymsg butuh alamat socket sway:

SWAYSOCK=$(ls -t /run/user/1000/sway-ipc.* | head -1) swaymsg -t get_outputs

Cari baris:

"name": "HDMI-A-1",
"active": true,
"transform": "270",

Cek proses jalan:

pgrep -x sway
pgrep -x chromium

Cek monitor terdeteksi (level KMS):

for c in /sys/class/drm/card*/card*-HDMI*/status; do echo "$c = $(cat "$c")"; done

13. Troubleshooting

Layar hitam / kembali ke console teks

  • Cek prosesnya: pgrep -x sway dan pgrep -x chromium. Kalau kosong, kiosk gagal start.
  • Jalankan manual di layar fisik/tty1 (bukan SSH — Wayland butuh "seat"):
    sway -c ~/.config/sway/kiosk.conf
    Perhatikan pesan error yang muncul.

Halaman tidak muncul, tapi sway jalan

  • Pastikan Chromium memakai --ozone-platform=wayland (tanpa ini ia mencoba X11 yang tidak ada).
  • Cek koneksi internet dan URL benar.

Font kotak-kotak / tampilan aneh

  • Pasang font dasar: sudo apt install -y fonts-liberation fonts-noto-core.

Resolusi kurang tajam

  • Secara default sway memakai mode preferred monitor. Untuk memaksa resolusi (hanya jika monitor mendukung), tambahkan di ~/.config/sway/kiosk.conf sebelum baris transform:
    output HDMI-A-1 mode 1920x1080
    output * transform 270
    

Layar sering blank/mati sendiri

  • sway tidak mem-blank layar secara default, jadi umumnya aman. Kalau tetap terjadi, pastikan tidak ada swayidle yang berjalan.

Ingin keluar dari kiosk untuk debug

  • SSH ke Pi lalu: pkill -f kiosk.sh; pkill sway (akan restart), atau untuk menghentikan sementara nonaktifkan autostart dengan mengomentari blok di ~/.profile.

14. Catatan: kenapa sway (bukan cage)

Awalnya setup ini memakai cage (compositor khusus kiosk, lebih sederhana). cage bekerja baik untuk menampilkan Chromium fullscreen, tetapi build cage di repo Debian/RPi (versi 0.2.0) tidak menyertakan opsi rotasi — cage -h hanya menampilkan -d -h -m -s -v, tanpa -r.

Karena kebutuhannya memutar layar 270°, compositor diganti ke sway yang punya direktif bawaan output transform. Sisanya (autologin, ~/kiosk.sh, ~/.profile, cara ganti URL) tetap sama. cage boleh dibiarkan terpasang (tidak dipakai) atau dihapus.


15. Ringkasan file yang dibuat/diubah

File Peran
~/kiosk.sh Launcher; berisi URL dashboard; menjalankan sway
~/.config/sway/kiosk.conf Config sway; berisi rotasi + perintah Chromium
~/.profile Pemicu autostart di tty1
/etc/systemd/system/getty@tty1.service.d/autologin.conf Console autologin (dibuat raspi-config)

Paket: sway, chromium.


Selesai. Setelah semua langkah, dashboard akan tampil otomatis dan berotasi setiap kali Raspberry Pi dinyalakan.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment