scripts/silent-boot.sh
137 Zeilen · 5.4 KB · Shell
| 1 | |
| 2 | # =========================================================================== |
| 3 | # Entfernt den Textbildschirm zwischen Startlogo und Wiedergabe. |
| 4 | # |
| 5 | # Drei Aenderungen: |
| 6 | # 1. Konsolenmeldungen auf tty3 umleiten - tty1 bleibt sauber |
| 7 | # 2. Plymouth wird erst beendet, wenn tvwall startet - und zwar von tvwall |
| 8 | # selbst, direkt bevor mpv losgeht. Mit --retain-splash bleibt das Logo |
| 9 | # dabei stehen, bis mpv das erste Mal malt. |
| 10 | # 3. tvwall raeumt tty1 nicht mehr auf (das hat das Bild geloescht), |
| 11 | # leert aber einmal dessen Textpuffer - sonst taucht Plymouths |
| 12 | # Statustext wieder auf, sobald die Wiedergabe endet |
| 13 | # |
| 14 | # Aufruf: sudo ~/silent-boot.sh einschalten |
| 15 | # sudo ~/silent-boot.sh --zurueck rueckgaengig |
| 16 | # =========================================================================== |
| 17 | set -euo pipefail |
| 18 | CMDLINE="/boot/firmware/cmdline.txt"; [[ -f "$CMDLINE" ]] || CMDLINE="/boot/cmdline.txt" |
| 19 | QUIT_DIR="/etc/systemd/system/plymouth-quit.service.d" |
| 20 | TVWALL_DIR="/etc/systemd/system/tvwall.service.d" |
| 21 | EXTRA=(loglevel=3 logo.nologo vt.global_cursor_default=0 consoleblank=0) |
| 22 | |
| 23 | ok() { printf '\033[1;32m ✓\033[0m %s\n' "$*"; } |
| 24 | info() { printf '\033[1;36m==>\033[0m %s\n' "$*"; } |
| 25 | die() { printf '\033[1;31mFehler:\033[0m %s\n' "$*" >&2; exit 1; } |
| 26 | [[ $EUID -eq 0 ]] || die "bitte mit sudo starten" |
| 27 | |
| 28 | schreibe_cmdline() { |
| 29 | local zeile="$1" |
| 30 | cp -f "$CMDLINE" "$CMDLINE.tvwall-backup" |
| 31 | printf '%s\n' "$zeile" > "$CMDLINE" |
| 32 | if [[ "$(grep -c . "$CMDLINE")" != "1" ]] || ! grep -q "root=" "$CMDLINE"; then |
| 33 | cp -f "$CMDLINE.tvwall-backup" "$CMDLINE" |
| 34 | die "cmdline.txt sah falsch aus - Sicherung zurueckgespielt" |
| 35 | fi |
| 36 | } |
| 37 | |
| 38 | if [[ "${1:-}" == "--zurueck" ]]; then |
| 39 | zeile="$(tr -d '\n' < "$CMDLINE")" |
| 40 | zeile="${zeile//console=tty3/console=tty1}" |
| 41 | for e in "${EXTRA[@]}"; do zeile="${zeile// $e/}"; done |
| 42 | schreibe_cmdline "$zeile" |
| 43 | rm -rf "$QUIT_DIR" "$TVWALL_DIR/silent.conf" /usr/local/bin/tvwall-clear-tty |
| 44 | systemctl daemon-reload |
| 45 | ok "rueckgaengig gemacht - bitte neu starten" |
| 46 | exit 0 |
| 47 | fi |
| 48 | |
| 49 | # --- 1) Konsole von tty1 wegnehmen ---------------------------------------- |
| 50 | info "Konsolenmeldungen auf tty3 umleiten" |
| 51 | zeile="$(tr -d '\n' < "$CMDLINE")" |
| 52 | zeile="${zeile//console=tty1/console=tty3}" |
| 53 | for e in "${EXTRA[@]}"; do |
| 54 | zeile="${zeile// $e/}" # doppelte Eintraege vermeiden |
| 55 | zeile="$zeile $e" |
| 56 | done |
| 57 | schreibe_cmdline "$zeile" |
| 58 | ok "console=tty3 ${EXTRA[*]}" |
| 59 | echo " ($(grep -c . "$CMDLINE") Zeile, root= vorhanden)" |
| 60 | |
| 61 | # --- 2) Logo stehen lassen, bis mpv malt ---------------------------------- |
| 62 | info "Plymouth soll das Bild beim Beenden stehen lassen" |
| 63 | install -d -m 0755 "$QUIT_DIR" |
| 64 | cat > "$QUIT_DIR/retain-splash.conf" <<'UNIT' |
| 65 | # Von tvwall silent-boot.sh: |
| 66 | # - --retain-splash laesst das Startbild auf dem Schirm stehen, bis mpv das |
| 67 | # erste Mal malt. Ohne das gibt Plymouth den Bildschirm frei und die |
| 68 | # Textkonsole blitzt auf. |
| 69 | # - After=tvwall.service: nicht schon beenden, waehrend die Wiedergabe noch |
| 70 | # startet. tvwall beendet Plymouth selbst, direkt bevor mpv losgeht. |
| 71 | [Unit] |
| 72 | After=tvwall.service |
| 73 | |
| 74 | [Service] |
| 75 | ExecStart= |
| 76 | ExecStart=-/usr/bin/plymouth quit --retain-splash |
| 77 | UNIT |
| 78 | ok "$QUIT_DIR/retain-splash.conf" |
| 79 | |
| 80 | # --- 3) tvwall soll tty1 nicht mehr loeschen ------------------------------ |
| 81 | info "Textpuffer von tty1 leeren" |
| 82 | cat > /usr/local/bin/tvwall-clear-tty <<'CLR' |
| 83 | #!/bin/sh |
| 84 | # Leert den Textpuffer der virtuellen Konsole tty1. |
| 85 | # Plymouth legt dort neben der Grafikausgabe eine Textanzeige an und schreibt |
| 86 | # seine Statuszeilen hinein. Sichtbar wird das erst, wenn die Wiedergabe endet |
| 87 | # und die Konsole ihren Inhalt neu zeichnet - dann steht dort alter Text. |
| 88 | # Wird ausgefuehrt, solange Plymouth den Bildschirm noch im Grafikmodus haelt: |
| 89 | # der Puffer wird geleert, ohne dass davon etwas zu sehen ist. |
| 90 | printf '[3J[2J[H' > /dev/tty1 2>/dev/null |
| 91 | exit 0 |
| 92 | CLR |
| 93 | chmod 0755 /usr/local/bin/tvwall-clear-tty |
| 94 | ok "/usr/local/bin/tvwall-clear-tty" |
| 95 | |
| 96 | info "tvwall raeumt tty1 nicht mehr auf" |
| 97 | install -d -m 0755 "$TVWALL_DIR" |
| 98 | cat > "$TVWALL_DIR/silent.conf" <<'UNIT' |
| 99 | # Von tvwall silent-boot.sh: |
| 100 | # - TTYVTDisallocate/setterm haben das stehengelassene Startbild geloescht. |
| 101 | # Der Bildschirmschoner der Konsole wird jetzt ueber consoleblank=0 |
| 102 | # im Bootparameter abgeschaltet. |
| 103 | # - ExecStartPre uebergibt den Bildschirm: Plymouth gibt ihn frei (das Bild |
| 104 | # bleibt dank --retain-splash stehen), direkt danach uebernimmt mpv. |
| 105 | # Das "+" laesst diesen einen Schritt mit vollen Rechten laufen. |
| 106 | [Service] |
| 107 | TTYVTDisallocate=no |
| 108 | NoNewPrivileges=no |
| 109 | ExecStartPre= |
| 110 | ExecStartPre=+/usr/local/bin/tvwall-clear-tty |
| 111 | ExecStartPre=+/bin/sh -c '/usr/bin/plymouth quit --retain-splash 2>/dev/null || true' |
| 112 | ExecStopPost=+/usr/local/bin/tvwall-clear-tty |
| 113 | UNIT |
| 114 | ok "$TVWALL_DIR/silent.conf" |
| 115 | |
| 116 | systemctl daemon-reload |
| 117 | ok "systemd neu eingelesen" |
| 118 | |
| 119 | cat <<EOF |
| 120 | |
| 121 | =========================================================================== |
| 122 | Jetzt neu starten: sudo reboot |
| 123 | |
| 124 | Erwartet: Logo erscheint - bleibt stehen - Wiedergabe uebernimmt. |
| 125 | Kein Text mehr dazwischen. |
| 126 | |
| 127 | Zur Kontrolle danach: |
| 128 | systemd-analyze critical-chain tvwall.service | head -5 |
| 129 | journalctl -b -o short-monotonic | grep -E "plymouth-quit|starte mpv" |
| 130 | -> die beiden Zeitpunkte sollten dicht beieinander liegen |
| 131 | |
| 132 | Rueckgaengig: sudo ~/silent-boot.sh --zurueck && sudo reboot |
| 133 | |
| 134 | Hinweis: Startmeldungen liegen danach auf tty3 (Strg+Alt+F3) und |
| 135 | weiterhin vollstaendig im Journal: journalctl -b |
| 136 | =========================================================================== |
| 137 | EOF |