このスクリプトは新規 Ubuntu 26.04 Server インストールを、選択した URL を指すフルスクリーンブラウザに直接ブートするロックダウンされた Chromium キオスクに変える。setup-kiosk.sh として保存し、root で一度実行すれば、マシンはキオスクモードで再起動する。
スクリプト
#!/usr/bin/env bash
set -euo pipefail
# ターゲット URL(引数 $1 で指定されなければ ubuntu.com がデフォルト)
KIOSK_URL="${1:-https://ubuntu.com}"
KIOSK_USER="kiosk"
echo "========================================="
echo " Starting Ubuntu 26.04 Server Kiosk Setup"
echo " Target URL: ${KIOSK_URL}"
echo "========================================="
# 1. 前提条件チェック:root 権限
if [[ $EUID -ne 0 ]]; then
echo "[!] Error: This script must be executed with root privileges." >&2
echo " Usage: sudo ./setup-kiosk.sh [OPTIONAL_URL]" >&2
exit 1
fi
# 2. 前提条件チェック:ネットワーク接続
echo "[+] Checking network connectivity..."
if ! ping -c 1 -W 3 8.8.8.8 &>/dev/null; then
echo "[!] Error: No active network connection detected." >&2
echo " Please verify IP configuration or cabling before proceeding." >&2
exit 1
fi
# 3. 最小限のディスプレイ、デスクトップヘルパー、ブラウザ依存パッケージをインストール
echo "[+] Updating apt repositories and installing required dependencies..."
export DEBIAN_FRONTEND=noninteractive
apt-get update -qq
apt-get install -y -qq \
xserver-xorg \
xserver-xorg-video-all \
xinit \
x11-xserver-utils \
openbox \
unclutter \
chromium-browser \
xdg-utils \
dbus-x11 \
desktop-file-utils
# 4. 専用の制限付きキオスクユーザーを作成
if ! id "$KIOSK_USER" &>/dev/null; then
echo "[+] Creating non-root user '$KIOSK_USER'..."
useradd -m -s /bin/bash "$KIOSK_USER"
fi
# ディスプレイ、レンダリング、入力、オーディオハードウェアへの直接アクセス許可を付与
usermod -aG video,audio,input,render "$KIOSK_USER"
# 5. 非 root サービス起動用に Xorg 実行権限を修正
echo "[+] Configuring X11 wrapper permissions..."
mkdir -p /etc/X11
cat <<'EOF' > /etc/X11/Xwrapper.config
allowed_users=anybody
needs_root_rights=yes
EOF
# 6. Openbox 環境と Chromium ランチャーを設定
echo "[+] Setting up autostart profile for '$KIOSK_USER'..."
KIOSK_HOME=$(getent passwd "$KIOSK_USER" | cut -d: -f6)
AUTOSTART_DIR="$KIOSK_HOME/.config/openbox"
mkdir -p "$AUTOSTART_DIR"
cat <<EOF > "$AUTOSTART_DIR/autostart"
#!/usr/bin/env bash
# DPMS とディスプレイ省電力/スリープを無効化
xset s off
xset s noblank
xset -dpms
# アイドル時にマウスカーソルを隠す
unclutter -idle 0.5 -root &
# Chromium snap 封じ込め用のアクティブな D-Bus セッションを確保
if [ -z "\${DBUS_SESSION_BUS_ADDRESS:-}" ]; then
eval \$(dbus-launch --sh-syntax --exit-with-session)
fi
# Chromium キオスクの回復性のための無限実行ループ
while true; do
chromium \
--kiosk \
--noerrdialogs \
--disable-infobars \
--no-first-run \
--disable-session-crashed-bubble \
--disable-component-update \
--check-for-update-interval=31536000 \
"$KIOSK_URL"
sleep 1
done
EOF
chmod +x "$AUTOSTART_DIR/autostart"
chown -R "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.config"
# 7. Snap cgroup 委譲付きの Systemd キオスクサービスを作成・有効化
echo "[+] Registering systemd kiosk service..."
cat <<EOF > /etc/systemd/system/kiosk.service
[Unit]
Description=Chromium Kiosk Service
After=network-online.target sound.target dbus.service
Wants=network-online.target dbus.service
[Service]
User=$KIOSK_USER
Group=$KIOSK_USER
Type=simple
Delegate=yes
PAMName=login
ExecStart=/usr/bin/startx /usr/bin/openbox-session -- :0 -nolisten tcp -nocursor
Restart=always
RestartSec=3
Environment=DISPLAY=:0
[Install]
WantedBy=graphical.target
EOF
# デフォルトターゲットを graphical に設定しキオスク自動起動を有効化
systemctl set-default graphical.target
systemctl daemon-reload
systemctl enable kiosk.service
echo "========================================="
echo " Kiosk setup complete!"
echo " The system will reboot into kiosk mode."
echo "========================================="
sleep 3
rebootURL を変更する方法
キオスク URL はスクリプト上部の単一変数で制御される:
KIOSK_URL="${1:-https://ubuntu.com}"2つの選択肢:
インストーラー実行時にコマンドラインで渡す — スクリプトを変更しないため推奨:
example.shsudo ./setup-kiosk.sh https://your-dashboard.example.comスクリプト内のデフォルトを編集 — 永続的なフォールバック URL が欲しい場合。
https://ubuntu.comをターゲット URL に変更。この値は引数がない場合のみ使用。
URL はセットアップ時に autostart ファイルに焼き込まれる(~kiosk/.config/openbox/autostart)。キオスクがすでにインストール済みの後に URL を変更したい場合、そのファイル内の chromium ... "$KIOSK_URL" 行を編集してサービスを再起動:
sudo systemctl restart kiosk.serviceステップごとの動作説明
1. root チェック
$EUID は実効ユーザー ID。パッケージインストール、システムユーザー作成、/etc/X11 への書き込み、systemd ユニット登録が必要なため、スクリプトは非 root での実行を拒否する。
2. ネットワークチェック
8.8.8.8 への3秒タイムアウトの単一 ICMP パケット。マシンにネットワークがなければ apt-get が途中で失敗しシステムを壊れた状態に残すため、明確なメッセージで早期に終了する。
3. パッケージインストール
DEBIAN_FRONTEND=noninteractive と -qq で apt を静粛にし、キーボード設定などのプロンプトを止める。インストールされるパッケージはディスプレイを駆動しブラウザを動かす最小限:
xserver-xorg,xserver-xorg-video-all,xinit— X サーバー本体x11-xserver-utils—xsetを提供、後でスクリーンブランキングを無効化するため使用openbox— 小さくほぼ機能のないウィンドウマネージャ。ユーザーが操作するものが何もないのでキオスクに最適unclutter— 動いていないときマウスカーソルを隠すchromium-browser— 実際のキオスクアプリケーションxdg-utils,desktop-file-utils,dbus-x11— Chromium と snap ランタイムが間接的に必要とするヘルパー
4. 専用キオスクユーザー
Chromium は root では実行しない。スクリプトはパスワードなしでホームディレクトリ付きの kiosk ユーザーを作成し、video、audio、input、render グループに追加して、sudo なしで GPU、サウンドカード、入力デバイスと直接通信できるようにする。
5. Xwrapper 設定
デフォルトでは Xorg は非 root ユーザーによる起動を拒否する。allowed_users=anybody を持つ /etc/X11/Xwrapper.config はその制限を緩め、needs_root_rights=yes は X が直接ハードウェアアクセスに必要な権限を自身に与えることを許可。これが kiosk ユーザーが systemd サービス内から startx を実行できるようにするもの。
6. Openbox autostart
Openbox は起動時に ~/.config/openbox/autostart を実行。生成されるスクリプトは4つのことを行う:
xset s off/xset s noblank/xset -dpms— スクリーンセーバー、スクリーンブランキング、DPMS 電源管理を無効化し、ディスプレイがスリープしないようにする。unclutter -idle 0.5 -root— 0.5秒の非活動後にカーソルを隠す。タッチ専用キオスクでは可視カーソルはあってはならない。dbus-launch— snap 封じ込め下の Chromium はセッション D-Bus が必要。サービスが提供しなければここで起動。while true; do chromium --kiosk ...; sleep 1; done— 回復性ループ。Chromium がクラッシュ、終了、または X サーバーが詰まっても、ループが1秒以内に再起動。フラグは初回実行やクラッシュ後に Chromium が表示する全ての対話ダイアログを無効化(--no-first-run、--disable-session-crashed-bubble、--disable-infobars、--noerrdialogs)、--check-for-update-interval=31536000で実質1年間更新チェックを無効にし、ブラウザがホームに通信しないようにする。
7. systemd サービス
ユニットファイルは DISPLAY=:0 で kiosk ユーザーとして startx /usr/bin/openbox-session を実行。重要なディレクティブ:
After=network-online.target ... Wants=network-online.target— ネットワークが立ち上がるのを待ち、Chromium がオフラインエラーページでブートしないようにする。Delegate=yes— サービスが自身の cgroup サブツリーを管理できるようにし、snap 版 Chromium のサンドボックス設定に必要。PAMName=login— サービスを PAM ログインセッション経由で実行し、dbus-launch、logind、デバイスノードの ACL が実際のログインユーザーと同じように動作するようにする。Restart=always/RestartSec=3— X サーバーまたは openbox が死んだ場合、systemd が3秒後にキオスク全体を復帰させる。
systemctl set-default graphical.target はマシンをデフォルトでグラフィカルターゲットにブートさせ、systemctl enable kiosk.service は毎ブート時にキオスクを自動起動させる。
最終再起動
スクリプトは sleep 3; reboot で終わり、インストールが残した状態の上で X を起動しようとするのではなく、キオスクサービスが有効な新しいグラフィカルターゲットにクリーンブートする。
使い方
chmod +x setup-kiosk.sh
sudo ./setup-kiosk.sh https://your-dashboard.example.com再起動後、URL を指すフルスクリーンキオスクモードの Chromium が表示されるはず。シェルを復旧するには Ctrl+Alt+F3 で仮想コンソールに切り替え、通常ユーザーでログイン。
デュアルモニターキオスク設定については 1つの X サーバーで2つ目の画面に2つ目のプログラムを実行する方法、および 単一 GPU で2つの別々の X サーバーが動かない理由 も参照。