fix(261006-dcs): Linux-AppImage ohne mitgebrachte libwayland (weisses Fenster auf Arch)
Tessera CI/CD / Lint & Type Check (push) Successful in 50s
Tessera CI/CD / Tests (push) Successful in 1m38s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 12m14s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m26s

linuxdeploy packt libwayland-* des Debian-Baus ein; auf Arch/EndeavourOS
bricht WebKitGTK damit mit EGL_BAD_PARAMETER ab. Neuer CI-Schritt
entfernt sie, packt mit der Original-runtime neu und signiert neu.
In archlinux- und debian:trixie-Containern unter Xvfb nachgewiesen.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-06 09:36:56 +02:00
parent 55b2609e30
commit da9a65c7d0
7 changed files with 106 additions and 2 deletions
+70
View File
@@ -0,0 +1,70 @@
#!/bin/sh
# appimage-strip-wayland.sh -- entfernt die mitgebrachten libwayland-*.so aus
# dem fertigen Linux-AppImage, packt es neu und signiert es fuer den Updater neu.
#
# Befund 06.10.2026 (EndeavourOS/Arch, weisses Fenster): linuxdeploy packt die
# libwayland-Bibliotheken des Bau-Systems (Debian) ein. Auf Systemen mit
# neuerem Mesa bricht WebKitGTK damit beim Start ab ("Could not create default
# EGL display: EGL_BAD_PARAMETER. Aborting...") -- das Fenster bleibt weiss.
# Nachgestellt in einem archlinux-Container unter Xvfb; ohne die vier
# libwayland-Dateien startet die App dort sauber. Die Bibliotheken gehoeren zum
# Grundsystem jeder Linux-Arbeitsumgebung (GTK haengt ohnehin davon ab), das
# Weglassen nimmt also nichts weg, was auf einem Zielsystem fehlen koennte.
#
# Tauri reicht linuxdeploy keine Ausschlussliste durch (linuxdeploy kennt
# --exclude-library, aber keine Umgebungsvariable dafuer), deshalb
# Nachbearbeitung: entpacken, loeschen, mit dem appimagetool aus Tauris
# eigenem linuxdeploy-plugin-appimage neu packen, `tauri signer sign` schreibt
# die .sig neu (die alte passt nach dem Neupacken nicht mehr).
#
# Aufruf aus dem Repo-Wurzelverzeichnis, nach `tauri build --bundles appimage`.
# Ohne TAURI_SIGNING_PRIVATE_KEY (lokaler Bau) wird nur neu gepackt, die
# veraltete .sig geloescht.
set -eu
APPIMAGE_DIR="apps/desktop/src-tauri/target/release/bundle/appimage"
TOOL_IMAGE="${TAURI_TOOLS_DIR:-${XDG_CACHE_HOME:-$HOME/.cache}/tauri}/linuxdeploy-plugin-appimage.AppImage"
APPIMAGE="$(find "$APPIMAGE_DIR" -maxdepth 1 -name '*.AppImage' | head -n 1)"
if [ -z "$APPIMAGE" ]; then
echo "Kein AppImage in $APPIMAGE_DIR gefunden." >&2
exit 1
fi
if [ ! -f "$TOOL_IMAGE" ]; then
echo "appimagetool-Quelle $TOOL_IMAGE fehlt (wird von tauri build angelegt)." >&2
exit 1
fi
WORK="$(mktemp -d)"
trap 'rm -rf "$WORK"' EXIT
APPIMAGE_ABS="$(cd "$(dirname "$APPIMAGE")" && pwd)/$(basename "$APPIMAGE")"
(cd "$WORK" && "$APPIMAGE_ABS" --appimage-extract >/dev/null && mv squashfs-root app)
(cd "$WORK" && "$TOOL_IMAGE" --appimage-extract >/dev/null && mv squashfs-root tool)
REMOVED="$(find "$WORK/app" -name 'libwayland-*.so*' -print)"
if [ -z "$REMOVED" ]; then
echo "Keine libwayland-Bibliotheken im AppImage -- nichts zu tun."
exit 0
fi
echo "Entferne aus dem AppImage:"
echo "$REMOVED" | sed "s#$WORK/app/# #"
echo "$REMOVED" | xargs rm -f
# Dieselbe Startdatei (runtime) wie im Original wiederverwenden: kein
# Nachladen aus dem Internet, keine andere runtime-Fassung als von Tauri.
OFFSET="$("$APPIMAGE_ABS" --appimage-offset)"
head -c "$OFFSET" "$APPIMAGE_ABS" > "$WORK/runtime"
ARCH=x86_64 "$WORK/tool/usr/bin/appimagetool" --no-appstream --runtime-file "$WORK/runtime" \
"$WORK/app" "$WORK/neu.AppImage" >/dev/null 2>&1
chmod +x "$WORK/neu.AppImage"
mv "$WORK/neu.AppImage" "$APPIMAGE_ABS"
rm -f "$APPIMAGE_ABS.sig"
if [ -n "${TAURI_SIGNING_PRIVATE_KEY:-}" ]; then
pnpm --filter @tessera/desktop exec tauri signer sign "$APPIMAGE_ABS" >/dev/null
test -s "$APPIMAGE_ABS.sig"
echo "AppImage neu gepackt und signiert: $(basename "$APPIMAGE_ABS")"
else
echo "AppImage neu gepackt (ohne Schluessel, keine Signatur): $(basename "$APPIMAGE_ABS")"
fi
+1 -1
View File
@@ -53,7 +53,7 @@
# Dieses Skript kennt kein Secret.
set -eu
DESKTOP_PATHS="apps/desktop .gitea/scripts/desktop-version.sh .gitea/scripts/desktop-collect.sh .gitea/scripts/desktop-stamp.sh .gitea/workflows/ci.yml"
DESKTOP_PATHS="apps/desktop .gitea/scripts/desktop-version.sh .gitea/scripts/desktop-collect.sh .gitea/scripts/desktop-stamp.sh .gitea/scripts/appimage-strip-wayland.sh .gitea/workflows/ci.yml"
out() {
printf '%s=%s\n' "$1" "$2"
+10
View File
@@ -186,6 +186,16 @@ jobs:
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
run: pnpm --filter @tessera/desktop exec tauri build --bundles appimage
# 06.10.2026: mitgebrachte libwayland-Bibliotheken liessen WebKitGTK auf
# Arch/EndeavourOS mit "EGL_BAD_PARAMETER" abbrechen (weisses Fenster).
# Skript entfernt sie, packt neu und signiert neu (Begruendung im Skript).
- name: Linux-AppImage nachbearbeiten (libwayland entfernen)
if: steps.reuse.outputs.reuse != 'true'
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
run: sh .gitea/scripts/appimage-strip-wayland.sh
- name: Windows-Installer bauen (Cross-Bau)
if: steps.reuse.outputs.reuse != 'true'
env:
+2 -1
View File
@@ -31,7 +31,7 @@ See: .planning/PROJECT.md (updated 2026-07-17)
Phase: 18 (desktop-client-fertigstellen) — COMPLETE (2026-09-17, Verifikation passed, Windows-Bedienprobe bestanden)
Plan: 6 of 6
Status: Alle 18 Phasen abgeschlossen; Version 1.2.0 freigegeben. Kein laufender Meilenstein. Nach 1.2.0 auf main (Beta): Bildmarke in Akzentfarbe, CI-Desktop-Skip, Favoriten-Symbol/-Sortierung, Desktop-Server-Adresse, Update in der App (signiert), Versionszeile auf der Setup-Seite — alles verifiziert und auf VM/CI nachgewiesen
Last activity: 2026-10-05 - Quick 261005-jqd Einstellungen und Verwaltung aufgeraeumt
Last activity: 2026-10-06 - Quick 261006-dcs Linux-App weißes Fenster Arch
Progress: [██████████] 99%
@@ -496,6 +496,7 @@ Gerettet aus `.continue-here.md`. Relevant fuer die noch offenen Live-Tests.
| 261005-bt1 | Proxmox: Warnung je gestopptem Gast mit aktivem Autostart (Karte, Kachel) | 2026-10-05 | 873d15d | [261005-bt1-proxmox-autostart-warnung](.planning/quick/261005-bt1-proxmox-autostart-warnung/) |
| 261005-d5d | Kalender-Test: 15-s-Zeitgrenze fuer Exchange (EWS), Meldung „nicht erreichbar“ | 2026-10-05 | e49d4c7..831c7b8 | [261005-d5d-kalender-test-zeitgrenze](.planning/quick/261005-d5d-kalender-test-zeitgrenze/) |
| 261005-jqd | Einstellungen und Verwaltung aufgeraeumt (gemeinsame Navigation, Seitenkopf, Karten; „Verwaltung“) | 2026-10-05 | 0a35a32 + (dieser Commit) | [261005-jqd-verwaltung-aufgeraeumt](.planning/quick/261005-jqd-verwaltung-aufgeraeumt/) |
| 261006-dcs | Linux-App: weißes Fenster auf Arch/EndeavourOS (libwayland aus AppImage entfernt) | 2026-10-06 | (dieser Commit) | [261006-dcs-linux-app-weisses-fenster-arch](.planning/quick/261006-dcs-linux-app-weisses-fenster-arch/) |
## Deferred Items
@@ -0,0 +1,10 @@
---
quick_id: 261006-dcs
date: 2026-10-06
---
# Linux-App: weißes Fenster auf EndeavourOS/Arch
User 06.10.: neuester Linux-Client startet auf EndeavourOS, zeigt nur weißes Fenster. WEBKIT_DISABLE_DMABUF_RENDERER / COMPOSITING / GDK_BACKEND=x11 helfen nicht; keine NVIDIA.
- Nachstellen im archlinux-Container (Xvfb), Ursache finden, im CI-Bau beheben.
@@ -0,0 +1,12 @@
---
quick_id: 261006-dcs
status: complete
date: 2026-10-06
---
# 261006-dcs: Linux-App weißes Fenster (Arch) — SUMMARY
- Nachgestellt: AppImage 1.9.2-beta.fffb7ff in archlinux:latest unter Xvfb -> "Could not create default EGL display: EGL_BAD_PARAMETER. Aborting...". Ursache: von linuxdeploy mitgebrachte libwayland-{client,cursor,egl,server} (Debian-Bau) passen nicht zu neuerem Mesa.
- Probe: dieselbe AppImage ohne die vier Dateien startet auf Arch UND Debian trixie (beide Bildschirmfotos zeigen die Einrichtungsseite).
- Lösung: .gitea/scripts/appimage-strip-wayland.sh nach "tauri build --bundles appimage": entpacken, libwayland-* löschen, mit appimagetool aus Tauris linuxdeploy-plugin-appimage und der runtime des Originals neu packen, `tauri signer sign` schreibt .sig neu (mit Wegwerfschlüssel geprüft). CI-Schritt + DESKTOP_PATHS (Stempel) ergänzt.
- linuxdeploy kennt --exclude-library, Tauri reicht aber keine Option durch -> Nachbearbeitung statt Bau-Option.
+1
View File
@@ -19,6 +19,7 @@ Diese Liste beschreibt in einfachen Worten, was sich von Version zu Version an T
### Behoben
- Linux-App: Auf Arch-basierten Systemen wie EndeavourOS zeigte die App nach dem Start nur ein weißes Fenster. Die App bringt die Grafik-Bibliotheken, die dort nicht zum System passten, nicht mehr selbst mit, sondern nutzt die des Systems.
- Kalender (Exchange): Ist der Exchange-Server nicht erreichbar, bricht „Verbindung testen“ jetzt nach 15 Sekunden ab, statt rund zwei Minuten auf „Verbindung wird geprüft …“ zu stehen, und meldet „Der Kalender-Server ist nicht erreichbar“ statt des Hinweises auf Adresse und Zugangsdaten. Auch der regelmäßige Abruf im Hintergrund wartet nicht mehr länger als 15 Sekunden.
- Postfach-Abruf über Exchange (E-Mail-Alarme, PDF-Anhänge): Ein nicht erreichbarer Exchange-Server blockiert den Abruf und den Verbindungstest nicht mehr minutenlang, sondern höchstens 60 Sekunden.
- Links in Notiz-Kacheln öffnen jetzt immer in einem neuen Tab, statt das Dashboard im selben Fenster zu verlassen. In der Desktop-App öffnen sie wie gewohnt im Browser.