#!/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 ""