#!/bin/sh
# lancer-labwc <dossier de configuration>
# Démarre le compositeur labwc en choisissant le mode de rendu :
#   - carte graphique utilisable : rendu accéléré ;
#   - sinon (machine virtuelle sans accélération 3D, pilote absent ou
#     défaillant) : rendu logiciel, plus lent mais toujours affiché.
# Si le rendu accéléré échoue au démarrage, on relance aussitôt en logiciel :
# l'écran ne reste jamais noir pour cette raison.
conf="$1"

logiciel() {
    export WLR_RENDERER=pixman
    # Interfaces Qt Quick (accueil, installateur…) dessinées sans OpenGL
    export QT_QUICK_BACKEND=software
}

# Machines virtuelles : le pointeur matériel y est souvent invisible
virt="$(systemd-detect-virt 2>/dev/null)" || virt=none
if [ "$virt" != none ]; then
    export WLR_NO_HARDWARE_CURSORS=1
fi

# Choix imposé de l'extérieur (diagnostic) : on le respecte
[ -n "${WLR_RENDERER:-}" ] && exec labwc -C "$conf"

# VirtualBox : avec son accélération 3D, le bureau démarre mais refuse les
# images des applications dessinées par la carte graphique (« importing the
# supplied dmabufs failed ») : elles ne s'ouvrent pas. Rendu logiciel d'office.
if [ "$virt" = oracle ]; then
    echo "p2i : VirtualBox détecté, rendu logiciel" >&2
    logiciel
    exec labwc -C "$conf"
fi

if ! ls /dev/dri/renderD* >/dev/null 2>&1; then
    echo "p2i : pas d'accélération 3D, rendu logiciel" >&2
    logiciel
    exec labwc -C "$conf"
fi

debut="$(date +%s)"
${P2I_TEST_RENDU:+env WLR_RENDERER="$P2I_TEST_RENDU"} labwc -C "$conf"
rc=$?
duree=$(( $(date +%s) - debut ))
temoin="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/p2i-fermeture"
if [ -e "$temoin" ]; then
    # Fermeture de session demandée : pas de relance
    rm -f "$temoin"
    exit 0
fi
if [ "$rc" -ne 0 ] && [ "$duree" -lt 15 ]; then
    echo "p2i : le rendu accéléré a échoué (code $rc après $duree s), rendu logiciel" >&2
    logiciel
    exec labwc -C "$conf"
fi
exit "$rc"
