Grub en clavier FR

Bonjour,

J’ouvre un nouveau fil sur le sujet, celui de @Verner datant de 2017 est trop ancien.

J’essaye vainement de mettre grub en français et ça ne marche pas.
J’essaye aussi de faire en sorte que grubx64.efi soit aussi en clavier français, mais peine perdue aussi.

J’utilise des disques chiffrés. De fait, lors du démarrage, l’EFI me demande le mot de passe de chiffrement, mais avec un clavier qwerty ce qui n’aide pas pour la saisie.
idem une fois dans GRUB dont le shell reste obstinément en anglais.

je n’utilise pas de clavier AT mais USB, voir sans fil (RF ou bluetooth).

La langue d’affichage de GRUB et la disposition du clavier sont deux choses indépendantes.
Normalement grub-mkconfig/update-grub configure la langue d’affichage dans /boot/grub/grub.cfg. à partir de la langue du système. Exemple chez moi :

set lang=fr_FR

Apparemment il faut que la police unicode soit chargée, et peut-être que la sortie soit en mode graphique mais je n’ai pas regardé les détails. Bien sûr il faut que le fichier de la langue (ici fr.mo) soit présent dans /boot/grub/locale.

Pour la disposition du clavier, c’est une autre histoire et mes tentatives passées n’ont jamais été très concluantes donc j’ai fini par laisser tomber. Ce n’est pas possible avec le pilote clavier par défaut (utilisant le firmware BIOS/UEFI), il faut utiliser le pilote de clavier AT/PS/2 (at_keyboard) qui peut fonctionner avec un clavier USB si l’émulation clavier USB est prise en charge par le firmware BIOS/UEFI. GRUB a aussi un pilote natif pour clavier USB mais je ne me souviens plus s’il supporte les dispositions clavier.

