Remplacez Tux par n'importe quel logo sur le boot de votre Linux

Vous avez déjà rêvé de virer le petit Tux qui s’affiche au démarrage de votre machine Linux pour le remplacer par un truc plus perso ?
Bon OK, sur les distros modernes avec Plymouth ou un bootsplash, on ne le voit plus trop ce logo du kernel… mais si vous bootez en mode console framebuffer, il est bien là ! Petite précision quand même, le logo du kernel ne s’affiche pas magiquement dès qu’on est en "console framebuffer". En fait, pour que ça marche, il faut à la fois que le support de la console framebuffer soit activé dans le kernel (CONFIG_FB_CONSOLE=y) et qu’un framebuffer soit réellement disponible au moment du boot.
Sur les machines modernes, ça passe souvent par simpledrm + KMS, ce qui fonctionne très bien dans la majorité des cas. Mais selon le GPU et le firmware, il arrive encore que l’écran reste noir jusqu’au passage en userspace, même sans Plymouth. Le** logo peut s’afficher**, mais ce n’est pas garanti à 100 % sur toutes les configs.
Bref, c’était possible avant mais fallait se farcir pas mal de bidouille dans les sources du kernel, et c’était pas franchement user-friendly.
Hé bien bonne nouvelle, Vincent Mailhol vient de proposer
un patch qui simplifie tout ça !
Du coup, avec ce nouveau patch pour un prochain kernel, vous pouvez spécifier directement le chemin de votre logo personnalisé dans la configuration Kconfig. Fini les bidouilles dans les Makefiles et les sources, y’a maintenant trois options toutes propres : une pour le logo monochrome (format PBM), une pour la version 16 couleurs (PPM), et une pour la version 224 couleurs (PPM aussi). Et c’est à la compilation, que l’outil pnmtologo convertit votre image en code C qui est ensuite directement intégré au kernel. Et ensuite, c’est le framebuffer qui l’affiche au boot comme d’hab.
Et là je me suis dit que ça serait cool de vous proposer mon logo Korben tout prêt, histoire que vous puissiez tester direct. Du coup je vous ai préparé le fichier logo_linux_clut224.ppm au bon format (PPM ASCII 224 couleurs), vous n’avez plus qu’à le télécharger et suivre le tuto ci-dessous.
Télécharger le logo Korben pour le boot Linux

Ce qu’il vous faut !
Bon alors avant de vous lancer, vérifiez que vous avez les sources du dernier kernel Linux, les outils netpbm pour la conversion d’image, et les trucs de compilation habituels (gcc, make…etc.). Hop, une fois que c’est bon, on peut attaquer.
L’installation rapide (une fois le patch intégré)
Avec le nouveau patch (une fois qu’il sera mergé dans le kernel), c’est devenu hyper simple. Dans menuconfig ou xconfig, allez dans :
Device Drivers -> Graphics Support -> Bootup logo
-> Standard 224-color Linux logo file: /chemin/vers/logo_linux_clut224.ppm
Voilà, vous spécifiez le chemin et c’est réglé. Mais si vous êtes sur un kernel plus ancien, faudra passer par la méthode classique.
La méthode classique (testée sur les kernels 5.x/6.x)
Commencez par installer les dépendances. Sous Debian/Ubuntu :
sudo apt install netpbm build-essential libncurses-dev bison flex libssl-dev libelf-dev
Sous Fedora/RHEL (téléchargez les vraies sources kernel depuis kernel.org) :
sudo dnf install netpbm-progs ncurses-devel elfutils-libelf-devel openssl-devel bc bison flex
Et sous Arch :
sudo pacman -S netpbm base-devel
Ensuite, récupérez les sources du kernel. Soit vous chopez celles de votre version actuelle avec apt source linux-image-$(uname -r), soit vous téléchargez la dernière sur kernel.org. Une fois décompressées, copiez le logo Korben à la place du logo par défaut. Sachez quand même que remplacer directement les fichiers dans drivers/video/logo/ fonctionne très bien pour un test perso, mais ce n’est clairement pas une méthode propre sur le long terme.
Ça complique les mises à jour, ça casse la reproductibilité du build, et c’est totalement inacceptable dans un contexte de packaging distro.
Mais bon, pour bidouiller chez soi, comme on est en train de le faire là, aucun souci. Mais pour un usage propre ou maintenable, mieux vaut éviter… et justement, le fameux patch dont je parlais plus haut va dans ce sens !!
cp /chemin/vers/logo_linux_clut224.ppm drivers/video/logo/logo_linux_clut224.ppm
Maintenant on configure le kernel. Copiez d’abord votre config actuelle avec cp /boot/config-$(uname -r) .config puis lancez make menuconfig. Naviguez vers :
Device Drivers --->
Graphics support --->
[*] Bootup logo --->
[*] Standard 224-color Linux logo
Console display driver support --->
[*] Framebuffer Console support
Assurez-vous que ces options sont cochées avec * (ce sont des booléens, pas des modules).
Ensuite, y’a plus qu’à compiler. Adaptez le -j selon votre nombre de coeurs :
make -j$(nproc)
sudo make modules_install
sudo make install
Sur Debian/Ubuntu, lancez
sudo update-grub
Sur Fedora, c’est
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Et si votre distro utilise un initramfs, pensez à le régénérer aussi (sudo update-initramfs -u ou équivalent).
Et hop, redémarrez et admirez votre nouveau logo au boot !
Créez votre propre logo
Si vous voulez utiliser une autre image que mon logo Korben, voici comment la convertir au bon format :
sudo apt install imagemagick netpbm
convert mon_logo.png -background white -flatten -colors 224 temp.png
pngtopnm temp.png | ppmquant 224 | pnmtoplainpnm > logo_linux_clut224.ppm
rm temp.png
Le kernel attend un format PPM ASCII (P3) avec maximum 224 couleurs. Pour la taille, pas de contrainte stricte mais entre 80×80 et 200×200 pixels c’est l’idéal. À noter aussi que cette histoire de taille "idéale" reste surtout une recommandation et pas une règle imposée par le kernel car techniquement, Linux ne fixe aucune dimension maximale ou minimale pour le logo. L’image est simplement centrée à l’écran, sans mise à l’échelle.

