summaryrefslogtreecommitdiffstats
path: root/modules.d/slx-splash/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'modules.d/slx-splash/scripts')
-rw-r--r--modules.d/slx-splash/scripts/restore-cursor.sh11
-rw-r--r--modules.d/slx-splash/scripts/slx-splash.sh44
2 files changed, 55 insertions, 0 deletions
diff --git a/modules.d/slx-splash/scripts/restore-cursor.sh b/modules.d/slx-splash/scripts/restore-cursor.sh
new file mode 100644
index 00000000..4ba9880d
--- /dev/null
+++ b/modules.d/slx-splash/scripts/restore-cursor.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+#
+# The console cursor is disabled when starting the splash screen.
+# This will add a drop-in to getty@.service to ensure the cursor
+# is restored when starting gettys.
+
+mkdir -p "$NEWROOT/etc/systemd/system/getty@.service.d/"
+cat <<- EOF > "$NEWROOT/etc/systemd/system/getty@.service.d/restore-cursor.conf"
+ [Service]
+ ExecStartPre=-/usr/bin/env bash -c "echo -en '\033c' > /dev/%I"
+EOF
diff --git a/modules.d/slx-splash/scripts/slx-splash.sh b/modules.d/slx-splash/scripts/slx-splash.sh
new file mode 100644
index 00000000..7381997b
--- /dev/null
+++ b/modules.d/slx-splash/scripts/slx-splash.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+
+show_splash() {
+ if [ -e "/etc/splash.ppm.gz" ]; then
+ systemd-preserve-process-marker /bin/busybox fbsplash -x -b -s "/etc/splash.ppm.gz" &
+ elif [ -e "/etc/splash.ppm" ]; then
+ systemd-preserve-process-marker /bin/busybox fbsplash -x -b -s "/etc/splash.ppm" &
+ else
+ echo "Splash screen requested, but not found in initramfs..."
+ fi
+}
+
+init_drm() {
+ # taken from dracut's plymouth module
+ # first trigger graphics subsystem
+ udevadm trigger --action=add --attr-match=class=0x030000 >/dev/null 2>&1
+ # first trigger graphics and tty subsystem
+ udevadm trigger --action=add \
+ --subsystem-match=graphics \
+ --subsystem-match=drm \
+ --subsystem-match=tty \
+ --subsystem-match=acpi \
+ >/dev/null 2>&1
+
+ udevadm settle --timeout=180 2>&1
+}
+
+if grep -wqE 'splash' /proc/cmdline; then
+ # first init graphics
+ init_drm
+ # disable non-critical kernel messages
+ echo "1 1 0 1" > /proc/sys/kernel/printk
+ # disable systemd's status message on console
+ # See: https://www.freedesktop.org/software/systemd/man/systemd.html#Signals
+ kill -55 1
+ # clear console
+ busybox clear
+ # disable cursor
+ echo -e "\033[?25l" > /dev/console
+ # finally:
+ show_splash
+fi
+
+true