#!/bin/sh
# Киоск: композитор cage, внутри него cog на весь экран.
#
# Почему cog, а не Chromium. Cog — это WPE WebKit без слоя совместимости с
# десктопом: около сотни мегабайт памяти против трёхсот-пятисот у Chromium и
# заметно более быстрый старт. Мы уходили с него на Chromium из-за дефектов в
# работе с буферами, но два из трёх оказались следствием неподнявшегося GPU
# (без рендер-ноды WebKit отдавал кадры как wl_shm), а третий касался только
# видео внутри страницы — а видео там больше нет.
#
# Почему внутри cage, а не прямо в KMS, как cog умеет сам. DRM master может
# быть только один. Видео у нас играет отдельный процесс, который рисует
# вторым окном поверх браузера, и без композитора ему просто некуда рисовать.
# Платим за это несколькими десятками мегабайт на wlroots — и получаем
# аппаратное декодирование, которое из браузера недоступно.
set -eu

[ -r /etc/default/dashdash ] && . /etc/default/dashdash

URL="http://127.0.0.1:${SCREEN_PORT:-3000}/"

# Курсор мыши. У телевизора мыши нет, указывать им некому, а висящая посреди
# дашборда стрелка выглядит как зависшая программа.
#
# Тему называем свою, а не правим /usr/share/icons/default: тот путь
# принадлежит пакету adwaita-icon-theme, и в образе наш файл затирался при
# установке зависимостей. Переменную же не перезапишет никто.
XCURSOR_THEME="${XCURSOR_THEME:-dashdash-none}"
XCURSOR_SIZE="${XCURSOR_SIZE:-1}"
export XCURSOR_THEME XCURSOR_SIZE

# Каталог, в котором композитор создаёт сокет Wayland. Юнит заводит его через
# RuntimeDirectory; здесь — подстраховка на случай ручного запуска при отладке,
# без неё cage молча не создаст сокет и экран останется пустым.
if [ -z "${XDG_RUNTIME_DIR:-}" ]; then
	XDG_RUNTIME_DIR=/run/dashdash-kiosk
	export XDG_RUNTIME_DIR
	mkdir -p "$XDG_RUNTIME_DIR"
	chmod 700 "$XDG_RUNTIME_DIR"
fi

# Сессионная шина D-Bus: без неё браузер работает, но сыпет в журнал ошибки
# подключения к шине на каждый запрос. Журнал экрана нам нужен читаемым.
if command -v dbus-run-session >/dev/null 2>&1; then
	set -- dbus-run-session --
else
	set --
fi

# shellcheck disable=SC2086 # COG_EXTRA_FLAGS — набор аргументов, а не строка
exec "$@" cage -- cog --platform=wl ${COG_EXTRA_FLAGS-} "$URL"
