You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[BUG] Tray drawer freezes shell on every open when an item's IconThemePath is a large directory #412
Opening the tray drawer freezes the whole shell for ~500 ms on every click,
and up to ~20 s on the first open after boot.
Possible Cause
One tray item (wayscriber) reports IconThemePath = /usr/share/icons. TrayWidget::resolveFromTrayThemePath() recursively walks that directory to build
an icon index. The drawer creates a new TrayWidget on each open and destroys it
in TrayDrawerPanel::onClose(), so the index is lost and the full walk repeats on
every open, synchronously on the main loop.
Workaround
Pinning the item to the bar (pinned = ["wayscriber"]) takes it out of the drawer,
and the drawer then opens instantly.
Suggestion (according to Claude IA)
Cache the IconThemePath index outside the widget (e.g. in the tray service,
keyed by path), or build it off the main loop, so that one misbehaving tray item
can't stall the shell.
**Version:** Noctalia 5.3.0 (CachyOS, tested on both Niri and Umbriel)
surface prepareFrame callback took 494.1ms (…, 140x60 logical)
surface prepareFrame callback took 20468.7ms (…, 140x60 logical) # first open after boot
`strace -c` during a single drawer open: 84,748 `newfstatat` calls (0.48 s).
Thank you for the clear report and the strace data! Your analysis is correct.
The problem has two parts:
Wayscriber sent /usr/share/icons as its tray IconThemePath. That folder holds every installed icon theme. Tray hosts already search it, so Wayscriber gained nothing when it sent it.
#413 removes the Wayscriber part, and it is now in main. An install under /usr no longer sends an IconThemePath. An install in a custom location, such as /opt, still sends its own icon folder.
We reproduced the delay with Noctalia 5.3.0 in a test session on Sway. With the old build, every drawer open was slow. With main, the delay was gone and the icon still showed. The empty WAYSCRIBER_ICON_THEME_PATH setting below gave the same result. Our test did not use niri or a cold boot, so a test on your system is still useful.
If you can, please test from main branch. It should be fixed on main.
If you do so:
Build Wayscriber from main. The From source section lists the dependencies.
git clone https://github.com/devmobasa/wayscriber.git
cd wayscriber
cargo build --release
Stop the installed daemon. If you use systemd, run systemctl --user stop wayscriber.service.
Start the new build with ./target/release/wayscriber --daemon.
Remove wayscriber from the pinned list in Noctalia, so that the icon is in the drawer again.
Open the drawer several times.
When you finish the test, stop the new build. Then start the installed daemon again with systemctl --user start wayscriber.service.
Then please answer:
Does the drawer open without the delay?
Does the Wayscriber icon still show correctly?
If you cannot build main, you can get the same result with the current release:
If you start Wayscriber with systemd, run systemctl --user edit wayscriber.service. Add these lines, then run systemctl --user restart wayscriber.service:
[Service]Environment=WAYSCRIBER_ICON_THEME_PATH=
If you start Wayscriber from your compositor configuration, start it with WAYSCRIBER_ICON_THEME_PATH= wayscriber --daemon.
With this setting, you can also reboot and report if the first open after boot is fast. That first open had the 20-second delay.
Activity
devmobasa commentedon Oct 16, 2026
Thank you for the clear report and the
stracedata! Your analysis is correct.The problem has two parts:
/usr/share/iconsas its trayIconThemePath. That folder holds every installed icon theme. Tray hosts already search it, so Wayscriber gained nothing when it sent it.IconThemePathfolder each time it creates a tray widget. The drawer creates a new widget each time it opens, so the scan repeats. Noctalia tracks this in [BUG] Tray IconThemePath is indexed with an unbounded recursive walk on the render thread noctalia-dev/noctalia#4338, and a fix is in progress in fix(tray): do not index the whole system icon tree for a tray IconThemePath noctalia-dev/noctalia#4341.#413 removes the Wayscriber part, and it is now in
main. An install under/usrno longer sends anIconThemePath. An install in a custom location, such as/opt, still sends its own icon folder.We reproduced the delay with Noctalia 5.3.0 in a test session on Sway. With the old build, every drawer open was slow. With
main, the delay was gone and the icon still showed. The emptyWAYSCRIBER_ICON_THEME_PATHsetting below gave the same result. Our test did not use niri or a cold boot, so a test on your system is still useful.If you can, please test from
mainbranch. It should be fixed onmain.If you do so:
main. The From source section lists the dependencies.git clone https://github.com/devmobasa/wayscriber.git cd wayscriber cargo build --releasesystemctl --user stop wayscriber.service../target/release/wayscriber --daemon.wayscriberfrom thepinnedlist in Noctalia, so that the icon is in the drawer again.systemctl --user start wayscriber.service.Then please answer:
If you cannot build
main, you can get the same result with the current release:systemctl --user edit wayscriber.service. Add these lines, then runsystemctl --user restart wayscriber.service:WAYSCRIBER_ICON_THEME_PATH= wayscriber --daemon.With this setting, you can also reboot and report if the first open after boot is fast. That first open had the 20-second delay.
narayanls commentedon Oct 16, 2026
Hello again, finished testing and it works! No more freezes.
devmobasa commentedon Oct 16, 2026
That's great! Thanks for reporting!
The fix is in
main, and it will be in the next release. Until then, you can keep theWAYSCRIBER_ICON_THEME_PATH=setting or the pinned icon.I am closing this issue now. If the freeze comes back, or if the Wayscriber icon does not show, please reopen it.