Linux: forced WEBKIT_DISABLE_DMABUF_RENDERER=1 makes the main window transparent on WebKitGTK 2.54 (only repainted regions show)
Maintainer antworten meist innerhalb von 1 Tag
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 25/100
Rechercherichtung
The forced variable is set unconditionally in apps/desktop/src-tauri/src/main.rs, lines 48-51, under a #[cfg(target_os = "linux")] block. Read that block, then check the linked PR #2628 before starting, since it is already open against this issue. Done means the variable is skipped when the user has already set it, and the window renders on WebKitGTK 2.54 without the shim.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Description
On Linux with WebKitGTK 2.54, Cap's main window is almost entirely invisible. The window exists (KWin reports it mapped, 330×395, not hidden/minimized), but only the regions that get repainted show up: a hovered button, a toggle being animated, etc. Everything else stays transparent, so you see the desktop through the window.
The cause is the unconditional override added for #1948:
#[cfg(target_os = "linux")]
unsafe {
std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1");
}
With WebKitGTK 2.54, disabling the DMABUF renderer on a transparent window makes WebKit repaint only the damaged areas, and the rest of the surface is never painted. Other Tauri projects hit the same regression on 2.54 (e.g. rogeriojunior31/vultures-ai#126, xnmp/tauri-explorer#1057).
Because the variable is overwritten with set_var, users can't opt out: running WEBKIT_DISABLE_DMABUF_RENDERER=0 Cap still yields WEBKIT_DISABLE_DMABUF_RENDERER=1 in the environment of Cap's WebKitWebProcess (checked via /proc/<pid>/environ).
Reproduction
- Debian 13, KDE Plasma 6.3 Wayland, WebKitGTK 2.54.0.
- Install Cap 0.6.0 (
.deb) and launch it. - The main window is transparent except for elements being hovered or animated.
What I tried
All of these still show the bug, because the forced variable stays in effect:
GDK_BACKEND=x11(XWayland)WEBKIT_DISABLE_COMPOSITING_MODE=1WEBKIT_SKIA_ENABLE_CPU_RENDERING=1- forcing Mesa EGL instead of NVIDIA (
__EGL_VENDOR_LIBRARY_FILENAMES=.../50_mesa.json) WEBKIT_FORCE_COMPOSITING_MODE=1
Workaround that fixes it: an LD_PRELOAD shim that turns setenv("WEBKIT_DISABLE_DMABUF_RENDERER", …) into a no-op. With the variable unset, the window renders fully and correctly on this machine.
#define _GNU_SOURCE
#include <dlfcn.h>
#include <string.h>
int setenv(const char *name, const char *value, int overwrite) {
static int (*real)(const char *, const char *, int);
if (!real) real = dlsym(RTLD_NEXT, "setenv");
if (name && strcmp(name, "WEBKIT_DISABLE_DMABUF_RENDERER") == 0) return 0;
return real(name, value, overwrite);
}
Suggested fix
At minimum, respect a value the user already set, so people can opt out without a shim:
#[cfg(target_os = "linux")]
if std::env::var_os("WEBKIT_DISABLE_DMABUF_RENDERER").is_none() {
unsafe { std::env::set_var("WEBKIT_DISABLE_DMABUF_RENDERER", "1"); }
}
Better still, don't apply the workaround by default on WebKitGTK ≥ 2.54 (or limit it to the configurations from #1948), since it now breaks rendering instead of fixing it.
Environment
- Cap 0.6.0 (
.deb) - Debian GNU/Linux 13 (trixie), kernel 6.12
- KDE Plasma / KWin 6.3.6, Wayland session
- libwebkit2gtk-4.1 2.54.0
- Hybrid GPU: Intel Raptor Lake UHD (i915) + NVIDIA RTX 4060 Laptop (driver 555.58.02)
Related: #1948, #1553
- Vorherrschende Sprache
- Rust
- Sterne
- 23.4k
- Forks
- 2.1k
- Ø Merge
- 1 T. 18 Std.
- Gemergte PRs (30 T.)
- 252
Entwicklungsumgebung
- Enthält ein Dockerfile oder eine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus CapSoftware/Cap
-
Web player intercepts ⌘⇧M and blocks Chrome profile-menu shortcutEvtl. vergeben @AatmanAJ hat das vor 5 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 80/100
CapSoftware/Cap#2596 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
CapSoftware/Cap#2384 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Dashboard pagination causes full page reloads on self-hosted CapEvtl. vergeben @Dewin hat das vor 33 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
CapSoftware/Cap#2305 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
CapSoftware/Cap#1714 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Linux audio Import file button does not open a chooserEvtl. vergeben @AksharP5 hat das heute übernommen. Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 68/100
CapSoftware/Cap#2737 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in CapSoftware/Cap
Ähnliche Issues
-
engine-rs P3 review-deferral wasm
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 77/100
maniator/verticopolis#1154 ·
Maintainer antworten meist innerhalb von 1 Tag
-
FFMPEG_BIN/FFPROBE_BIN are always overridden, so a working system ffmpeg cannot be usedEvtl. vergeben @Bilker1422 hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Stremio/stremio-service#116 · 1 Kommentar ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 83/100
sims1253/ry#720 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag