diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 9d81b848f..f5329eeda 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -16,6 +16,19 @@ fn main() { if std::env::var("WEBKIT_DISABLE_COMPOSITING_MODE").is_err() { std::env::set_var("WEBKIT_DISABLE_COMPOSITING_MODE", "1"); } + + // AppImage 的 GTK 启动钩子 (linuxdeploy-plugin-gtk.sh) 会无条件 + // `export GDK_BACKEND=x11` 强制走 XWayland,以规避历史上的 Wayland 崩溃 + // (tauri-apps/tauri#8541)。但在较新的 Wayland + NVIDIA 环境下,强制 XWayland + // 反而使 WebKitGTK 的 webview 收不到指针事件(标题栏可点、网页内容点不动), + // resize 后黑屏;改回原生 Wayland 即可解决,且该崩溃在 WebKitGTK 2.52 上已不复现。 + // 由于该钩子会覆盖用户预设的 GDK_BACKEND,这里提供一个钩子不会触碰的逃生开关: + // 设置 CC_SWITCH_GDK_BACKEND=wayland 即可强制覆盖,默认行为保持不变(零回归)。 + if let Ok(backend) = std::env::var("CC_SWITCH_GDK_BACKEND") { + if !backend.is_empty() { + std::env::set_var("GDK_BACKEND", backend); + } + } } cc_switch_lib::run();