From 5a8014fe7cb94622e9c0eee422deb4ebc590245b Mon Sep 17 00:00:00 2001 From: Vasilito Date: Wed, 6 May 2026 16:10:18 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20kded6=20wrapper=20script=20=E2=80=94=20d?= =?UTF-8?q?efinitive=20Qt6=20Wayland=20crash=20prevention?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit kded6 wrapper (/usr/bin/kded6 → kded6-wrapper.sh → kded6.real): - Sets QT_QPA_PLATFORM=offscreen before executing real kded6 - Works regardless of launch mechanism (init, D-Bus, direct) - No dependency on #ifdef Q_OS_REDOX, D-Bus Environment=, or build cache - kded6 is a headless D-Bus daemon — Wayland adds no functionality redox.patch: added null guards to wayland-client.c (wl_proxy_add_listener, wl_proxy_get_version, wl_proxy_get_display) — durable patch for when libwayland build is fixed. --- local/patches/libwayland/redox.patch | 28 +++++++++++++++++++ local/recipes/kde/kf6-kded6/recipe.toml | 8 ++++++ .../kde/kf6-kded6/source/kded6-wrapper.sh | 6 ++++ 3 files changed, 42 insertions(+) create mode 100644 local/recipes/kde/kf6-kded6/source/kded6-wrapper.sh diff --git a/local/patches/libwayland/redox.patch b/local/patches/libwayland/redox.patch index 68a5b3e08..6dfb02547 100644 --- a/local/patches/libwayland/redox.patch +++ b/local/patches/libwayland/redox.patch @@ -37,3 +37,31 @@ #include #include +@@ -649,6 +649,11 @@ + wl_proxy_add_listener(struct wl_proxy *proxy, + void (**implementation)(void), void *data) + { ++ if (!proxy) { ++ fprintf(stderr, "FATAL: wl_proxy_add_listener(NULL) caller=%p -- returning error\n", ++ __builtin_return_address(0)); ++ return -1; ++ } + if (proxy->flags & WL_PROXY_FLAG_WRAPPER) + wl_abort("Proxy %p is a wrapper\n", proxy); + +@@ -2442,6 +2447,7 @@ + WL_EXPORT uint32_t + wl_proxy_get_version(struct wl_proxy *proxy) + { ++ if (!proxy) return 0; + return proxy->version; + } + +@@ -2560,6 +2566,7 @@ + WL_EXPORT struct wl_display * + wl_proxy_get_display(struct wl_proxy *proxy) + { ++ if (!proxy) return NULL; + return proxy->display; + } + diff --git a/local/recipes/kde/kf6-kded6/recipe.toml b/local/recipes/kde/kf6-kded6/recipe.toml index 2fb1fc281..9d1ecfac1 100644 --- a/local/recipes/kde/kf6-kded6/recipe.toml +++ b/local/recipes/kde/kf6-kded6/recipe.toml @@ -39,6 +39,14 @@ cmake "${COOKBOOK_SOURCE}" \ cmake --build . -j${COOKBOOK_MAKE_JOBS} DESTDIR="${COOKBOOK_STAGE}" cmake --install . --prefix /usr +# Prevent Qt6 Wayland crash on Redox: wrap kded6 with QT_QPA_PLATFORM=offscreen. +# kded6 is a headless D-Bus daemon — Wayland is unnecessary. +if [ -f "${COOKBOOK_STAGE}/usr/bin/kded6" ]; then + mv "${COOKBOOK_STAGE}/usr/bin/kded6" "${COOKBOOK_STAGE}/usr/bin/kded6.real" + cp "${COOKBOOK_SOURCE}/kded6-wrapper.sh" "${COOKBOOK_STAGE}/usr/bin/kded6" + chmod +x "${COOKBOOK_STAGE}/usr/bin/kded6" +fi + for lib in "${COOKBOOK_STAGE}/usr/lib/"libKF6*.so.*; do [ -f "${lib}" ] || continue patchelf --remove-rpath "${lib}" 2>/dev/null || true diff --git a/local/recipes/kde/kf6-kded6/source/kded6-wrapper.sh b/local/recipes/kde/kf6-kded6/source/kded6-wrapper.sh new file mode 100644 index 000000000..e6c968f12 --- /dev/null +++ b/local/recipes/kde/kf6-kded6/source/kded6-wrapper.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# kded6 wrapper — prevents Qt6 Wayland QPA crash on Redox +# Qt6 Wayland page-faults at null+8 during wl_proxy_add_listener. +# kded6 is a headless D-Bus daemon; Wayland is unnecessary. +export QT_QPA_PLATFORM=offscreen +exec /usr/bin/kded6.real "$@"