fix(Installer ─ Multi-Desktop): Fix Multi Desktop

This commit is contained in:
2026-05-28 18:00:25 +02:00
parent 40fd289a9f
commit 241bd5c219
29 changed files with 116 additions and 621 deletions
@@ -1,65 +1,8 @@
---
# Module packagechooser : sélection d'environnement de bureau
# Un seul choix possible (boutons radio)
mode: required
id: desktop
items:
- id: xfce
packages: []
name:
- locale: ""
value: "Xfce (Recommandé)"
description:
- locale: ""
value: "Léger, rapide et stable — déjà inclus dans l'ISO, aucun téléchargement."
- id: kde
packages:
- plasma-meta
- konsole
- dolphin
- sddm
name:
- locale: ""
value: "KDE Plasma"
description:
- locale: ""
value: "Bureau moderne, riche en fonctionnalités et très personnalisable."
- id: gnome
packages:
- gnome
- gdm
name:
- locale: ""
value: "GNOME"
description:
- locale: ""
value: "Interface épurée centrée sur la productivité."
- id: hyprland
packages:
- hyprland
- xdg-desktop-portal-hyprland
- xdg-desktop-portal-gtk
- waybar
- wofi
- kitty
- swaybg
- swayidle
- swaylock
- xorg-xwayland
- wl-clipboard
- grim
- slurp
- qt5-wayland
- qt6-wayland
- sddm
name:
- locale: ""
value: "Hyprland"
description:
- locale: ""
value: "Compositeur Wayland dynamique — tiling Wayland (utilisateurs avancés)."
# Minimal Calamares view module config for desktop selection
# This tells Calamares to use our QML page from the branding folder.
module: view
name: desktop
qml: "branding/fws/desktop.qml"
title: "Choix de l'environnement"
description: "Sélectionne le bureau à installer"
@@ -1,43 +0,0 @@
#!/usr/bin/env python3
"""
Calamares job : lit le choix de bureau depuis GlobalStorage
(packagechooser_desktop) et l'écrit dans /run/fws-desktop pour
que shellprocess puisse appeler le bon fws-desktop-init-*.
"""
import libcalamares
VALID_DESKTOPS = {"xfce", "kde", "gnome", "hyprland"}
FALLBACK = "xfce"
def pretty_name():
return "Sauvegarde du choix d'environnement de bureau"
def run():
gs = libcalamares.globalstorage
raw = gs.value("packagechooser_desktop")
# packagechooser peut renvoyer une str ou une liste selon la version
if isinstance(raw, list):
choice = raw[0] if raw else FALLBACK
elif isinstance(raw, str):
choice = raw.strip()
else:
choice = FALLBACK
if choice not in VALID_DESKTOPS:
choice = FALLBACK
try:
with open("/run/fws-desktop", "w") as fh:
fh.write(choice)
except OSError as exc:
return (
"Impossible d'écrire /run/fws-desktop",
f"{exc}\nLe bureau sera xfce par défaut.",
)
libcalamares.utils.debug(f"fws-desktop-choice : bureau sélectionné = {choice}")
return None
@@ -1,5 +0,0 @@
---
type: "job"
name: "fws-desktop-choice"
interface: "python"
script: "main.py"
@@ -1,33 +0,0 @@
---
# packagechooser — un seul choix (radio buttons)
# method: legacy → stocke l'id dans GlobalStorage["packagechooser_packagechooser"]
# Les scripts fws-desktop-init-* gèrent l'installation réelle.
mode: required
method: legacy
items:
- id: cli
packages: []
name: "CLI uniquement"
description: "Installation minimale en ligne de commande, sans interface graphique."
- id: kde
packages: []
name: "KDE Plasma"
description: "Bureau moderne, hautement personnalisable et riche en fonctionnalités."
- id: gnome
packages: []
name: "GNOME"
description: "Interface épurée et intuitive, centrée sur la productivité."
- id: xfce
packages: []
name: "Xfce"
description: "Léger, rapide et stable. Idéal pour tous les systèmes, y compris les machines plus anciennes."
- id: hyprland
packages: []
name: "Hyprland"
description: "Compositeur Wayland dynamique avec tiling automatique (utilisateurs avancés)."
@@ -1,6 +1,10 @@
---
# Étape post-unpackfs : retire les paquets live-only.
# Tous les paquets utiles sont déjà dans le squashfs.
# Pas besoin d'installer quoi que ce soit depuis internet.
backend: pacman
update_db: true
update_db: false
update_system: false
operations:
@@ -1,33 +1,21 @@
---
# dontChroot: true = exécuté dans le live system.
# ${ROOT} → substitué par Calamares (GlobalStorage "rootMountPoint").
# $(cat ...) → substitution bash pure, Calamares ne la touche PAS.
# Exécuté HORS chroot (live system) pour accéder à l'ISO montée.
# But : restaurer le kernel (retiré du squashfs par mkarchiso) et
# corriger les fichiers mkinitcpio archiso-spécifiques.
dontChroot: true
timeout: 7200
script:
# Copie le kernel depuis l'ISO vers /boot du système cible
- 'cp "$(find /run/archiso/bootmnt -name vmlinuz-linux 2>/dev/null | head -1)" "${ROOT}/boot/vmlinuz-linux"'
- 'DESKTOP="$(cat /run/fws-desktop 2>/dev/null || printf xfce)"'
- 'if [ -z "$DESKTOP" ]; then DESKTOP="xfce"; fi'
- 'if [ ! -f "${ROOT}/usr/local/bin/fws-desktop-init-$DESKTOP" ]; then echo "Script bureau introuvable: $DESKTOP" >&2; exit 1; fi'
- 'chroot "${ROOT}" /bin/bash "/usr/local/bin/fws-desktop-init-$DESKTOP"'
# DNS : copie le vrai fichier resolv.conf (résout le symlink cassé dans le chroot)
- 'cp --remove-destination "$(readlink -f /etc/resolv.conf)" "${ROOT}/etc/resolv.conf"'
# Bypass temporaire du keyring pacman (vide dans le chroot fraîchement installé)
# Empêche "error: keyring is not writable" lors du pacman -Sy dans le chroot.
- 'sed -i "s/^SigLevel[[:space:]]*=.*/SigLevel = Never/" "${ROOT}/etc/pacman.conf" || true'
# Lance le script d'init du bureau choisi
- 'chroot "${ROOT}" /bin/bash "/usr/local/bin/fws-desktop-init-$(cat /run/fws-desktop 2>/dev/null || echo xfce)"'
# Restaure SigLevel correct pour l'utilisateur final
- 'sed -i "s/^SigLevel[[:space:]]*=.*/SigLevel = Required DatabaseOptional/" "${ROOT}/etc/pacman.conf" || true'
# Copie le keyring du live system → le système installé aura un keyring fonctionnel
- 'mkdir -p "${ROOT}/etc/pacman.d/gnupg" && chmod 700 "${ROOT}/etc/pacman.d/gnupg" && cp -a /etc/pacman.d/gnupg/. "${ROOT}/etc/pacman.d/gnupg/"'
# Supprime le drop-in archiso (surcharge HOOKS inexistants post-install)
# Supprime le drop-in archiso (surcharge HOOKS avec des hooks inexistants post-install)
- 'rm -f "${ROOT}/etc/mkinitcpio.conf.d/archiso.conf"'
# Remplace le linux.preset archiso par le preset standard (default + fallback)
# \x27 = ' et \x22 = " pour éviter les conflits de quotes dans YAML/bash
- 'printf "PRESETS=(\x27default\x27 \x27fallback\x27)\nALL_kver=\x22/boot/vmlinuz-linux\x22\nALL_config=\x22/etc/mkinitcpio.conf\x22\nALL_microcode=(/boot/*-ucode.img)\ndefault_image=\x22/boot/initramfs-linux.img\x22\nfallback_image=\x22/boot/initramfs-linux-fallback.img\x22\nfallback_options=\x22-S autodetect\x22\n" > "${ROOT}/etc/mkinitcpio.d/linux.preset"'
@@ -12,7 +12,7 @@ sequence:
- keyboard
- partition
- users
- packagechooser
- desktop
- summary
- exec:
- partition
@@ -27,7 +27,6 @@ sequence:
- hwclock
- networkcfg
- packages
- fws-desktop-choice
- shellprocess
- initcpiocfg
- initcpio