Single-purpose browser
The device should boot directly into https://kousen.cc without exposing a normal desktop, launcher, file manager, or terminal to the kiosk user.
This project documents and automates the setup for a small Linux mini PC that powers on,
skips the desktop, launches Chromium in kiosk mode, and opens https://kousen.cc
as a family-friendly LAN command center.
Kousen Kiosk is the appliance layer for Kousen CommandCenter. It does not host the web app. It configures a mini PC so the web app feels like the device's native interface.
The device should boot directly into https://kousen.cc without exposing a normal desktop, launcher, file manager, or terminal to the kiosk user.
The installer creates an unprivileged kiosk account for the browser. Maintenance stays with the Debian admin user created during install.
The first version keeps recovery practical. You can SSH into the admin user, pull repo updates, rerun the installer, or disable kiosk auto-login.
The build was tested on a GMKtec NucBox 7 with an Intel Pentium Silver N6005, 16 GB RAM, and a 1 TB M.2 2242 SATA SSD. The scripts are generic enough for other x86_64 mini PCs.
Debian stable minimal is lean, predictable, and avoids a full desktop stack. Ubuntu Server LTS should also work, but Debian keeps this appliance setup simpler.
The NucBox 7 USB-C port should be treated as power input only. The manual labels it Type-C DC IN ONLY, so USB-C video output should not be expected.
These are the installation choices used during the actual mini PC setup, rewritten as a repeatable guide. The goal is a clean Debian install that can be managed over SSH and then converted into a kiosk.
Download the Debian stable amd64 netinst ISO and flash it to an 8 GB or larger USB drive with a tool such as balenaEtcher. The amd64 image is correct for normal 64-bit Intel and AMD mini PCs.
Connect a monitor, keyboard, USB installer, and Ethernet if available. On the GMKtec box, use F7 for the boot menu or Esc for BIOS/UEFI setup. Choose the USB installer.
If Debian shows multiple interfaces, pick the wired Ethernet port that has the cable connected. On the tested box, Debian showed Realtek Ethernet interfaces such as enp1s0 and enp2s0, plus Intel Wi-Fi such as wlo1. If DHCP fails, go back and try the other Ethernet port.
When the installer asks for a root password, leave it blank. Debian will lock direct root login and grant administrative access to the first normal user through sudo.
Create a maintenance user for SSH, updates, recovery, WiFi setup, and future changes. In the tested install, the full name was Kousen Admin and the username was kousen. Do not name this user kiosk; the installer creates that browser-only user later.
Choose Guided - use entire disk, select the internal M.2 SATA SSD, and choose All files in one partition. Avoid encrypted LVM for this appliance because it would require a passphrase at boot.
When Debian asks for HTTP proxy information, leave it blank unless your network specifically requires a proxy.
On the software selection screen, deselect Debian desktop environment and GNOME. Keep SSH server and standard system utilities selected.
After the installer finishes and the mini PC reboots, log in as the admin user created earlier. At the shell prompt, install Git and clone the public repo.
sudo apt-get update
sudo apt-get install -y git ca-certificates
git clone https://github.com/npkousen/kousen-kiosk.git
cd kousen-kiosk
The installer provisions Chromium, Xorg, Openbox, NetworkManager, PipeWire, the home key, WiFi helper, audio helper, kiosk auto-login, and GRUB boot cleanup.
sudo ./scripts/install.sh
sudo reboot
This table summarizes the choices made during the photographed Debian installation.
| Installer screen | Recommended choice | Reason |
|---|---|---|
| Primary network interface | Wired Ethernet first, Wi-Fi later | Ethernet makes the base install and first repo clone simpler. Wi-Fi is configured after the kiosk tools are installed. |
| Root password | Leave blank | Locks direct root login and uses the admin user with sudo. |
| Admin user | Use a normal maintenance account, not kiosk |
The installer owns the kiosk user and keeps it unprivileged. |
| Partition method | Guided - use entire disk |
The device is a dedicated appliance. A plain install is easiest to recover. |
| Partition scheme | All files in one partition |
Simple layout, no benefit from separate partitions for this use case. |
| HTTP proxy | Blank | Normal home networks do not need a proxy. |
| Software selection | SSH server and standard system utilities only |
A full desktop creates unwanted escape routes and UI surfaces. |
After installation, the mini PC becomes a managed browser appliance rather than a general-purpose desktop.
The installer hides the GRUB menu, quiets Linux boot messages, and starts the kiosk session automatically on tty1.
Home, browser Home, Ctrl+Alt+Home, Super+Home, and F12 return Chromium to https://kousen.cc, even from Plex.
Run sudo kousen-configure-wifi, choose the SSID, and enter the password. The saved connection persists across reboots.
PipeWire and WirePlumber are started for Chromium. On boot, the kiosk prefers HDMI audio, then built-in analog, then the first available sink.
The tested hardware exposes a Bluetooth controller. A Bluetooth remote should work if it pairs as a keyboard or media remote.
SSH into the admin account, run git pull, rerun sudo ./scripts/install.sh, and reboot. CommandCenter card updates happen in the separate CommandCenter repo.
These are the commands used most often after the kiosk is installed.
ssh kousen@kousen-kiosk.local
cd ~/kousen-kiosk
git pull
sudo ./scripts/install.sh
sudo reboot
sudo kousen-configure-wifi
ping -c 3 github.com
sudo reboot
sudo kousen-configure-audio
sudo kousen-configure-audio auto
cd ~/kousen-kiosk
sudo ./scripts/disable-kiosk.sh
sudo reboot
These are the real issues encountered during the first install and the fixes that were added to the repo.
Chromium failed before the page loaded because the minimal session was missing pieces it expected. The launcher now sets explicit XDG directories, disables crash reporter prompts, and runs Chromium through dbus-run-session.
X detected the monitor correctly, but Chromium behaved poorly under bare X. Openbox was added as a tiny window manager, and the launcher now detects the active display geometry with xrandr.
The launcher waits up to 60 seconds for NetworkManager before opening the browser, which reduces first-boot offline pages on Wi-Fi.
The first home key used simulated typing, which Plex could capture in search. The current home key uses Chromium's localhost debugging API to navigate directly back to CommandCenter.
ALSA saw HDMI hardware, but the minimal install had no PipeWire session. The installer now adds PipeWire, WirePlumber, and an automatic audio selector.
The NucBox 7 USB-C port is power-only. Use HDMI for video. A USB-C monitor may power the mini PC while still requiring HDMI for picture and sound.
A compact view of the working target state.