Panel freezes for 1-3s every time a USB printer is turned on/off (Zorin Printers extension)

Hi everyone,

I've been using Zorin OS 18 for about a week now on a fresh install, and
overall the experience has been great — especially how well USB
peripherals are detected out of the box. While setting up my Epson
L3250 printer/scanner, though, I found a small but consistent glitch
I wanted to share, in case it helps improve things for others too.

The issue: every time the printer is powered on or off (or the USB
cable is unplugged/replugged), the whole desktop freezes for about
1-3 seconds. It's not a big deal functionally, but it's the kind of
small rough edge that stands out on an otherwise very polished system.

I dug into it a bit with journalctl and found the cause: at the exact
moment of the USB event, the built-in "Zorin Printers" panel extension
(zorin-printers) throws a flood of repeated GJS errors —
hundreds of lines in a couple of seconds — like this:

gnome-shell[PID]: Object St.BoxLayout (0x...), has been already disposed
— impossible to access it. This might be caused by the object having
been destroyed from C code using something such as destroy(), dispose(),
or remove() vfuncs.
== Stack trace for context 0x... ==
#0 ... resource:///org/gnome/shell/ui/popupMenu.js:828
#1 ... resource:///org/gnome/shell/ui/popupMenu.js:846
#2 ... extensions/zorin-printers@zorinos.com/extension.js:119
#3 ... extensions/zorin-printers@zorinos.com/extension.js:215

Similar traces also point to extension.js lines 122, 193, 194, 203, and
215, along with repeated Clutter assertion failures:

clutter_text_get_editable: assertion 'CLUTTER_IS_TEXT (self)' failed
clutter_text_get_text: assertion 'CLUTTER_IS_TEXT (self)' failed
clutter_text_set_text: assertion 'CLUTTER_IS_TEXT (self)' failed

My guess (not a GNOME Shell dev, just going by the logs) is a race
condition: when udev-configure-printer disables/enables the print queue
in response to the USB event, the extension tries to rebuild its panel
menu synchronously — but some widgets (St.BoxLayout, St.Label) have
already been destroyed by the Shell by the time the extension's
callback runs. Processing that flood of exceptions all at once seems
to be what causes the visible freeze.

System details:

  • Zorin OS 18, fresh install (< 1 week old)
  • Kernel: 6.17.0-35-generic
  • Session: Wayland
  • Printer: Epson L3250 (USB)

Steps to reproduce:

  1. Have a USB printer connected and set up (Epson L3250 in my case).
  2. Power the printer off, then back on (or just unplug/replug the USB
    cable).
  3. Desktop freezes for 1-3 seconds right at that moment.
  4. Watching journalctl -f during the event confirms the flood of
    "already disposed" errors from zorin-printers.

Workaround: disabling the extension (gnome-extensions disable
zorin-printers, then logging out/in — required on Wayland)
gets rid of the freeze completely. Printing still works fine through
Settings > Printers either way; you just lose the panel status icon.

Not urgent at all, just thought the detailed logs might save someone
some debugging time if they run into the same thing. Happy to share
the full journalctl output if useful — I've got it saved.

Thanks for all the work on Zorin, really enjoying it so far!

1 Like

