From 8ac3411e88e7e3e8e1a8cb8182bfe5f7202354ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=B0=B8=E8=B5=AB?= <1259085392@qq.com> Date: Fri, 3 Jul 2026 15:03:38 +0900 Subject: [PATCH 1/3] fix: disable WebKit DMABuf renderer on Linux --- src-tauri/src/app_runtime.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src-tauri/src/app_runtime.rs b/src-tauri/src/app_runtime.rs index 227bd65..49f136a 100644 --- a/src-tauri/src/app_runtime.rs +++ b/src-tauri/src/app_runtime.rs @@ -9,6 +9,21 @@ use crate::{ DEFAULT_SHELL_LOCALE, DESKTOP_LOG_FILE, STARTUP_MODE_ENV, }; +const WEBKIT_DISABLE_DMABUF_RENDERER_ENV: &str = "WEBKIT_DISABLE_DMABUF_RENDERER"; + +fn should_set_webkit_dmabuf_renderer_env(existing_value: Option<&std::ffi::OsStr>) -> bool { + existing_value.is_none() +} + +#[cfg(target_os = "linux")] +fn configure_linux_webkit_workarounds() { + if should_set_webkit_dmabuf_renderer_env( + std::env::var_os(WEBKIT_DISABLE_DMABUF_RENDERER_ENV).as_deref(), + ) { + std::env::set_var(WEBKIT_DISABLE_DMABUF_RENDERER_ENV, "1"); + } +} + fn configure_plugins(builder: Builder) -> Builder { builder .plugin(tauri_plugin_autostart::init( @@ -168,6 +183,9 @@ fn handle_run_event(app_handle: &tauri::AppHandle, event: RunEvent) { } pub(crate) fn run() { + #[cfg(target_os = "linux")] + configure_linux_webkit_workarounds(); + append_startup_log("desktop process starting"); append_startup_log(&format!( "desktop log path: {}", @@ -207,3 +225,19 @@ pub(crate) fn run() { .expect("error while building tauri application") .run(handle_run_event); } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn webkit_dmabuf_workaround_is_set_only_when_unset() { + assert!(should_set_webkit_dmabuf_renderer_env(None)); + assert!(!should_set_webkit_dmabuf_renderer_env(Some( + std::ffi::OsStr::new("0") + ))); + assert!(!should_set_webkit_dmabuf_renderer_env(Some( + std::ffi::OsStr::new("1") + ))); + } +} From cf8fe3edf5e702a35a526d5fd95b54af282941c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=B0=B8=E8=B5=AB?= <1259085392@qq.com> Date: Fri, 3 Jul 2026 15:10:19 +0900 Subject: [PATCH 2/3] fix: limit WebKit DMABuf workaround to Wayland --- src-tauri/src/app_runtime.rs | 39 +++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src-tauri/src/app_runtime.rs b/src-tauri/src/app_runtime.rs index 49f136a..6a8cc3d 100644 --- a/src-tauri/src/app_runtime.rs +++ b/src-tauri/src/app_runtime.rs @@ -10,15 +10,20 @@ use crate::{ }; const WEBKIT_DISABLE_DMABUF_RENDERER_ENV: &str = "WEBKIT_DISABLE_DMABUF_RENDERER"; +const WAYLAND_DISPLAY_ENV: &str = "WAYLAND_DISPLAY"; -fn should_set_webkit_dmabuf_renderer_env(existing_value: Option<&std::ffi::OsStr>) -> bool { - existing_value.is_none() +fn should_set_webkit_dmabuf_renderer_env( + existing_value: Option<&std::ffi::OsStr>, + wayland_display: Option<&std::ffi::OsStr>, +) -> bool { + existing_value.is_none() && wayland_display.is_some() } #[cfg(target_os = "linux")] fn configure_linux_webkit_workarounds() { if should_set_webkit_dmabuf_renderer_env( std::env::var_os(WEBKIT_DISABLE_DMABUF_RENDERER_ENV).as_deref(), + std::env::var_os(WAYLAND_DISPLAY_ENV).as_deref(), ) { std::env::set_var(WEBKIT_DISABLE_DMABUF_RENDERER_ENV, "1"); } @@ -231,13 +236,27 @@ mod tests { use super::*; #[test] - fn webkit_dmabuf_workaround_is_set_only_when_unset() { - assert!(should_set_webkit_dmabuf_renderer_env(None)); - assert!(!should_set_webkit_dmabuf_renderer_env(Some( - std::ffi::OsStr::new("0") - ))); - assert!(!should_set_webkit_dmabuf_renderer_env(Some( - std::ffi::OsStr::new("1") - ))); + fn webkit_dmabuf_workaround_is_set_only_for_wayland_without_override() { + assert!(should_set_webkit_dmabuf_renderer_env( + None, + Some(std::ffi::OsStr::new("wayland-0")) + )); + assert!(!should_set_webkit_dmabuf_renderer_env(None, None)); + assert!(!should_set_webkit_dmabuf_renderer_env( + Some(std::ffi::OsStr::new("0")), + Some(std::ffi::OsStr::new("wayland-0")) + )); + assert!(!should_set_webkit_dmabuf_renderer_env( + Some(std::ffi::OsStr::new("1")), + Some(std::ffi::OsStr::new("wayland-0")) + )); + assert!(!should_set_webkit_dmabuf_renderer_env( + Some(std::ffi::OsStr::new("0")), + None + )); + assert!(!should_set_webkit_dmabuf_renderer_env( + Some(std::ffi::OsStr::new("1")), + None + )); } } From b4ac92e34bcd2d2a48499d072cc325c2273c0967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=B0=B8=E8=B5=AB?= <1259085392@qq.com> Date: Fri, 3 Jul 2026 15:28:12 +0900 Subject: [PATCH 3/3] fix: log Linux WebKit workaround application --- src-tauri/src/app_runtime.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src-tauri/src/app_runtime.rs b/src-tauri/src/app_runtime.rs index 6a8cc3d..16e266c 100644 --- a/src-tauri/src/app_runtime.rs +++ b/src-tauri/src/app_runtime.rs @@ -26,6 +26,9 @@ fn configure_linux_webkit_workarounds() { std::env::var_os(WAYLAND_DISPLAY_ENV).as_deref(), ) { std::env::set_var(WEBKIT_DISABLE_DMABUF_RENDERER_ENV, "1"); + append_startup_log(&format!( + "applied Linux WebKit workaround: set {WEBKIT_DISABLE_DMABUF_RENDERER_ENV}=1" + )); } }