- noninteractive-Frontend endgueltig verworfen: PageNoninteractive-Stubs fuehren strukturell zur Endlosschleife im choose_partition-Zustands- automaten von ubi-partman.py, unabhaengig vom Preseed-Stand. - Umstieg auf automatic-ubiquity (echte GTK-Oberflaeche) + eigener Autoklicker (live-updates/opt/tuxflotte/scripts/autoclicker.sh + systemd-Service), ausgeloest per Boot-Keyword tuxflotte-autoclick. - Bug 1: jq fehlte beim echten Kiosk-Auslauf (kein manueller Vorab- Installationsschritt wie in Testlaeufen) - neues Modul 00_preflight.sh installiert es als allererstes. - Bug 2: echter Ubiquity-Crash in ubi-prepare.py (TypeError: Argument 1 does not allow None as a value) - gezielter Sed-Patch im bestehenden 99casperboot-Hook. - Bug 3: 'd-i partman/choose_partition select finish' zwang denselben Endlosschleifen-Zustandsautomaten wie bei noninteractive, auch im GTK-Modus - Zeile ersatzlos entfernt, partman-auto/method+recipe genuegen. - autoclicker.sh: Fenstersuche nach 'ubiquity' korrigiert (Fenstertitel ist tatsaechlich 'Installation (as superuser)', enthaelt das Wort nie). - Alle vier Fixes live per QEMU verifiziert (jeweils frische Disk, realer Kiosk-Ausloeser/kexec-Pfad, nicht nur manuelle Nachstellung). Offen: automatisierter Klick auf 'Jetzt installieren' auf der Partitionierungs-Uebersichtsseite noch nicht zuverlaessig (Enter trifft dort einen Ausklapp-Pfeil statt den Button). Siehe ADR-0023-Nachtrag. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
112 lines
4.4 KiB
Bash
Executable File
112 lines
4.4 KiB
Bash
Executable File
#!/bin/bash
|
|
### Klickt automatisiert durch Ubiquitys GTK-Installationsassistenten
|
|
### (automatic-ubiquity) - noetig, weil Ubiquitys eigenes "noninteractive"-
|
|
### Frontend die gefuehrte Partitionierung nicht zuverlaessig automatisieren
|
|
### kann (endlose choose_partition-Schleife in ubi-partman.py, real
|
|
### bestaetigt, siehe ADR-0023-Nachtrag). Der GTK-Assistent fuellt jede Seite
|
|
### bereits vollstaendig aus dem Preseed vor (siehe preseed.tpl) - es fehlt
|
|
### nur der "Weiter"/"Installieren"-Klick pro Seite, den dieses Skript per
|
|
### xdotool simuliert.
|
|
###
|
|
### WICHTIG (real beim Testen entdeckt, siehe ADR-0023-Nachtrag): das
|
|
### Ubiquity-Fenster heisst NICHT "ubiquity" - der Fenstertitel ist z.B.
|
|
### "Installation (as superuser)". Eine Fenstersuche nach dem Namen "ubiquity"
|
|
### (fruehere Version dieses Skripts) findet also nie etwas und wurde hier auf
|
|
### eine Suche nach JEDEM sichtbaren, betitelten Fenster umgestellt.
|
|
###
|
|
### NOCH NICHT GELOEST (bewusst als bekannte Einschraenkung stehen gelassen,
|
|
### siehe ADR-0023-Nachtrag): auf der Partitionierungs-Uebersichtsseite
|
|
### aktiviert "Enter" NICHT den "Jetzt installieren"-Button, sondern einen
|
|
### Ausklapp-Pfeil eines darunterliegenden Status-Panels ("Konfiguration der
|
|
### Installation wird ueberprueft ..."). Ein Mausklick per xdotool auf
|
|
### errechnete Fensterkoordinaten wurde real ausprobiert, aber sowohl die
|
|
### Fenstererkennung (mehrere ueberlappende X11-Fenster gleicher/aehnlicher
|
|
### Groesse durch Metacity-Dekoration, "groesstes Fenster"-Heuristik traf
|
|
### wiederholt das falsche) als auch die Klick-Koordinaten selbst waren nicht
|
|
### zuverlaessig genug fuer den produktiven Einsatz - deshalb hier bewusst
|
|
### NICHT eingebaut, um kein Risiko falscher Klicks (z.B. auf eine
|
|
### "Formatieren?"-Checkbox) einzugehen. Die Enter-Taste bleibt der sicherere
|
|
### Kompromiss: sie tut auf den meisten Seiten das Richtige und ist auf dieser
|
|
### einen Seite bestenfalls wirkungslos (klappt nur einen Infobereich auf/zu),
|
|
### nie destruktiv.
|
|
###
|
|
### Wird per systemd-Service (siehe ...service im selben Ausliefer-Layer) bei
|
|
### JEDEM Boot gestartet, bricht aber sofort ab, wenn das eigene Boot-Keyword
|
|
### "tuxflotte-autoclick" nicht in /proc/cmdline steht - siehe backend_launch()
|
|
### in backends/mint/backend.sh, wo dieses Keyword gesetzt wird. Auf einem
|
|
### normalen (nicht automatisierten) Boot also wirkungslos.
|
|
set -u
|
|
|
|
LOG=/var/log/tuxflotte-autoclicker.log
|
|
log() {
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $*" >>"${LOG}"
|
|
}
|
|
|
|
grep -qw tuxflotte-autoclick /proc/cmdline || exit 0
|
|
|
|
log "tuxflotte-autoclick erkannt, starte Autoklicker."
|
|
export DISPLAY=:0
|
|
|
|
# ubiquity-dm startet X frueh im Boot zu einem nicht exakt vorhersagbaren
|
|
# Zeitpunkt - auf den Unix-Socket warten statt auf eine feste Wartezeit zu
|
|
# vertrauen.
|
|
x_ready=0
|
|
for _ in $(seq 1 120); do
|
|
if [ -S /tmp/.X11-unix/X0 ]; then
|
|
x_ready=1
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
if [ "${x_ready}" -ne 1 ]; then
|
|
log "X-Server nach 120s nicht erschienen, breche ab."
|
|
exit 1
|
|
fi
|
|
log "X-Server erkannt."
|
|
|
|
if ! command -v xdotool >/dev/null 2>&1; then
|
|
log "xdotool fehlt auf dem Live-Medium, installiere nach."
|
|
if ! apt-get install -y xdotool >>"${LOG}" 2>&1; then
|
|
log "xdotool-Installation fehlgeschlagen, breche ab."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Bewusst betiteltes Fenster suchen (leerer --name-Ausdruck matcht jeden
|
|
# Titel) statt nach "ubiquity" - siehe Kommentar oben, der tatsaechliche
|
|
# Fenstertitel enthaelt dieses Wort nie.
|
|
main_window() {
|
|
xdotool search --onlyvisible --name "" 2>/dev/null | head -n1
|
|
}
|
|
|
|
# Ubiquity-Fenster abwarten, bevor die Klick-Schleife beginnt.
|
|
for _ in $(seq 1 60); do
|
|
[ -n "$(main_window)" ] && break
|
|
sleep 1
|
|
done
|
|
|
|
is_ubiquity_running() {
|
|
pgrep -f '/usr/bin/ubiquity' >/dev/null 2>&1
|
|
}
|
|
|
|
log "Starte Klick-Schleife."
|
|
# Harte Obergrenze als Sicherheitsnetz (60 Minuten) - falls die Installation
|
|
# haengen bleibt, soll dieser Dienst nicht unbegrenzt weiterlaufen.
|
|
end=$((SECONDS + 3600))
|
|
clicks=0
|
|
while [ "${SECONDS}" -lt "${end}" ]; do
|
|
if ! is_ubiquity_running; then
|
|
log "ubiquity-Prozess nicht mehr aktiv (vermutlich fertig oder abgestuerzt), beende Schleife nach ${clicks} Klick(s)."
|
|
break
|
|
fi
|
|
|
|
win="$(main_window)"
|
|
if [ -n "${win}" ]; then
|
|
xdotool windowactivate --sync "${win}" 2>/dev/null || true
|
|
xdotool key --window "${win}" Return 2>/dev/null || true
|
|
clicks=$((clicks + 1))
|
|
fi
|
|
sleep 2
|
|
done
|
|
log "Autoklicker beendet (${clicks} Klick(s) insgesamt)."
|