From da9a65c7d0cd8bbf9e35db1a46b6eae18f3ad9fb Mon Sep 17 00:00:00 2001 From: Schalli Date: Tue, 6 Oct 2026 09:36:56 +0200 Subject: [PATCH] fix(261006-dcs): Linux-AppImage ohne mitgebrachte libwayland (weisses Fenster auf Arch) 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) --- .gitea/scripts/appimage-strip-wayland.sh | 70 +++++++++++++++++++ .gitea/scripts/desktop-stamp.sh | 2 +- .gitea/workflows/ci.yml | 10 +++ .planning/STATE.md | 3 +- .../261006-dcs-PLAN.md | 10 +++ .../261006-dcs-SUMMARY.md | 12 ++++ CHANGELOG.md | 1 + 7 files changed, 106 insertions(+), 2 deletions(-) create mode 100755 .gitea/scripts/appimage-strip-wayland.sh create mode 100644 .planning/quick/261006-dcs-linux-app-weisses-fenster-arch/261006-dcs-PLAN.md create mode 100644 .planning/quick/261006-dcs-linux-app-weisses-fenster-arch/261006-dcs-SUMMARY.md diff --git a/.gitea/scripts/appimage-strip-wayland.sh b/.gitea/scripts/appimage-strip-wayland.sh new file mode 100755 index 0000000..e644119 --- /dev/null +++ b/.gitea/scripts/appimage-strip-wayland.sh @@ -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 diff --git a/.gitea/scripts/desktop-stamp.sh b/.gitea/scripts/desktop-stamp.sh index 8ecc2a8..b65684d 100755 --- a/.gitea/scripts/desktop-stamp.sh +++ b/.gitea/scripts/desktop-stamp.sh @@ -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" diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 73ca48b..34eafbc 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -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: diff --git a/.planning/STATE.md b/.planning/STATE.md index 36857f6..2ebf8d3 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -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 diff --git a/.planning/quick/261006-dcs-linux-app-weisses-fenster-arch/261006-dcs-PLAN.md b/.planning/quick/261006-dcs-linux-app-weisses-fenster-arch/261006-dcs-PLAN.md new file mode 100644 index 0000000..5a0fd92 --- /dev/null +++ b/.planning/quick/261006-dcs-linux-app-weisses-fenster-arch/261006-dcs-PLAN.md @@ -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. diff --git a/.planning/quick/261006-dcs-linux-app-weisses-fenster-arch/261006-dcs-SUMMARY.md b/.planning/quick/261006-dcs-linux-app-weisses-fenster-arch/261006-dcs-SUMMARY.md new file mode 100644 index 0000000..df098d8 --- /dev/null +++ b/.planning/quick/261006-dcs-linux-app-weisses-fenster-arch/261006-dcs-SUMMARY.md @@ -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. diff --git a/CHANGELOG.md b/CHANGELOG.md index 399b541..8a53804 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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.