Thomas Stallinger a415de1eaa feat: Autoklicker auf AT-SPI umgestellt statt Bildschirmkoordinaten
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>
2026-08-29 15:34:28 +02:00

55 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
### Wird per Ein-Zeilen-Sed-Patch (siehe initrd-hooks/casper-bottom/99casperboot)
### GANZ AM ANFANG von start-ubiquity-dm eingebunden ("."), also BEVOR
### ubiquity-dm den X-Server startet und Ubiquity selbst exec't.
###
### Zweck: die AT-SPI-Barrierefreiheits-Bruecke (atk-bridge) fuer Ubiquitys
### GTK-Prozess aktivieren, damit atspi_click.py (siehe
### /opt/tuxflotte/scripts/) Buttons ueber ihre Rolle/ihren Namen im
### Accessibility-Baum anklicken kann statt ueber Bildschirmkoordinaten.
### Der xdotool-Koordinaten-Ansatz ist an ueberlappenden X11-Fenstern durch
### die Metacity-Fensterdekoration gescheitert (mehrere Fenster aehnlicher
### Groesse, "groesstes Fenster"-Heuristik traf wiederholt das falsche -
### siehe ADR-0023-Nachtrag).
###
### WICHTIG: das muss VOR dem GTK-Init von Ubiquity passieren - eine erst
### nachtraeglich verfuegbare Bruecke wird von einer bereits laufenden
### GTK-Anwendung nicht mehr nachgeladen (GTK_MODULES wird nur beim Start
### ausgewertet). Deshalb blockierend (kein Hintergrund-"&" fuer die
### Paketinstallation) und deshalb im Skript, das ubiquity-dm selbst
### aufruft, statt im spaeter laufenden Autoklicker-Service.
###
### Absichtlich EIN gemeinsamer apt-get-Aufruf fuer alle drei Pakete (statt
### getrennter Aufrufe je Skript) - der Autoklicker installiert xdotool
### zeitlich nah, ein zweiter paralleler apt-get/dpkg-Aufruf haette real
### beobachtete Lock-Konflikte riskiert (debconf: "config.dat is locked by
### another process").
for pkg in at-spi2-core dbus-x11 python3-pyatspi; do
dpkg -s "$pkg" >/dev/null 2>&1 && continue
if [ "${_tuxflotte_atspi_apt_updated:-}" != "1" ]; then
apt-get update -qq
_tuxflotte_atspi_apt_updated=1
fi
DEBIAN_FRONTEND=noninteractive apt-get install -y "$pkg"
done
export GTK_MODULES="gail:atk-bridge"
export NO_AT_BRIDGE=0
# Eigene Session-Bus-Instanz, falls keine geerbt wurde - die minimale
# ubiquity-dm-X-Sitzung startet anders als eine normale Desktop-Sitzung
# vermutlich keinen eigenen Session-Bus.
if [ -z "${DBUS_SESSION_BUS_ADDRESS:-}" ] && command -v dbus-launch >/dev/null 2>&1; then
eval "$(dbus-launch --sh-syntax)"
export DBUS_SESSION_BUS_ADDRESS DBUS_SESSION_BUS_PID
fi
if command -v at-spi-bus-launcher >/dev/null 2>&1; then
at-spi-bus-launcher --launch-immediately >/var/log/tuxflotte-atspi-bus.log 2>&1 &
# Kurz abwarten, bis der a11y-Bus unter org.a11y.Bus registriert ist,
# bevor ubiquity-dm/Ubiquity (naechste Zeile in start-ubiquity-dm)
# GTK initialisiert.
sleep 1
fi