· Infra · 3 min read
UpNote (and any Electron app) won't show a window on NVIDIA + Wayland
I installed UpNote on Ubuntu 26.04 today, clicked the launcher, and got nothing. No window. No splash. The dock didn't even register that anything had started. pgrep told me the process was very much alive — main browser process, three renderers, zygotes, the works — but there was nothing on screen to interact with.
Took me longer than I'd like to figure out, so writing it up. The fix turned out to apply to any Electron app on this hardware, not just UpNote.
The symptom
$ pgrep -af /opt/UpNote/upnote
38490 /opt/UpNote/upnote
38494 /opt/UpNote/upnote --type=zygote --no-zygote-sandbox
38740 ... --type=utility --utility-sub-type=network.mojom.NetworkService ...
38955 ... --type=renderer ...
38956 ... --type=renderer ...
38972 ... --type=renderer ...
Process is fine. Three renderers means three BrowserWindows have been created internally. The app even registered a tray icon — I could see it on the StatusNotifierWatcher bus:
$ gdbus call --session --dest org.kde.StatusNotifierWatcher \
--object-path /StatusNotifierWatcher \
--method org.freedesktop.DBus.Properties.Get \
org.kde.StatusNotifierWatcher RegisteredStatusNotifierItems
(<[..., ':1.175@/StatusNotifierItem']>,)
:1.175 was UpNote, registered as Active. But no xdg_toplevel, no XWayland window, nothing.
What's actually broken
Two independent failures, stacked. You only see the second one once the first is out of the way, which is why this took a while.
Failure 1 — the GPU process segfaults on nvidia-drm. Launching with --enable-logging=stderr --v=1:
WARNING: Should skip nVidia device named: nvidia-drm
WARNING: Forcibly using value of --render-node-override
ERROR: vaInitialize failed: unknown libva error
ERROR: GPU process exited unexpectedly: exit_code=139
WARNING: The GPU process has crashed 1 time(s)
... (repeated 5 more times)
FATAL: GPU process isn't usable. Goodbye.
Chromium picks the nvidia render node (/dev/dri/renderD129 on this box), VAAPI init fails, the GPU process segfaults, gets restarted, segfaults again. Six crashes in two seconds, then FATAL and the whole Chromium teardown follows. The window never gets a chance to paint. Standard fix: --disable-gpu.
Failure 2 — Electron's native Wayland backend doesn't map the window. With --disable-gpu the GPU process stops crashing, but the window still doesn't appear. The renderers spawn, the network requests fly out (UpNote calls home for license validation, etc.), but no toplevel ever exists.
$ xlsclients -l | grep -i upnote
$ # nothing
Empty under XWayland too. So either the window is on native Wayland and Mutter isn't mapping it, or no surface is being created at all. Adding --ozone-platform=x11 to force XWayland:
$ xlsclients -l | grep -i upnote
Window 0x1000001:
Name: upnote
Class: upnote/Upnote
Window appears. Immediately. I couldn't pin down whether this is an Electron bug, a Mutter bug, or some interaction with NVIDIA's Wayland EGL implementation, but forcing XWayland is reliable and the rendering performance is fine.
The fix
Override the system .desktop file with a user-local one — survives package updates, doesn't touch /usr:
cp /usr/share/applications/upnote.desktop ~/.local/share/applications/upnote.desktop
Edit ~/.local/share/applications/upnote.desktop and prepend the flags to Exec:
Exec=/opt/UpNote/upnote --disable-gpu --ozone-platform=x11 %U
Then refresh the desktop database:
update-desktop-database ~/.local/share/applications
GNOME's launcher and dock will pick the user-local entry over the system one. UpNote now opens normally from the menu, the dock icon, and gtk-launch upnote.
Why this is worth flagging
The per-app annoyance is small. The pattern isn't.
If you're on NVIDIA + Wayland on a recent Ubuntu, this same combination silently breaks a lot of Electron-based apps: Slack, Discord, Obsidian, VS Code (sometimes), Mattermost, Logseq, Postman, anything else built on a recent Electron. Some apps work because they ship their own override flags or detect NVIDIA and disable GPU automatically. Some don't, and you get the exact UpNote experience — installer reports success, launcher does nothing, no error message anywhere unless you launch from a terminal with verbose logging.
When you hit a "process runs but no window" Electron problem on this kind of setup, the diagnostic flow is:
pgrep -af <binary>— confirm the process is alive.xlsclients -l | grep -i <app>— empty means no XWayland window. Either the app is on native Wayland (and may not be mapping correctly) or no window exists.- Re-launch from a terminal with
--enable-logging=stderr --v=1and grep forERROR|FATAL|crash. If you see GPU process crashes, that's failure 1. - Add
--disable-gpu --ozone-platform=x11to the.desktopExecline. Re-launch.
It would be nice if Electron upstream auto-fell-back to XWayland when the Wayland surface fails to map, or if the NVIDIA driver and Mesa VAAPI stopped tripping over each other on render-node selection. Until either of those happens, two flags in one .desktop file is the patch.