wailsapp/wails

Blank window

infinitebugs32 opened this issue · 18 comments

Description

Yesterday my app worked just fine. This morning, after making no changes to the code, I executed wails dev and it resulted in a full gray window. However when I randomly move my mouse on the window I can see the tooltips of my app.
Can't even open the dev tools in the wails window. Works in the browser though (wails dev --browser).
My main.go does correctly include the assets:

//go:embed frontend/dist
var assets embed.FS

Wails dev output:

INF | Serving assets from frontend DevServer URL: http://localhost:5173/
Overriding existing handler for signal 10. Set JSC_SIGNAL_FOR_GC if you want WebKit to use a different signal
DEB | [DevWebServer] Serving DevServer at http://localhost:34115
KMS: DRM_IOCTL_MODE_CREATE_DUMB failed: Permission denied
Failed to create GBM buffer of size 800x800: Permission denied
KMS: DRM_IOCTL_MODE_CREATE_DUMB failed: Permission denied
Failed to create GBM buffer of size 800x800: Permission `denied`
KMS: DRM_IOCTL_MODE_CREATE_DUMB failed: Permission denied
Failed to create GBM buffer of size 800x800: Permission denied

When I try to run the binary after building:

Overriding existing handler for signal 10. Set JSC_SIGNAL_FOR_GC if you want WebKit to use a different signal
KMS: DRM_IOCTL_MODE_CREATE_DUMB failed: Permission denied
Failed to create GBM buffer of size 800x800: Permission denied
KMS: DRM_IOCTL_MODE_CREATE_DUMB failed: Permission denied
Failed to create GBM buffer of size 800x800: Permission denied
KMS: DRM_IOCTL_MODE_CREATE_DUMB failed: Permission denied
Failed to create GBM buffer of size 800x800: Permission denied
Failed to create EGL images for DMABufs with file descriptors -1, -1 and -1
dom ready

My coworker's output:

└──>>>  Wed Oct 11 - 12:44:28  $ ./build/bin/testwebkit 
Overriding existing handler for signal 10. Set JSC_SIGNAL_FOR_GC if you want WebKit to use a different signal
src/nv_gbm.c:99: GBM-DRV error (nv_gbm_bo_create): DRM_IOCTL_NVIDIA_GEM_ALLOC_NVKMS_MEMORY failed (ret=-1)

Failed to create GBM buffer of size 1024x768: Invalid argument
src/nv_gbm.c:99: GBM-DRV error (nv_gbm_bo_create): DRM_IOCTL_NVIDIA_GEM_ALLOC_NVKMS_MEMORY failed (ret=-1)

Failed to create GBM buffer of size 1024x768: Invalid argument
src/nv_gbm.c:99: GBM-DRV error (nv_gbm_bo_create): DRM_IOCTL_NVIDIA_GEM_ALLOC_NVKMS_MEMORY failed (ret=-1)

Failed to create GBM buffer of size 1024x768: Invalid argument
Failed to create EGL images for DMABufs with file descriptors -1, -1 and -1

To Reproduce

wails init -n testwebkit
wails dev 

Expected behaviour

I expect a properly working Wails app window

Screenshots

wails dev --browser
image

Attempted Fixes

Remove webkit packages. Break my system. Cry. Reinstall webkit. Reinstall Gnome. No solution.

System Details

Me:
Kubuntu 22.04
Wails v2.4.1
Vite v3.1.8
Webkit: libwebkit2gtk-4.0-37 libwebkit2gtk-4.0-dev

My co-worker who has the same issue:
Arch Linux (kernel: 6.5.6-arch2-1)
Wails v2.6.0
Webkit: webkit2gtk 2.42.1-1 webkit2gtk-4.1 2.42.1-1 webkitgtk-6.0 2.42.1-1

Additional context

Similar to #2975 and #9

Same issue for every Wails project (with this Archlinux config). Not just for a new created project.

I wonder if your systems silently upgraded some deps. There's no reason anything should change overnight with your code or deps....

linux.WebviewGpuPolicyNever does the job . However I will keep looking into it to find a solution that doesn't require disabling hardware acceleration. Could you leave this issue open ?
Thank you !

What will be the permanent fix?

Standardisation in Linux distros 😅

I saw similar issue when open my cisco anyconnect client. so I search the error and I found this. I have a WAR that use WEBKIT_DISABLE_DMABUF_RENDERER=1 /opt/cisco/anyconnect/bin/vpnui or export WEBKIT_DISABLE_DMABUF_RENDERER=1 before launch the application. I'm managing to find a thorough solution.

