I was poking around with my Arch Linux installation and I learned that the initcpio was done using shell scripts that I could write myself, and I ended up trying to make my system boot process look decent without using Plymouth.

Custom initcpio hooks

You can place custom shell scripts in /etc/initcpio/hooks, and have a script to install it to the initramfs in /etc/initcpio/install. This is detailed further in the Arch Linux wiki page.

You’ll want to create a file named “welcome” or any other name you want in /etc/initcpio/hooks. It will contain a single function run_hook, and within it you can put echo or any other commands, as long as it’s in the busybox environment that the initramfs uses. Here’s what your welcome hook could look like:

#!/bin/sh
run_hook() {
	echo -e "Welcome to YOUR_COMPUTER, YOUR_NAME."
	echo -e "Getting everything set up for you..."
}

You’ll also want to create a file with the same name in /etc/initcpio/install, and it will have two functions: build and help. The help function just outputs a message when you do mkinitcpio -H welcome, so it can contain any text you want. The build function will just contain add_runscript, to add the file we put in the hooks folder. Here’s what yours could look like:

#!/bin/sh
build() {
	add_runscript
}

help() {
	echo "welcoem mesage"
}

When that’s done, you can add the welcome hook somewhere early on in the hooks part of /etc/mkinitcpio.conf, and run mkinitcpio -P as root to regenerate the initramfs to contain your new script. Now when your computer boots, it should run our script.

If your cool new message is quickly pushed up and off the screen by boot messages, you can add quiet to your kernel parameters to silence the extra messages that the kernel usually spits out while booting up.

Console font

The default font for the console may not be your favorite. Thankfully, there are plenty of fonts you can try out, kept in /usr/share/kbd/consolefonts/, and can be previewed using setfont. I use the ter-c18n font, and I have it set persistently in /etc/vconsole.conf. To have the console load your font early on in the boot process, you can just add consolefont somewhere in your mkinitcpio hooks array.

Custom colors

Your console supports custom colors, and can be easily set using linux-vt-setcolors, available from the AUR as setcolors-git. Also install the mkinitcpio-colors program from the AUR as mkinitcpio-colors-git. You can add your color scheme to /etc/vconsole.conf using the format specified on the project’s README:

COLOR_0=000000 # black
COLOR_1=550000 # darkred
...
COLOR_15=ffffff # white

You can use something like terminal.sexy to get colors that you like, and then add the colors to the vconsole config matching the numbers 0-15 to the same colors. Once you’re done with that, add the colors hook to that same hooks array we’ve been adding stuff to, run mkinitcpio -P, and reboot. You should be greeted with your welcome message, in your own font, with your own colors.

Extra

I have an encrypted hard drive, so I’m able to put a message that appears only after I unlock my drive. I created a second, very similar hook in /etc/initcpio/hooks and created its /etc/initcpio/install counterpart, and put a funny warning in it, and in the /etc/mkinitcpio.conf hooks array, I put my new hook BEFORE the encrypt hook, and I put my welcome hook AFTER the encrypt hook. Since the hooks run in order, the warning is displayed, and if I type the correct password, I’m greeted by my laptop, and it loads everything up.

image

I hope this has been helpful not only for making a cool boot screen without Plymouth, but I hope I also helped you learn more about how Arch Linux boots its system using an initramfs. If anything is unclear, email me via the address at the bottom of the page, and I’ll update this post.