Là je me suis loupé !
Du coup, un logo trop grand ne sera pas redimensionné mais sera juste rogné ou visuellement dégueu selon la résolution du framebuffer.
Les tailles autour de 80×80 à 200×200 pixels donnent en général le meilleur rendu, mais c’est avant tout du bon sens. Et évitez les dégradés trop complexes vu la limite de couleurs.
Et si ça marche pas ?
Sur les kernels récents (6.x et plus), sachez que simpledrm joue un rôle clé dans l’affichage du logo. En effet, sur beaucoup de machines modernes, il a pris le relais des anciens framebuffer comme efifb et permet d’avoir un affichage très tôt au boot, avant même le lancement de l’userspace.
Donc si le logo ne s’affiche pas alors que tout semble correctement configuré, le problème vient parfois simplement du fait que le framebuffer n’est pas encore actif à ce stade du démarrage, selon le GPU, le firmware ou la façon dont le driver est initialisé.
Autre cause fréquente, Plymouth (ou un autre bootsplash) qui masque tout simplement le logo du kernel. Pour vérifier, vous pouvez désactiver Plymouth temporairement en ajoutant plymouth.enable=0 aux paramètres kernel dans GRUB.
Rnfin, si vous utilisez un driver graphique KMS moderne (ce qui est le cas de la majorité des systèmes actuels), le logo devrait alors s’afficher pendant les toutes premières secondes du boot. En cas d’écran noir persistant, un test ponctuel avec nomodeset peut aider à diagnostiquer le problème, mais ce n’est pas une solution à utiliser systématiquement sur les machines récentes.
Et, pour les problèmes de couleurs bizarres, assurez-vous que votre fichier est bien en format P3 (ASCII) et pas P6 (binaire), quitte à relancer la conversion avec pnmtoplainpnm.
Dernière précision qui évite pas mal de confusions et après j’arrête de vous en faire des tartines, ce logo de boot est directement intégré au kernel, et pas à l’initramfs. Autrement dit, régénérer l’initramfs avec update-initramfs ou équivalent n’a aucun impact sur le logo du kernel. Donc si vous changez le logo, c’est bien le kernel lui-même qu’il faut recompiler et réinstaller.
Bref, perso, je trouve ça super cool qu’on puisse enfin personnaliser ce logo sans se prendre la tête. Ça fait un peu geek old-school c’est vrai, mais y’a un petit côté frime à avoir son propre logo au démarrage de sa bécane, que j’aime bien ^^.
Source : korben.info