Files
photoBooth/Opencode/scripts/optimize-desktop.sh
T
admin 209f81aa3d
🚀 Deploy — JH Photomaton / 🔍 Vérification (push) Has been cancelled
🚀 Deploy — JH Photomaton / 🍓 Deploy sur le Pi (push) Has been cancelled
first commit
2026-07-16 00:55:29 +02:00

253 lines
9.4 KiB
Bash

#!/bin/bash
# =============================================================================
# optimize-desktop.sh - Desactiver les composants desktop inutiles en mode kiosk
# =============================================================================
# Usage: bash optimize-desktop.sh
# Gain estime: ~200 Mo de RAM
#
# Ce script configure labwc pour ne lancer QUE Chromium en mode kiosk,
# sans barre de taches, gestionnaire de fichiers, portails desktop, etc.
#
# REVERSIBLE: un fichier de backup est cree, et on peut restaurer avec:
# bash optimize-desktop.sh --restore
# =============================================================================
set -euo pipefail
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
REAL_USER="${SUDO_USER:-$(logname 2>/dev/null || whoami)}"
USER_HOME=$(eval echo "~$REAL_USER")
# -------------------------------------------------------------------
# Mode restauration
# -------------------------------------------------------------------
if [ "${1:-}" = "--restore" ]; then
log_info "Restauration du desktop original..."
if [ -f "$USER_HOME/.config/labwc/autostart.backup" ]; then
cp "$USER_HOME/.config/labwc/autostart.backup" "$USER_HOME/.config/labwc/autostart"
log_info "autostart restaure"
fi
# Reactiver les services
XDG_RUNTIME_DIR="/run/user/$(id -u "$REAL_USER")"
DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
for service in xdg-desktop-portal xdg-desktop-portal-gtk xdg-desktop-portal-wlr; do
runuser -u "$REAL_USER" -- env \
XDG_RUNTIME_DIR="$XDG_RUNTIME_DIR" \
DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" \
systemctl --user unmask "$service" 2>/dev/null || true
done
log_info "Restauration terminee. Redemarrer pour appliquer."
exit 0
fi
echo "============================================="
echo " Optimisation desktop pour mode kiosk"
echo " Gain estime: ~200 Mo de RAM"
echo "============================================="
echo ""
# -------------------------------------------------------------------
# 1. LABWC AUTOSTART - Ne lancer que Chromium
# -------------------------------------------------------------------
log_info "Configuration de labwc autostart..."
LABWC_DIR="$USER_HOME/.config/labwc"
mkdir -p "$LABWC_DIR"
# Backup de l'autostart original
if [ -f "$LABWC_DIR/autostart" ] && [ ! -f "$LABWC_DIR/autostart.backup" ]; then
cp "$LABWC_DIR/autostart" "$LABWC_DIR/autostart.backup"
log_info "Backup cree: $LABWC_DIR/autostart.backup"
fi
# Creer un autostart minimal pour le mode kiosk
cat > "$LABWC_DIR/autostart" << 'EOF'
#!/bin/bash
# =============================================================================
# labwc autostart - Mode kiosk photomaton
# =============================================================================
# Ne lance que le strict necessaire:
# - pipewire (audio, requis par certains composants)
# - Chromium en mode kiosk
#
# Composants DESACTIVES (gain ~200 Mo RAM):
# - pcmanfm (gestionnaire fichiers desktop)
# - wf-panel-pi (barre de taches)
# - xdg-desktop-portal* (portails desktop)
# - polkit-mate-authentication-agent
# - gvfsd (systeme fichiers virtuels)
# =============================================================================
# Desactiver le screen blanking / DPMS via wlr-randr si disponible
if command -v wlr-randr &>/dev/null; then
wlr-randr --output HDMI-A-1 --on 2>/dev/null || true
fi
# Demarrer pipewire (necessaire pour certains composants systeme)
/usr/bin/pipewire &
sleep 1
/usr/bin/pipewire -c filter-chain.conf &
/usr/bin/wireplumber &
/usr/bin/pipewire-pulse &
# Attendre que photobooth-app soit pret
MAX_WAIT=60
WAITED=0
while ! curl -s -o /dev/null --max-time 2 http://127.0.0.1:8083/ 2>/dev/null; do
sleep 2
WAITED=$((WAITED + 2))
if [ "$WAITED" -ge "$MAX_WAIT" ]; then
break
fi
done
# Lancer Chromium en mode kiosk
chromium \
--kiosk \
--accept-lang=fr-FR \
--incognito \
--password-store=basic \
--ozone-platform=wayland \
--enable-features=OverlayScrollbar \
--disable-features=Translate,OverscrollHistoryNavigation \
--noerrdialogs \
--disable-infobars \
--disable-session-crashed-bubble \
--disable-component-update \
--disable-background-networking \
--disable-sync \
--disable-extensions \
--disable-dev-shm-usage \
--no-first-run \
--start-maximized \
--process-per-site \
--js-flags="--max-old-space-size=128" \
--renderer-process-limit=1 \
"http://127.0.0.1:8083/" &
EOF
chmod +x "$LABWC_DIR/autostart"
chown "$REAL_USER:$REAL_USER" "$LABWC_DIR/autostart"
log_info "labwc autostart kiosk cree"
# -------------------------------------------------------------------
# 2. DESACTIVER LES PORTAILS DESKTOP (services utilisateur)
# -------------------------------------------------------------------
log_info "Desactivation des portails desktop..."
# Ces services sont lances automatiquement par D-Bus
# On les masque pour qu'ils ne demarrent plus
# Utiliser machinectl ou runuser pour eviter les demandes de mot de passe
# quand le script est lance avec sudo
XDG_RUNTIME_DIR="/run/user/$(id -u "$REAL_USER")"
DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
for portal_svc in xdg-desktop-portal.service xdg-desktop-portal-gtk.service xdg-desktop-portal-wlr.service; do
runuser -u "$REAL_USER" -- env \
XDG_RUNTIME_DIR="$XDG_RUNTIME_DIR" \
DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" \
systemctl --user mask "$portal_svc" 2>/dev/null || true
runuser -u "$REAL_USER" -- env \
XDG_RUNTIME_DIR="$XDG_RUNTIME_DIR" \
DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" \
systemctl --user stop "$portal_svc" 2>/dev/null || true
done
log_info "Portails desktop desactives"
# -------------------------------------------------------------------
# 3. DESACTIVER LES SERVICES SYSTEME INUTILES
# -------------------------------------------------------------------
log_info "Desactivation des services systeme inutiles..."
SERVICES_TO_DISABLE=(
# ModemManager - pas de modem
"ModemManager.service"
# accounts-daemon - gestion comptes, inutile en kiosk
"accounts-daemon.service"
# colord - gestion couleurs, inutile
"colord.service"
# rpcbind - NFS/RPC, inutile
"rpcbind.service"
"rpcbind.socket"
# udisks2 - gestion disques amovibles, inutile en kiosk
# "udisks2.service" # Garder si on branche des cles USB
# upower - gestion alimentation, inutile sur Pi fixe
"upower.service"
)
for service in "${SERVICES_TO_DISABLE[@]}"; do
if systemctl is-enabled "$service" &>/dev/null 2>&1; then
systemctl disable "$service" 2>/dev/null || true
systemctl stop "$service" 2>/dev/null || true
log_info " Desactive: $service"
elif systemctl is-active "$service" &>/dev/null 2>&1; then
systemctl stop "$service" 2>/dev/null || true
log_info " Arrete: $service"
fi
done
# blkmapd - NFS block mapping, inutile
systemctl disable blkmapd.service 2>/dev/null || true
systemctl stop blkmapd.service 2>/dev/null || true
log_info "Services systeme inutiles desactives"
# -------------------------------------------------------------------
# 4. DESACTIVER PHP-FPM SI RASPAP N'EN A PAS BESOIN IMMEDIAT
# -------------------------------------------------------------------
# Note: RaspAP utilise php-fpm via lighttpd
# On le garde car RaspAP en a besoin pour l'interface admin
# Mais on peut reduire les workers
if [ -f /etc/php/8.4/fpm/pool.d/www.conf ]; then
log_info "Optimisation php-fpm (reduction des workers)..."
sed -i 's/^pm.max_children = .*/pm.max_children = 2/' /etc/php/8.4/fpm/pool.d/www.conf 2>/dev/null || true
sed -i 's/^pm.start_servers = .*/pm.start_servers = 1/' /etc/php/8.4/fpm/pool.d/www.conf 2>/dev/null || true
sed -i 's/^pm.min_spare_servers = .*/pm.min_spare_servers = 1/' /etc/php/8.4/fpm/pool.d/www.conf 2>/dev/null || true
sed -i 's/^pm.max_spare_servers = .*/pm.max_spare_servers = 1/' /etc/php/8.4/fpm/pool.d/www.conf 2>/dev/null || true
systemctl restart php8.4-fpm 2>/dev/null || true
log_info "php-fpm optimise (max 2 workers)"
fi
# -------------------------------------------------------------------
# RESUME
# -------------------------------------------------------------------
echo ""
echo "============================================="
echo " Optimisation desktop terminee !"
echo "============================================="
echo ""
echo "Composants desactives:"
echo " - pcmanfm (gestionnaire fichiers) ~38 Mo"
echo " - wf-panel-pi (barre de taches) ~37 Mo"
echo " - xdg-desktop-portal* (portails) ~77 Mo"
echo " - polkit-mate-auth-agent ~13 Mo"
echo " - gvfsd + volume monitors ~30 Mo"
echo " - ModemManager ~6 Mo"
echo " - accounts-daemon ~7 Mo"
echo " - colord ~10 Mo"
echo " - rpcbind + blkmapd ~4 Mo"
echo " - upower ~9 Mo"
echo " ----------------------------------------"
echo " Total estime: ~231 Mo"
echo ""
echo -e "${YELLOW}IMPORTANT: Redemarrer pour appliquer les changements${NC}"
echo " sudo reboot"
echo ""
echo "Pour restaurer le desktop original:"
echo " bash $0 --restore"
echo " sudo reboot"
echo ""