Thanks for the info. Sounds like an ecosystem wide issue 😞

If anyone who is having the issue is comfortable with local Dev, then setting this environment in this function might fix the issue: https://github.com/wailsapp/wails/blob/master/v2/internal/frontend/desktop/linux/frontend.go#L139

If it does we can make it a flag.

db47h commented

There are several webkit bug reports related to this:
https://bugs.webkit.org/show_bug.cgi?id=228268 and https://bugs.webkit.org/show_bug.cgi?id=261874#c32

This is clearly webkit/nvidia related and there's no real fix yet (even the nv drivers update mentioned in 281874 does not fix this bug for me).

IMO, the best way to tackle this in wails and its ecosystem is:

  • add a bool command line flag like -webkit-dmabuf-renderer set to false by default (which would set WEBKIT_DISABLE_DMABUF_RENDERER=1 by default on linux).
  • end users who can read a README and need better performance can then re-enable it.
  • keep this issue open until the upstream bug is resolved, then change the default flag value to true

This way, end-users won't even see the bug and this would put less pressure on devs.

db47h commented

Assuming that very little client code uses the options.App.Linux field, I my have an even simpler solution:

diff --git a/v2/internal/frontend/desktop/linux/window.go b/v2/internal/frontend/desktop/linux/window.go
index 82030f43..71516097 100644
--- a/v2/internal/frontend/desktop/linux/window.go
+++ b/v2/internal/frontend/desktop/linux/window.go
@@ -25,6 +25,7 @@ import (
        "github.com/wailsapp/wails/v2/internal/frontend"
        "github.com/wailsapp/wails/v2/pkg/menu"
        "github.com/wailsapp/wails/v2/pkg/options"
+       "github.com/wailsapp/wails/v2/pkg/options/linux"
 )
 
 func gtkBool(input bool) C.gboolean {
@@ -90,6 +91,9 @@ func NewWindow(appoptions *options.App, debug bool, devtoolsEnabled bool) *Windo
        var webviewGpuPolicy int
        if appoptions.Linux != nil {
                webviewGpuPolicy = int(appoptions.Linux.WebviewGpuPolicy)
+       } else {
+               // TODO: see https://github.com/wailsapp/wails/issues/2977
+               webviewGpuPolicy = int(linux.WebviewGpuPolicyNever)
        }

Then add a warning in the docs for linux.Options.WebviewGpuPolicy about the potential issues and the default behavior. The only problem I see is that not setting options.App.Linux would have a different behavior than providing an empty {}&linux.Options.

Happy to accept a PR on this. Agree - it's probably the best way forward.

db47h commented

Here you go #3027.

I ran into this issue trying use webkit2gtk on arch linux (with an nvidia card) and I was able to fix it without setting WEBKIT_DISABLE_DMABUF_RENDERER=1.

Here is how I fixed it:

  1. Check if you have modesetting enabled via

     cat /sys/module/nvidia_drm/parameters/modeset
    
  2. If you see printed N then you need to enable it with

     echo options nvidia_drm modeset=1 | sudo tee /etc/modprobe.d/nvidia_drm.conf
    
  3. Restart your computer

Thank you so much @nobane this works perfectly on my Arch machine.

How long is this going to be a problem? May not be directly your fault but the last Archlinux build of the gnome-notes package is March 2024. My laptop which is i915 (Intel Xe Integrated Graphics) has no problem but my NVIDIA 2080Ti desktop has issues displaying a note (no text)

I have nvidia_drm/parameters/modeset enabled (Y) on this machine and the issue persists.

I ran into this issue trying use webkit2gtk on arch linux (with an nvidia card) and I was able to fix it without setting WEBKIT_DISABLE_DMABUF_RENDERER=1.

Here is how I fixed it:

  1. Check if you have modesetting enabled via
     cat /sys/module/nvidia_drm/parameters/modeset
    
  2. If you see printed N then you need to enable it with
     echo options nvidia_drm modeset=1 | sudo tee /etc/modprobe.d/nvidia_drm.conf
    
  3. Restart your computer

Did not work for me but WEBKIT_DISABLE_DMABUF_RENDERER=1 did the trick.
I'm using Ubuntu 22.04.4 LTS with KDE Plasma and nvidia driver 470 on GTX960
I'm getting some errors like this in dmesg:
[drm:nv_drm_master_set [nvidia_drm]] *ERROR* [nvidia-drm] [GPU ID 0x00000c00] Failed to grab modeset ownership