====== Clavier FR au prompt LUKS (CachyOS + Plymouth) ======
**Symptôme** : au démarrage, l'invite de mot de passe LUKS interprète le clavier en **us**, alors que ''/etc/vconsole.conf'' contient ''KEYMAP=fr''.
**Cause** : avec la pile initramfs busybox par défaut (''udev'' + ''keymap'' + ''encrypt''), Plymouth n'applique pas la keymap chargée dans la console. Solution : basculer sur la pile **systemd** (''systemd'' + ''sd-vconsole'' + ''sd-encrypt''), dont l'invite (''systemd-cryptsetup'') honore ''vconsole.conf''.
Manip sur le déverrouillage de la racine chiffrée : une erreur rend le système non amorçable (récupérable, mais pénible). Règles d'or, tirées d'un plantage réel :
* faire les sauvegardes de l'étape 0 ;
* **vérifier le contenu de l'initramfs AVANT de rebooter** (étape 4) ;
* savoir quelle **entrée de boot** et quel **initrd** sont réellement démarrés (étape 5 — c'est le piège n°1) ;
* garder un live USB sous la main et lire la section //Récupération// avant de commencer.
===== 0. Pré-requis et sauvegardes =====
cat /etc/vconsole.conf # doit contenir KEYMAP=fr (XKBLAYOUT=fr conseillé)
sudo cp /etc/mkinitcpio.conf /etc/mkinitcpio.conf.bak
sudo cp -r /boot/loader/entries /boot/loader/entries.bak
Noter l'**UUID de la partition LUKS** (type ''crypto_LUKS'') et le **nom du mapper** :
lsblk -f # UUID de la partition crypto_LUKS, ex. 4f5ce050-…
ls /dev/mapper/ # nom actuel, ex. luks-4f5ce050-…
Ne pas confondre avec l'UUID du **système de fichiers** à l'intérieur (celui de ''root=UUID=…'').
===== 1. Déclarer le volume : crypttab.initramfs (méthode principale) =====
C'est la méthode **native et robuste** de ''sd-encrypt'' : elle fonctionne quelle que soit l'entrée de boot, sans toucher à la cmdline.
sudo tee /etc/crypttab.initramfs <<'EOF'
UUID= none luks
EOF
Exemple : ''luks-4f5ce050-… UUID=4f5ce050-… none luks''
Alternative cmdline : ''rd.luks.name=='' dans la ligne ''options'' de l'entrée démarrée. Fonctionne aussi, mais fragile : il faut l'ajouter dans **chaque** entrée, et les entrées auto-générées sont réécrites. Préférer ''crypttab.initramfs''. Ne PAS supprimer ''cryptdevice='' existant : il est ignoré par ''sd-encrypt'' et permet un retour arrière.
===== 2. HOOKS : pile systemd =====
Dans ''/etc/mkinitcpio.conf'', remplacer la ligne ''HOOKS'' :
HOOKS=(base systemd autodetect microcode kms modconf keyboard sd-vconsole block plymouth sd-encrypt filesystems)
Correspondances avec la pile busybox :
* ''udev'' → ''systemd''
* ''keymap consolefont'' → ''sd-vconsole'' (lit ''vconsole.conf'' : keymap + police)
* ''encrypt'' → ''sd-encrypt''
* ''resume'' supprimé (hibernation gérée via ''resume='' de la cmdline)
* ''keyboard'' conservé, **avant** ''sd-vconsole''
===== 3. Régénérer =====
sudo mkinitcpio -P
Doit finir par ''Initcpio image generation successful'' pour chaque noyau, sans ''ERROR''.
===== 4. VÉRIFIER l'image avant de rebooter =====
sudo lsinitcpio /boot/initramfs-linux-cachyos.img | grep -cE 'systemd-cryptsetup' # attendu : >= 1
sudo lsinitcpio /boot/initramfs-linux-cachyos.img | grep -c 'etc/crypttab' # attendu : 1
sudo lsinitcpio /boot/initramfs-linux-cachyos.img | grep -c 'etc/vconsole.conf' # attendu : 1
Un ''0'' quelque part → **ne pas rebooter**, corriger d'abord (hook manquant, crypttab absent, vconsole vide).
===== 5. Identifier l'entrée de boot réellement utilisée (PIÈGE N°1) =====
bootctl list
Deux familles d'entrées peuvent coexister :
* **Statique** (ex. ''linux-cachyos.conf'') : ''initrd /boot/initramfs-linux-cachyos.img'' → régénérée par ''mkinitcpio -P'' ✓
* **Auto-générée kernel-install** : ''id'' préfixé par le //machine-id//, ''initrd /boot///initrd'' → **PAS régénérée par ''mkinitcpio -P''** → initrd **périmé** avec l'ancienne pile ✗
C'est LE piège : booter une entrée auto-générée après la bascule → l'initrd périmé + la nouvelle cmdline peuvent se contredire → blocage sur « a start job is running for /dev/disk/by-uuid/… » sans invite de mot de passe.
Après reboot, **choisir explicitement l'entrée statique** au menu (Espace au démarrage pour l'afficher). Les initrd ''/boot//…'' seront régénérés au prochain upgrade de noyau ; on peut aussi les régénérer de suite avec ''sudo kernel-install add-all'' (ou supprimer ces entrées si non désirées).
===== 6. Rebooter et tester =====
Reboot → entrée **statique** → invite LUKS → tester un caractère discriminant us/fr (''a''/''q'', ''m''/'':'').
Après connexion : ''cat /proc/cmdline'' pour confirmer l'entrée démarrée.
===== Récupération (si blocage au boot) =====
==== A. Sans live USB : depuis le menu de boot ====
- Allumer le PC, **maintenir Espace** dès l'écran du fabricant → menu systemd-boot.
- Surligner l'entrée, touche ''e'' → édition de la ligne ''options''.
- Retirer ''quiet splash'' (pour voir les messages), démarrer.
- Si blocage « start job … /dev/disk/by-uuid/ » : attendre ~1 min 30 → shell d'urgence. Déverrouiller à la main :
cryptsetup open /dev/disk/by-uuid/
systemctl default
- Pour forcer un shell tôt dans l'initramfs : ajouter ''rd.systemd.unit=emergency.target'' à la ligne (''rd.break'' est **dracut**, inopérant sur mkinitcpio).
==== B. Avec live USB (CachyOS, Debian, etc.) ====
sudo cryptsetup open /dev/disk/by-uuid/ cryptroot
sudo mount -o subvol=/@ /dev/mapper/cryptroot /mnt # btrfs : monter LE SOUS-VOLUME @
ls /mnt # doit montrer etc, usr… (si @ @home → remonter avec subvol=/@)
sudo mount /dev/ /mnt/boot
Chroot — avec ''arch-chroot /mnt'' si dispo, sinon (live Debian…) :
sudo mount -t proc proc /mnt/proc
sudo mount --rbind /sys /mnt/sys
sudo mount --rbind /dev /mnt/dev
sudo chroot /mnt
Puis rejouer les étapes 1→4. Sortie :
exit
sudo umount -R /mnt # si « target is busy » : umount -l -R /mnt
reboot
==== C. Retour arrière complet ====
Dans le chroot : restaurer ''/etc/mkinitcpio.conf.bak'' et ''/boot/loader/entries.bak'', puis ''mkinitcpio -P''. La pile busybox reprend via le ''cryptdevice='' conservé (prompt en us, mais système amorçable).
===== Erreurs à ne pas reproduire (retour d'expérience) =====
* Éditer la cmdline **sans** vérifier quelle entrée/initrd démarre réellement (→ étape 5).
* Rebooter **sans** vérifier le contenu de l'image (→ étape 4).
* Se fier au seul ''rd.luks.name='' en cmdline au lieu de ''crypttab.initramfs''.
* Confondre l'UUID **LUKS** (partition ''crypto_LUKS'') et l'UUID du **système de fichiers** (''root=UUID=…'') : le « start job » qui bloque affiche souvent le second alors que le problème est sur le premier.
* ''root=/dev/mapper/…'' n'est PAS requis : ''root=UUID='' fonctionne, le fs est trouvé une fois le LUKS ouvert.