From ce4f0c02cbfa143b25216a523b16cf985c431ac5 Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 27 Nov 2025 19:37:18 +0800 Subject: [PATCH] fix(linux): resolve WebKitGTK DMA-BUF rendering issue and preserve user .desktop customizations - Set WEBKIT_DISABLE_DMABUF_RENDERER=1 at startup to fix blank screen on Debian 13.2 and Nvidia GPUs - Only register deep-link handler on first run to avoid overwriting user customizations - Use correct Tauri path API (app.path().data_dir()) instead of dirs::data_dir() to match plugin's actual .desktop file location --- src-tauri/src/lib.rs | 33 +++++++++++++++++++++++++++++---- src-tauri/src/main.rs | 10 ++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 328ac5885..6a2e0f095 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -736,10 +736,35 @@ pub fn run() { // Linux 和 Windows 调试模式需要显式注册 #[cfg(any(target_os = "linux", all(debug_assertions, windows)))] { - if let Err(e) = app.deep_link().register_all() { - log::error!("✗ Failed to register deep link schemes: {}", e); - } else { - log::info!("✓ Deep link schemes registered (Linux/Windows)"); + #[cfg(target_os = "linux")] + { + // Use Tauri's path API to get correct path (includes app identifier) + // tauri-plugin-deep-link writes to: ~/.local/share/com.ccswitch.desktop/applications/cc-switch-handler.desktop + // Only register if .desktop file doesn't exist to avoid overwriting user customizations + let should_register = app + .path() + .data_dir() + .map(|d| !d.join("applications/cc-switch-handler.desktop").exists()) + .unwrap_or(true); + + if should_register { + if let Err(e) = app.deep_link().register_all() { + log::error!("✗ Failed to register deep link schemes: {}", e); + } else { + log::info!("✓ Deep link schemes registered (Linux)"); + } + } else { + log::info!("⊘ Deep link handler already exists, skipping registration"); + } + } + + #[cfg(all(debug_assertions, windows))] + { + if let Err(e) = app.deep_link().register_all() { + log::error!("✗ Failed to register deep link schemes: {}", e); + } else { + log::info!("✓ Deep link schemes registered (Windows debug)"); + } } } diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 2cf8dcf46..2d1f85285 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -2,5 +2,15 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] fn main() { + // 在 Linux 上设置 WebKit 环境变量以解决 DMA-BUF 渲染问题 + // 某些 Linux 系统(如 Debian 13.2、Nvidia GPU)上 WebKitGTK 的 DMA-BUF 渲染器可能导致白屏/黑屏 + // 参考: https://github.com/tauri-apps/tauri/issues/9394 + #[cfg(target_os = "linux")] + { + if std::env::var("WEBKIT_DISABLE_DMABUF_RENDERER").is_err() { + std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1"); + } + } + cc_switch_lib::run(); }