xdotool/Enter-Taste-Ansatz war nicht zuverlaessig genug (Metacity erzeugt mehrere ueberlappende X11-Fenster aehnlicher Groesse, 'groesstes Fenster'- Heuristik traf wiederholt das falsche; Enter aktiviert auf der Partitionierungs-Uebersicht einen Ausklapp-Pfeil statt 'Jetzt installieren' - siehe ADR-0023-Nachtrag). - live-updates/usr/share/ubiquity/tuxflotte-atspi-env.sh (neu): aktiviert GTK_MODULES=gail:atk-bridge + Session-/A11y-Bus VOR dem GTK-Start von Ubiquity - muss vor dem Init passieren, eine Bruecke wird von einer bereits laufenden GTK-App nicht nachgeladen. - initrd-hooks/casper-bottom/99casperboot: bindet obige Datei per Ein-Zeilen-Sed-Patch in start-ubiquity-dm ein (dry-run gegen den echten Datei-Inhalt verifiziert). - live-updates/opt/tuxflotte/scripts/atspi_click.py (neu): findet+klickt den passenden 'Weiter'-Button ueber Rolle+Name im Accessibility-Baum, feste deutsche Werteliste (Sprache per Preseed fest de_DE), niemals Zurueck/Abbrechen/Beenden. - autoclicker.sh: ruft atspi_click.py in Schleife statt xdotool/Enter auf, wartet auf den ubiquity-Prozess statt auf den X-Socket. Noch nicht live verifiziert - naechster Schritt: QEMU-Testlauf auf lenny. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
107 lines
4.1 KiB
Bash
Executable File
107 lines
4.1 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.
|
|
###
|
|
### Klickt ueber AT-SPI (Barrierefreiheits-API), nicht mehr ueber
|
|
### Bildschirmkoordinaten/Enter-Taste (siehe atspi_click.py fuer die
|
|
### eigentliche Klicklogik). Der fruehere xdotool-Ansatz scheiterte real
|
|
### daran, dass Metacity mehrere ueberlappende X11-Fenster aehnlicher
|
|
### Groesse erzeugt (WM-Dekorationsrahmen, Hilfsfenster) - weder eine
|
|
### "groesstes sichtbares Fenster"-Heuristik noch die Enter-Taste (aktiviert
|
|
### auf der Partitionierungs-Uebersichtsseite einen Ausklapp-Pfeil statt des
|
|
### "Jetzt installieren"-Buttons) waren zuverlaessig genug (siehe
|
|
### ADR-0023-Nachtrag). AT-SPI identifiziert den Button stattdessen ueber
|
|
### seine Rolle+seinen Namen im Accessibility-Baum der Anwendung selbst -
|
|
### unabhaengig von Fenstergeometrie/-dekoration.
|
|
###
|
|
### Die AT-SPI-Bruecke selbst (GTK_MODULES=gail:atk-bridge, Session-/A11y-
|
|
### Bus) wird NICHT hier, sondern bereits VOR dem GTK-Start von Ubiquity in
|
|
### tuxflotte-atspi-env.sh aktiviert (eingebunden von start-ubiquity-dm,
|
|
### siehe Sed-Patch in initrd-hooks/casper-bottom/99casperboot) - eine erst
|
|
### nachtraeglich aktivierte Bruecke wird von einer bereits laufenden
|
|
### GTK-Anwendung nicht mehr nachgeladen.
|
|
###
|
|
### 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
|
|
|
|
is_ubiquity_running() {
|
|
pgrep -f '/usr/bin/ubiquity' >/dev/null 2>&1
|
|
}
|
|
|
|
# ubiquity-dm startet Ubiquity frueh im Boot zu einem nicht exakt
|
|
# vorhersagbaren Zeitpunkt - auf den Prozess warten statt auf eine feste
|
|
# Wartezeit zu vertrauen. AT-SPI braucht anders als der fruehere
|
|
# xdotool-Ansatz keinen eigenen X-Socket-Check - der Zugriff laeuft ueber
|
|
# den Accessibility-Bus, nicht direkt ueber X11.
|
|
ubiquity_ready=0
|
|
for _ in $(seq 1 120); do
|
|
if is_ubiquity_running; then
|
|
ubiquity_ready=1
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
if [ "${ubiquity_ready}" -ne 1 ]; then
|
|
log "ubiquity-Prozess nach 120s nicht erschienen, breche ab."
|
|
exit 1
|
|
fi
|
|
log "ubiquity-Prozess erkannt."
|
|
|
|
if ! python3 -c 'import pyatspi' >/dev/null 2>&1; then
|
|
log "pyatspi fehlt auf dem Live-Medium, installiere nach."
|
|
if ! apt-get install -y python3-pyatspi >>"${LOG}" 2>&1; then
|
|
log "pyatspi-Installation fehlgeschlagen, breche ab."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
ATSPI_CLICK=/opt/tuxflotte/scripts/atspi_click.py
|
|
|
|
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
|
|
misses=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
|
|
|
|
out="$(python3 "${ATSPI_CLICK}" 2>&1)"
|
|
rc=$?
|
|
if [ "${rc}" -eq 0 ]; then
|
|
clicks=$((clicks + 1))
|
|
misses=0
|
|
log "Klick ${clicks}: ${out}"
|
|
elif [ "${rc}" -eq 2 ]; then
|
|
log "AT-SPI-Bus nicht erreichbar, breche ab: ${out}"
|
|
break
|
|
else
|
|
misses=$((misses + 1))
|
|
log "kein Treffer (${misses}): ${out}"
|
|
fi
|
|
sleep 2
|
|
done
|
|
log "Autoklicker beendet (${clicks} Klick(s) insgesamt)."
|