Peux-tu en dire plus sur ta configuration ? Comment GRUB est-il installé ? Qu’est-ce qui est chiffré et comment ? Si je comprends bien il y a deux couches de chiffrement, un chiffrement au niveau du firmware du disque lui-même (déverrouillé par mot de passe demandé par le firmware BIOS/UEFI) et un chiffrement LUKS (déverrouillé par mot de passe demandé par GRUB si /boot est chiffré et/ou par l’initramfs (avec la disposition clavier du système si généré par initramfs-tools, je ne sais pas si généré par dracut).

j’ai deux partition:

  • une pour /boot/efi
  • une pour le reste chiffrée LUKs.

Toutes les autres partitions (sauf /boot/efi), y compris /boot (hors efi) se trouve en LVM sur LUKS.

De fait grub se trouve donc sur la partition chiffrée, c’est la raison pour laquelle le processus EFI (BOOT.EFI ou grubx64.efi) me demande de taper le mot de passe, avec un clavier qwerty.

Ensuite dans le menu grub je suis aussi en qwerty.

Quand je sélectionne mon système Debian dans grfub, il me redemande le mot de passe de chiffrement, mais cette fois ci je suis bien en azerty FR.

Avec Dracut, on peut régénérer un fichier grubx64.efi mais je n’arrive pas à y mettre le clavier, mais je ne suis pas sur de mon test car j’ai découvert que le système ne démarre pas avec grubx64.efi car il ne le trouve pas.

Cerci étant, en cherchant plu sloin j’ai remarqué que le système ne démarre pas sur le Boot Debian (Boot004 mais sur le Boot UEFI VBox Harddisk Boot002:

# efibootmgr -v
^[[3~BootCurrent: 0002
Timeout: 0 seconds
BootOrder: 0004,0000,0001,0002,0003
Boot0000* UiApp FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFile(462caa21-7614-4503-836e-8ab6f4662331)
Boot0001* UEFI VBOX CD-ROM VB2-01700376         PciRoot(0x0)/Pci(0x1,0x1)/Ata(1,0,0)N.....YM....R,Y.
Boot0002* UEFI VBOX HARDDISK VBbc308b48-907170fe        PciRoot(0x0)/Pci(0xd,0x0)/Sata(0,65535,0)N.....YM....R,Y.
Boot0003  EFI Internal Shell    FvVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FvFile(7c04a583-9e3e-4f1c-ad65-e05268d0b4d1)
Boot0004* debian        HD(1,GPT,b93ccde1-87b8-4580-8a05-21cd5e67b22a,0x800,0x68800)/File(\EFI\debian\grubx64.efi)

je ne sais pas pourquoi il m’indique qu’il ne trouve pas grubx64.efi:

BdsDxe: Failed to load Boot004 "debian" from HD(1,GPT,B93CCDE1-87B8-4580-8A05-21CD5E67B22A,0x800,0x68800)/\EFI\debian\grubx64.efi: Not Found
BdsDxe: loading Boot002 "UEFI VBOX HARDDISK VBbc308b48-907170fe " from PciRoot (0x0)/Pci (0xD,0x0)/Sata (0x0),0xFFFF,0x0)
BdsDxe: starting Boot002 "UEFI VBOX HARDDISK VBbc308b48-907170fe " from PciRoot (0x0)/Pci (0xD,0x0)/Sata (0x0),0xFFFF,0x0)

Pou rles partitions:

NAME               FSTYPE      FSVER            LABEL           UUID                                   FSAVAIL FSUSE% MOUNTPOINTS
sda1               vfat        FAT32                            B0A9-17EC                               205,3M     0% /boot/efi
└─sda                                                                                                                 
sr0                iso9660     Joliet Extension VBox_GAs_7.0.20 2024-07-10-14-17-04-74                                
cg01-swap          swap        1                                4d558465-8010-45b9-8af2-1e8c6d9ccb9d                  [SWAP]
└─sda2_crypt       LVM2_member LVM2 001                         2D5xHD-nucR-RJTB-M5qR-Y6z5-nngw-F5BJ8u                
  └─sda2           crypto_LUKS 2                                9eb9f1ac-3c90-4010-b07a-3c97b1ad56c2                  
    └─sda                                                                                                             
cg01-boot          ext4        1.0              BOOT            0be26620-af22-4ad8-a2d9-940a1491894a    124,2M    37% /boot
└─sda2_crypt       LVM2_member LVM2 001                         2D5xHD-nucR-RJTB-M5qR-Y6z5-nngw-F5BJ8u                HD(1,GPT,B93CCDE1-87B8-4580-8A05-21CD5E67B22A,0x800,0x68800)
  └─sda2           crypto_LUKS 2                                9eb9f1ac-3c90-4010-b07a-3c97b1ad56c2                  
    └─sda                                                                                                             
cg01-root          ext4        1.0              ROOT            734f31cb-c2df-43e2-b6c2-50aa0ca22bff      8,3G    29% /
└─sda2_crypt       LVM2_member LVM2 001                         2D5xHD-nucR-RJTB-M5qR-Y6z5-nngw-F5BJ8u                
  └─sda2           crypto_LUKS 2                                9eb9f1ac-3c90-4010-b07a-3c97b1ad56c2                  
    └─sda                                                                                                             
cg01-home          ext4        1.0              HOME            4773be70-df4b-4b36-9c7b-0e0c1e4b9128      4,8G     0% /home
└─sda2_crypt       LVM2_member LVM2 001                         2D5xHD-nucR-RJTB-M5qR-Y6z5-nngw-F5BJ8u                
  └─sda2           crypto_LUKS 2                                9eb9f1ac-3c90-4010-b07a-3c97b1ad56c2                  
    └─sda                                                                                                             
cg01-var           ext4        1.0              VAR             6e73bf3f-6159-4b38-a83f-23bbbf5c5f56     11,5G     4% /var
└─sda2_crypt       LVM2_member LVM2 001                         2D5xHD-nucR-RJTB-M5qR-Y6z5-nngw-F5BJ8u                
  └─sda2           crypto_LUKS 2                                9eb9f1ac-3c90-4010-b07a-3c97b1ad56c2                  
    └─sda                                                                                                             
cg01-var_log       ext4        1.0              LOG             69d0e8b5-eb94-4a4e-b408-e127ad0e32cf      4,6G     4% /var/log
└─sda2_crypt       LVM2_member LVM2 001                         2D5xHD-nucR-RJTB-M5qR-Y6z5-nngw-F5BJ8u                
  └─sda2           crypto_LUKS 2                                9eb9f1ac-3c90-4010-b07a-3c97b1ad56c2                  
    └─sda                                                                                                             
cg01-var_log_audit ext4        1.0              AUDIT           673fe2c3-7b8c-41ba-8166-aa8d76b3ed4c      4,7G     1% /var/log/audit
└─sda2_crypt       LVM2_member LVM2 001                         2D5xHD-nucR-RJTB-M5qR-Y6z5-nngw-F5BJ8u                
  └─sda2           crypto_LUKS 2                                9eb9f1ac-3c90-4010-b07a-3c97b1ad56c2                  
    └─sda                                                                                                             
cg01-var_tmp       ext4        1.0              VARTMP          9cd344c7-81b3-4aea-8b15-e4a8ae54c2e3      2,3G     0% /var/tmp
└─sda2_crypt       LVM2_member LVM2 001                         2D5xHD-nucR-RJTB-M5qR-Y6z5-nngw-F5BJ8u                
  └─sda2           crypto_LUKS 2                                9eb9f1ac-3c90-4010-b07a-3c97b1ad56c2                  
    └─sda                                                                                                             
cg01-tmp           ext4        1.0              TMP             0a8f748f-dfd7-43a1-bbfb-f74a7df3c423      2,3G     0% /tmp
└─sda2_crypt       LVM2_member LVM2 001                         2D5xHD-nucR-RJTB-M5qR-Y6z5-nngw-F5BJ8u                
  └─sda2           crypto_LUKS 2                                9eb9f1ac-3c90-4010-b07a-3c97b1ad56c2                  
    └─sda                                                                                                             

Pour l’arborescence de /boot:

 tree -d /boot
/boot
├── efi
│   └── EFI
│       ├── BOOT
│       └── debian
├── grub
│   ├── fonts
│   ├── layouts
│   ├── locale
│   └── x86_64-efi
└── lost+found

Pourrait-il y avoir un lien avec le fait que c’est /boot/efi/EFI… ?
Ou dois-je considérer que pour lui /boot/efi, c’est HD(1,GPT,b93ccde1-87b8-4580-8a05-21cd5e67b22a,0x800,0x68800)/ ?

EDIT: je fais ces tests sur une machine virtuelle Virtualbox avec Virtualbox 7.0.

Avec :
efibootmgr -c -d /dev/sdb -p 1 -w -L debian -l '\EFI\debian\grubx64.efi'
J’ai pu recréer un boot efi debian qui fonctionne cette fois, ne me reste plus qu’à le remplacer avec un qui contient les paramètres de langue.

Non, GRUB est installé dans la partition EFI (grubx64.efi) et c’est lui, pas l’UEFI, qui demande le mot de passe pour déchiffrer le conteneur LUKS.

À ce stade ce n’est pas GRUB mais l’initramfs qui demande le mot de passe. GRUB a déjà déchiffré le conteneur LUKS pour afficher le menu, il n’a plus besoin du mot de passe pour charger le noyau et l’initramfs.
Lorsque cryptsetup-initramfs est installé, il modifie l’initramfs pour que la disposition clavier soit celle du système. Sinon par défaut le clavier est en QWERTY, sauf si on a mis KEYMAP=y dans /etc/initramfs-tools/initramfs.conf.
Note : puisque /boot est chiffré, tu pourrais inclure le mot de passe de chiffrement dans l’initramfs pour qu’il ne soit pas demandé une deuxième fois. Mais il faudrait restreindre les droits d’accès en lecture à /boot et faire attention aux sauvegardes si elles contiennent l’initramfs.

Je ne vois pas le rapport entre dracut (générateur d’initramfs) et l’image EFI de GRUB. Peux-tu préciser ?

Comment as-tu installé GRUB ?

Tu n’as pas dit comment tu installais GRUB et quel type d’image tu utilisais.

L’image monolithique signée est utilisée par grub-install par défaut (sans l’option --no-uefi-secure-boot) si le paquet grub-efi-amd64-signed est installé
Cette image ne contient pas les modules at_keyboard ni usb_keyboard. Pour les charger avant de déchiffrer le volume LUKS, il faut qu’ils soient installés dans la partition EFI, ce qui peut se faire en exécutant

grub-install --boot-directory=/boot/efi --efi-directory=/boot/efi

Il faudra aussi installer le fichier de disposition clavier généré avec grub-mklayout dans la partition EFI pour que GRUB puisse le charger, et modifier le script initial EFI/debian/grub.cfg de la partition EFI pour charger la disposition clavier et chercher le fichier de menu grub.cfg dans /boot et non dans la partition EFI.

Si tu construis ta propre image de GRUB avec grub-mkimage ou grub-install, tu peux y inclure les modules nécessaires pour utiliser une disposition clavier. Tu peux même y inclure une image de système de fichier (memdisk) contenant la disposition clavier et un script grub.cfg contenant les commandes pour la charger.

c’est ce que j’était en train de regarder justement avec grub-mkimage.
Dans /boot/efi je n’ai que le seul fichier grubx64.efi, et de ce que j’ai pu trouver (en très mal documenté) c’est qu’on pouvait en générer un avec ce que l’on voulais dedans.Si j’ai bien compris, il me faut une grub.cfg minimal dans /boot/efi pour pouvoir y intégrer les modules pour le clavier.

Si tu construis une image personnalisée avec grub-mkimage, il faudra au minimum inclure les modules nécessaires pour accéder au contenu de la partition EFI : part_gpt et/ou part_msdos pour la table de partition, fat pour le système de fichiers. Les fichiers de langues, les polices, les modules et le grub.cfg initial pourront être installés dans un répertoire de la partition EFI spécifié par l’option --prefix.