diff options
author | Simon Rettberg | 2020-08-05 17:55:14 +0200 |
---|---|---|
committer | Your Name | 2020-08-05 17:55:14 +0200 |
commit | 4222344e4788616de37e65b99483940e6d60bab6 (patch) | |
tree | c889918cc5291d6fef5238de82489b84d8265a44 /core/modules/kexec-reboot | |
parent | [run-virt] Update README with missing TMPCONFIG (diff) | |
download | mltk-4222344e4788616de37e65b99483940e6d60bab6.tar.gz mltk-4222344e4788616de37e65b99483940e6d60bab6.tar.xz mltk-4222344e4788616de37e65b99483940e6d60bab6.zip |
[kexec-reboot] Add splash screen
Diffstat (limited to 'core/modules/kexec-reboot')
4 files changed, 43 insertions, 1 deletions
diff --git a/core/modules/kexec-reboot/data/etc/systemd/system/systemd-kexec.service.d/00-splash.conf b/core/modules/kexec-reboot/data/etc/systemd/system/systemd-kexec.service.d/00-splash.conf new file mode 100644 index 00000000..8d545b1b --- /dev/null +++ b/core/modules/kexec-reboot/data/etc/systemd/system/systemd-kexec.service.d/00-splash.conf @@ -0,0 +1,2 @@ +[Service] +ExecStartPre=-/opt/openslx/scripts/systemd-kexec_pre diff --git a/core/modules/kexec-reboot/data/opt/openslx/images/kexec-reboot.ppm b/core/modules/kexec-reboot/data/opt/openslx/images/kexec-reboot.ppm Binary files differnew file mode 100644 index 00000000..6e3e96cb --- /dev/null +++ b/core/modules/kexec-reboot/data/opt/openslx/images/kexec-reboot.ppm diff --git a/core/modules/kexec-reboot/data/opt/openslx/scripts/systemd-kexec_load b/core/modules/kexec-reboot/data/opt/openslx/scripts/systemd-kexec_load index 4a78e83e..c7dae7bc 100755 --- a/core/modules/kexec-reboot/data/opt/openslx/scripts/systemd-kexec_load +++ b/core/modules/kexec-reboot/data/opt/openslx/scripts/systemd-kexec_load @@ -96,7 +96,11 @@ kexec_load() { newKcl="$( cat /proc/cmdline )" # TODO patch all the ipv4.* vars if they exist fi - newKcl="$(printf "%s" "${newKcl}" | sed -r 's/\bvga=\S*//g') vga=current" + if grep -q '\bsplash\b' /proc/cmdline; then + newKcl="$(printf "%s" "${newKcl}" | sed -r 's/\bvga=\S*//g') vga=current" + else + newKcl="$(printf "%s" "${newKcl}" | sed -r 's/\bvga=\S*//g')" + fi if ! kexec -l "${newKernel}" --initrd "${newInitRd}" --command-line="${newKcl}"; then echo "Failed to load kernel/initrd from ${tempdir}" diff --git a/core/modules/kexec-reboot/data/opt/openslx/scripts/systemd-kexec_pre b/core/modules/kexec-reboot/data/opt/openslx/scripts/systemd-kexec_pre new file mode 100755 index 00000000..816a73ef --- /dev/null +++ b/core/modules/kexec-reboot/data/opt/openslx/scripts/systemd-kexec_pre @@ -0,0 +1,36 @@ +#!/bin/ash + +grep -q '\bsplash\b' /proc/cmdline || exit 0 + +screen_size="$(fbset | awk '$1 = /geometry/ {print $2" "$3}')" +screen_width="${screen_size%% *}" +screen_height="${screen_size#* }" +[ "$screen_width" -gt 0 ] || exit 0 +[ "$screen_height" -gt 0 ] || exit 0 +fbsplash_cfg="/tmp/fbsplash.cfg" +fbsplash_ppm="/opt/openslx/images/kexec-reboot.ppm" +if [ -s "$fbsplash_ppm" ]; then + ppm_size="$(sed -n 2p "$fbsplash_ppm")" +else + exit 0 +fi +ppm_width="${ppm_size%% *}" +ppm_height="${ppm_size#* }" +ppm_height="${ppm_height%% *}" # make sure nothing weird is trailing +img_top="$(( ( screen_width - ppm_width ) / 2 ))" +img_left="$(( ( screen_height - ppm_height ) / 2 ))" +# just checking if nothing too weird is set +if [ -n "$img_left" ] && [ -n "$img_top" ] \ + && [ "$img_left" -ge 0 ] && [ "$img_left" -lt 8096 ] \ + && [ "$img_top" -ge 0 ] && [ "$img_top" -lt 8096 ]; then + printf "IMG_TOP=%d\nIMG_LEFT=%d\n" \ + "$img_top" "$img_left" \ + > "$fbsplash_cfg" + kill -SIGRTMIN+21 1 + echo -e "\033[?25l" > /dev/console + clear > /dev/console + fbsplash -b -i "$fbsplash_cfg" -s "$fbsplash_ppm" + rm -f -- "$fbsplash_cfg" +fi +exit 0 + |