----------------------------------------

Update (Aug 1st):

After recent kernel and system updates the workaround in my last update
quit being viable for me as the issue started returning after about 15
minutes. I read somewhere that changing from fixed to VRR on one or all
of your displays might help, only one of my displays supports VRR so I
tried that and noticed it immediately stopped the 3003/gbm error flood
and flickering and lasted about 17 hours before recurring. When it did,
I simply toggled it back off and got another 10 hours or so of
error/flicker free uptime. So I then worked with ChatGPT and Google AI
to create a script to automate the toggling of VRR for my one monitor
that supports it. After several trials and failures I finally got a
script that automates this for me and provides a workaround I don't have
to manage, I simply let it run in a terminal and check the output to see
how many times it has had to execute, I'm currently at 2 days of uptime
and the script has executed 6 times sporadically, keeping the canvas
stable and flicker free.

To bypass modern GNOME 50 D-Bus sandbox restrictions and resolve the
MetaDrmBufferGbm leak without dropping the desktop session, you can
force a full hardware graphics pipeline modeset by simultaneously re-
asserting your entire multi-monitor coordinate matrix.Below is an
automated Bash script that monitors journalctl for the
gbm_surface_lock_front_buffer failed flood strings. Once triggered, it
uses gdctl to instantly toggle between an equivalent VRR and Fixed
refresh rate canvas matrix layout. This forces a clean hardware flush
and releases the stale color buffers seamlessly without any visual panel
blinks or interface stutter. Adjust the gdctl screen strings to match
your unique hardware topology.

----------------------------------------

```bash

#!/bin/bash
START_TIME=$(date +"%b %d %H:%M:%S")
echo "$START_TIME 🚀 Auto-Purge Service started. Monitoring for pesky Mutter 50 
buffer floods..."

TOGGLE_STATE=0
COUNT=0
THRESHOLD=3

# We stream live into a reading descriptor
exec 3< <(journalctl -b -f -n 0 | grep --line-buffered 
"gbm_surface_lock_front_buffer failed")

while read -r line <&3
do
    ((COUNT++))
    
    if [ $COUNT -ge $THRESHOLD ]; then
        LOG_TIME=$(date +"%b %d %H:%M:%S")
        echo "$LOG_TIME 🚨 Buffer leak flood detected ($COUNT errors)! Curses!!! 
Triggering REAL hardware pipeline reset..."
        
        if [ $TOGGLE_STATE -eq 0 ]; then
            gdctl set --logical-monitor --monitor HDMI-2 --mode 
"[email protected]" --scale 1.0 --x 1920 --y 1080 --logical-monitor --monitor 
HDMI-1 --mode "[email protected]" --scale 2.0 --x 916 --y 0 --logical-monitor 
--monitor DP-1 --mode "[email protected]" --scale 2.0 --x 0 --y 1080 --primary > 
/dev/null 2>&1
            TOGGLE_STATE=1
            echo "$LOG_TIME 🔄 gdctl: Entire layout flipped to FIXED mode -> 
Buffers Purged!"
        else
            gdctl set --logical-monitor --monitor HDMI-2 --mode 
"[email protected]" --scale 1.0 --x 1920 --y 1080 --logical-monitor --monitor 
HDMI-1 --mode "[email protected]" --scale 2.0 --x 916 --y 0 --logical-monitor 
--monitor DP-1 --mode "[email protected]+vrr" --scale 2.0 --x 0 --y 1080 
--primary > /dev/null 2>&1
            TOGGLE_STATE=0
            echo "$LOG_TIME 🔄 gdctl: Entire layout flipped to VRR mode -> 
Buffers Purged!"
        fi
        
        echo "$LOG_TIME ⏳ Entering a 30 second Cool Breeze Mode..."
        sleep 30
        
        # GHOST PURGE: Read and immediately throw away any backlog lines left 
over from the flood
        while read -t 0.1 -r ghost_line <&3; do
            : # Doing nothing dumps the line directly into the trash bin
        done
        
        COUNT=0
        RESUME_TIME=$(date +"%b %d %H:%M:%S")
        echo "$RESUME_TIME 🟢 Cool Breeze Mode finished. Resuming fresh active 
monitoring..."
    fi
done
```
----------------------------------------
Use code with caution.
----------------------------------------

If one of the displays does not support VRR the same result might be
achieved by simply changing one display between 60.000 Hz and 59.940 Hz
but I haven't tried that as the script above is working great for my
situation.

If this quits working for me after additional kernel/system updates or
if this is no longer needed I will update this thread, but for now this
works great for me.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2156644

Title:
  GNOME Panel & Activities Overview workspace thumbnails flickering
  issue

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2156644/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to