LabCodeHub öffentliche Ansicht
Anmelden
Küpper / ehc-tvwall öffentlich
Branch: main
ehc-tvwall / scripts / silent-boot.sh
Verlauf Rohdaten
R Rüdiger Küpper feat: add silent boot script to enhance boot experience
461e563c vor 11 Tagen
scripts/silent-boot.sh 137 Zeilen · 5.4 KB · Shell
1
#!/usr/bin/env bash
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 '' > /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