Hello and welcome,
The fact that disabling the extension eliminates the freeze (while printing still works) confirms the extension is the source, not a driver issue or a core OS problem.
Maybe you can try this gnome extension instead (don't forget this : Required package: cups-bsd)

3 Likes

Welcome to the Forum!

I would agree to @Nourpon to try the non-Zorin Printers Gnome Extension to see if it behaves the same.

To that: Have You installed the offered Epson Printer Driver?
https://download-center.epson.com/softwares/?device_id=L3250+Series&region=US&os=DEBX64&language=en

1 Like

I can confirm what appears to be the same problem with a network printer.

System: Zorin OS 18.1 Pro
Printer: Brother DCP-L2550DW, network connected using IPP

Symptom:
After clicking Print, the entire desktop becomes unresponsive for approximately 5–10 seconds. It becomes unresponsive again for several seconds when the print job completes.

I tested both the automatically discovered CUPS printer (implicitclass://) and a separate direct-IP IPP queue (ipp://192.168.0.231:631/ipp/print). Both produced the same freezes.

I ran vmstat 1 during the freezes. There was plenty of idle CPU, no active swapping, and essentially no I/O wait, so this did not appear to be a system-resource problem.

I then ran journalctl -f while printing. It showed a very large number of GNOME Shell errors originating from:

/usr/share/gnome-shell/extensions/zorin-printers@zorinos.com/extension.js

including repeated errors similar to:

Object St.BoxLayout ... has been already disposed — impossible to access it.

I disabled the Zorin Printers extension with:

gnome-extensions disable zorin-printers@zorinos.com

and logged out and back in.

RESULT: The freezes disappeared completely.

Printing continues to work normally, including the standard "Printing" and "Printed" notifications.

I also tested disabling the separate GNOME print-notification process. That removed the notifications but did NOT eliminate the freezes.

This appears to confirm that zorin-printers@zorinos.com is causing the GNOME Shell stalls when printer/job state changes.

You could Double-Check that with disabling the Zorin Printers Extension and install the Printers Extension what was linked by @Nourpon to see if that behaves the same. And then simply disable them both and check how that behaves.

@Miguelmnapoli is there any reason to keep unplugging the printer from the USB port? I can understand it if you are short on USB ports but would think that would bring some instability with it.

Just to add, have you stopped cups-browsed, followed by disabling it?
Do you always unplug/power off the printer at the wall socket after pressing the power button on the printer?

@mwhitson I discovered that turning off the switch at the wall socket after turning off the printer's power button loses the printer's network connection and has to be connected all over again, so always leave your printer plugged in at the wall socket, and if the wall socket has a switch never turn it off.

Summary

The bundled Zorin Printers extension (zorin-printers@zorinos.com, v29) never destroys its
PrintersManager instance when the extension is disabled. Since GNOME Shell disables and
re-enables all extensions on every screen lock/unlock, a new instance leaks on every cycle.
Each zombie instance keeps live signal handlers that fire and throw on shell events, so the
overhead grows with session age. On a long-running session this escalates from unnoticeable
into multi-minute whole-desktop freezes (Wayland: input and rendering both stall), with
no printer activity involved at all.

I believe this is the same underlying bug as
Panel freezes for 1-3s every time a USB printer is turned on/off
— same "already disposed" + clutter_text_* error signature — but that thread only sees a
single instance misfiring on hotplug. The accumulation across lock/unlock cycles is what makes
it severe. It's also the same defect class (signal handlers not cleaned up on disable())
reported for zorin-taskbar/menu/appindicator in
this bug report.

Environment

  • Zorin OS 18.1 Pro, GNOME Shell 46.0, Wayland session
  • gnome-shell-extension-zorin-printers version 29
  • Kernel 7.0.0-28-generic
  • Lenovo ThinkCentre M910q (i7-7700T, 31 GB RAM, Intel HD 630)
  • gnome-shell uptime at time of incident: 61 days, RSS grown to 1.8 GB

Symptom

Repeated whole-desktop freezes (frozen cursor/input for stretches) during 16:00–17:00 local
time, worst at 16:36–16:42 and 16:55–16:57. No printer was plugged, unplugged, or printing.

Evidence (journalctl, that one hour)

  • ~7,500 warning-level entries from gnome-shell in the hour, peaking at ~2,500/minute
    during the freeze bursts.
  • 4,968 occurrences of:
    Object .Gjs_zorin-printers_zorinos_com_extension_PrintersManager (0x...), has been already
    disposed — impossible to access it. ...
    
    across 276 distinct object addresses — i.e. 276 leaked instances, ≈ 4–5 per day of
    session uptime, matching lock/unlock frequency.
  • 2,484 matching Clutter assertions from the zombies touching destroyed actors:
    clutter_text_set_text: assertion 'CLUTTER_IS_TEXT (self)' failed
    clutter_text_get_text: assertion 'CLUTTER_IS_TEXT (self)' failed
    clutter_text_get_editable: assertion 'CLUTTER_IS_TEXT (self)' failed
    
  • The leak trigger is visible in the journal: on session-mode changes
    (extensionSystem._sessionUpdated, i.e. lock/unlock), extensions cycle disable/enable —
    the same cycle also produces TypeError: SettingsManager.getDefault() is null from
    zorin-appindicator during zorin-taskbar's disable().

Not a resource problem: a 1 Hz memory watchdog running throughout shows ≥10.6 GB available
RAM, zero PSI memory pressure, no OOM events, and the kernel log is empty for the window —
gnome-shell's main loop was the only thing stalling.

Workaround

gnome-extensions disable zorin-printers@zorinos.com (printing still works via
Settings → Printers), or log out/in to flush the accumulated instances — it then degrades
again over the following weeks.

Suggested fix

In the extension's disable(): disconnect all signal handlers and destroy the
PrintersManager instance; guard callbacks with an is-disposed check. Currently disable()
appears to orphan the instance with its handlers still connected.

@Miguelmnapoli Just read through your post again. I never liked using Settings | Printers in Gnome, nor do I like System Settings | Hardware | Printers in Plasma.

Sadly it feels like everyone (Gnome, KDE) is trying to make things as close(d) to/as Microslop.

For me it is stopping cups-browsed then disabling it, followed by installing what has been taken away that used to be present. I always use (after installing if not present):

sudo system-config-printer

I recently upgraded my PCLOS Debian KDE Plasma, by making a fresh install of Debian 13 which uses KDE Plasma 6.3.6. I noticed that Printer status icon was missing in the System Tray/Expand to view other System Tray entries not in the System Tray.

After some searching I found the solution was:

sudo apt install print-manager

Now I have the printer status in System Tray once I edit Plasma's System Tray entries to be visible at all times.