253 lines
9.4 KiB
Bash
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 ""
|