Picom: Wallpaper and windows border flickering after screen saver shuts screen

Created on 2 Jan 2021  ·  11Comments  ·  Source: yshui/picom

Hi,

I had this problem for a while now, once the screen saver detects computer has been idle for more than 5 minutes, it turns off my screen. Then, when I try to wake it up (by moving the mouse for example) there's this annoying flickering that is happening in the wallpaper and window borders.

The issue stops if I open a terminal and:

killall -q picom
picom -b

Or if I try to open an application that tries to screenshot or record the screen.

Platform

Arch Linux

GPU, drivers, and screen setup

~
❯ xrandr
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
DP1 disconnected primary (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
HDMI1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 510mm x 290mm
   1920x1080     60.00*+
   1280x1024     75.02    60.02
   1152x864      75.00
   1024x768      75.03    60.00
   800x600       75.00    60.32
   640x480       75.00    59.94
   720x400       70.08
HDMI2 disconnected (normal left inverted right x axis y axis)
VGA1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
❯ yay -Q | rg xf86-video
xf86-video-intel 1:2.99.917+914+ga511f22c-1
xf86-video-vesa 2.5.0-1

Had to install glxinfo (wasn't installed before)

❯ glxinfo -B
name of display: :0
display: :0  screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Intel Open Source Technology Center (0x8086)
    Device: Mesa DRI Intel(R) HD Graphics 2000 (SNB GT1) (0x102)
    Version: 20.3.2
    Accelerated: yes
    Video memory: 1536MB
    Unified memory: yes
    Preferred profile: core (0x1)
    Max core profile version: 3.3
    Max compat profile version: 3.0
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.0
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 2000 (SNB GT1)
OpenGL core profile version string: 3.3 (Core Profile) Mesa 20.3.2
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 3.0 Mesa 20.3.2
OpenGL shading language version string: 1.30
OpenGL context flags: (none)

OpenGL ES profile version string: OpenGL ES 3.0 Mesa 20.3.2
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00

Environment


Using i3-gaps 4.19-1
I has been happening for a while now but not sure when started.

picom version

❯ picom --version
vgit-dac85
~
❯ yay -Q | rg picom
picom 8.2-1

Configuration:

# Backend to use: "xrender" or "glx".
# GLX backend is typically much faster but depends on a sane driver.
backend = "glx";

# GLX backend
glx-no-stencil = true;

# GLX backend: Copy unmodified regions from front buffer instead of redrawing them all.
# My tests with nvidia-drivers show a 10% decrease in performance when the whole screen is modified,
# but a 20% increase when only 1/4 is.
# My tests on nouveau show terrible slowdown.
glx-copy-from-front = false;

# GLX backend: Use MESA_copy_sub_buffer to do partial screen update.
# My tests on nouveau shows a 200% performance boost when only 1/4 of the screen is updated.
# May break VSync and is not available on some drivers.
# Overrides --glx-copy-from-front.
glx-use-copysubbuffermesa = false;

# GLX backend: Avoid rebinding pixmap on window damage.
# Probably could improve performance on rapid window content changes, but is known to break things on some drivers (LLVMpipe).
# Recommended if it works.
glx-no-rebind-pixmap = false;

# GLX backend: GLX buffer swap method we assume.
# Could be undefined (0), copy (1), exchange (2), 3-6, or buffer-age (-1).
# undefined is the slowest and the safest, and the default value.
# copy is fastest, but may fail on some drivers,
# 2-6 are gradually slower but safer (6 is still faster than 0).
# Usually, double buffer means 2, triple buffer means 3.
# buffer-age means auto-detect using GLX_EXT_buffer_age, supported by some drivers.
# Useless with --glx-use-copysubbuffermesa.
# Partially breaks --resize-damage.
# Defaults to undefined.
#glx-swap-method = "undefined";

# Shadows
shadow = false;

# Opacity
inactive-opacity = 1;
active-opacity = 1;
frame-opacity = 1;
inactive-opacity-override = false;

# Dim inactive windows. (0.0 - 1.0)
# inactive-dim = 0.2;
# Do not let dimness adjust based on window opacity.
# inactive-dim-fixed = true;
# Blur background of transparent windows. Bad performance with X Render backend. GLX backend is preferred.
# blur-background = true;
# Blur background of opaque windows with transparent frames as well.
# blur-background-frame = true;
# Do not let blur radius adjust based on window opacity.
blur-background-fixed = false;
blur-background-exclude = [
    "window_type = 'dock'",
    "window_type = 'desktop'",
    "class_g ?= 'xob'"
];

# Fading

# Fade windows during opacity changes.
fading = true;
# The time between steps in a fade in milliseconds. (default 10).
fade-delta = 4;
# Opacity change between steps while fading in. (default 0.028).
fade-in-step = 0.03;
# Opacity change between steps while fading out. (default 0.03).
fade-out-step = 0.03;
# Fade windows in/out when opening/closing
# no-fading-openclose = true;

# Specify a list of conditions of windows that should not be faded.
fade-exclude = [ ];

# Other

# Try to detect WM windows and mark them as active.
mark-wmwin-focused = true;
# Mark all non-WM but override-redirect windows active (e.g. menus).
mark-ovredir-focused = true;
# Use EWMH _NET_WM_ACTIVE_WINDOW to determine which window is focused instead of using FocusIn/Out events.
# Usually more reliable but depends on a EWMH-compliant WM.
use-ewmh-active-win = true;
# Detect rounded corners and treat them as rectangular when --shadow-ignore-shaped is on.
detect-rounded-corners = true;

# Detect _NET_WM_OPACITY on client windows, useful for window managers not passing _NET_WM_OPACITY of client windows to frame windows.
# This prevents opacity being ignored for some apps.
# For example without this enabled my xfce4-notifyd is 100% opacity no matter what.
detect-client-opacity = true;

# Specify refresh rate of the screen.
# If not specified or 0, picom will try detecting this with X RandR extension.
refresh-rate = 0;

# Vertical synchronization: match the refresh rate of the monitor
vsync = true;

# Enable DBE painting mode, intended to use with VSync to (hopefully) eliminate tearing.
# Reported to have no effect, though.
dbe = false;

# Limit picom to repaint at most once every 1 / refresh_rate second to boost performance.
# This should not be used with --vsync drm/opengl/opengl-oml as they essentially does --sw-opti's job already,
# unless you wish to specify a lower refresh rate than the actual value.
#sw-opti = true;

# Unredirect all windows if a full-screen opaque window is detected, to maximize performance for full-screen windows, like games.
# Known to cause flickering when redirecting/unredirecting windows.
unredir-if-possible = true;

# Specify a list of conditions of windows that should always be considered focused.
focus-exclude = [ ];

# Use WM_TRANSIENT_FOR to group windows, and consider windows in the same group focused at the same time.
detect-transient = true;
# Use WM_CLIENT_LEADER to group windows, and consider windows in the same group focused at the same time.
# WM_TRANSIENT_FOR has higher priority if --detect-transient is enabled, too.
detect-client-leader = true;

# Window type settings

wintypes:
{
    tooltip =
    {
        # fade: Fade the particular type of windows.
        fade = true;
        # shadow: Give those windows shadow
        shadow = false;
        # opacity: Default opacity for the type of windows.
        opacity = 0.85;
        # focus: Whether to always consider windows of this type focused.
        focus = true;
    };

    fullscreen :
    {
      fade = true;
      shadow = false;
      opacity = 1;
      focus = true;
    };

    dock:
    {
      shadow = false;
    }
};

# XSync
# See: https://github.com/yshui/picom/commit/b18d46bcbdc35a3b5620d817dd46fbc76485c20d

# Use X Sync fence to sync clients' draw calls. Needed on nvidia-drivers with GLX backend for some users.
xrender-sync-fence = true;

Steps of reproduction

  1. Wait 5 minutes for the screen saver to kick in and make the screen black
  2. Wake up the screen by moving the mouse
  3. It would sometimes flicker but sometimes nothing would happen

Expected behavior

Screen turns on without flickering

Current Behavior

The wallpaper and borders around the windows start to flicker a lot.

Stack trace

Don't think it crashes but not sure how to capture additional info here.

Other details

Tried to record it or capture screenshot but the problem seems to be fixed once the recording app creates it's overlay on the entire screen

Any help will be appreciated, thank you!

Most helpful comment

Hi, Same here with small variations:

Platform

Archlinux 5.10.3

GPU, drivers, and screen setup

Intel i5, 10th generation

I usually have multi-monitor (2) but it happens with both eDP1 laptop monitor or in multi-monitor case.

drivers:

  • xf86-video-intel
  • vulkan-intel (install to see if it helps)
  • mesa, xf86-video-vesa

Environment

i3wm

picom version

vgit-dac85
8.2.1

Configuration:

# vim: filetype=conf
backend = "glx"
glx-no-stencil = true;
glx-no-rebind-pixmap = true;
vsync = true;
unredir-if-possible = false;

Steps of reproduction

  1. Wait to screen off
  2. flickering on wakeup and by flickering it means the whole background turns off and on. The flickering solves by launching a terminal.
    3 The i3status system tray also flickers separately which solves by a restart status bar

Expected behavior

Have no sort of flickering after turning screen on.

Other details

  1. I tested both DRI2 and DRI3 but it didn't help
  2. Turning vsync off make it solved but that lead to tearing effect
  3. This happens to me few weeks ago, I only recently track it down to picom.
  4. Not sure if it matter, I use feh to set the background in i3wm.

All 11 comments

Hi, Same here with small variations:

Platform

Archlinux 5.10.3

GPU, drivers, and screen setup

Intel i5, 10th generation

I usually have multi-monitor (2) but it happens with both eDP1 laptop monitor or in multi-monitor case.

drivers:

  • xf86-video-intel
  • vulkan-intel (install to see if it helps)
  • mesa, xf86-video-vesa

Environment

i3wm

picom version

vgit-dac85
8.2.1

Configuration:

# vim: filetype=conf
backend = "glx"
glx-no-stencil = true;
glx-no-rebind-pixmap = true;
vsync = true;
unredir-if-possible = false;

Steps of reproduction

  1. Wait to screen off
  2. flickering on wakeup and by flickering it means the whole background turns off and on. The flickering solves by launching a terminal.
    3 The i3status system tray also flickers separately which solves by a restart status bar

Expected behavior

Have no sort of flickering after turning screen on.

Other details

  1. I tested both DRI2 and DRI3 but it didn't help
  2. Turning vsync off make it solved but that lead to tearing effect
  3. This happens to me few weeks ago, I only recently track it down to picom.
  4. Not sure if it matter, I use feh to set the background in i3wm.

I have the same problem, but I'm using ibhagwan's fork, the picom I have is a bit behind from the git version. I also have screen tear. Also, feh doesn't have to do anything here, I'm using sxiv and xwallpaper and still getting the same behavior as you. In my case it happens on a single monitor (cuz I'm in laptop). BUT, this happens on certain moments it goes off, not always, moreover, my workaround is to simply kill picom and start it again, still, quite annoying

Same story. Awesome/intel-modesetting. There artefacts after xscreensaver.

Back again, I installed this fork and can confirm behavior is still there, not always but its there. So it might come all the way from ibhagwan's fork

I just killing picom then starting it again. It works but temporary.

Yeh, I think the workaround would be a script that checks if laptop is asleep or something and when it its it kills and restarts picom

Hi, I'm facing the same with AMD Radeon HD 7670M.
A temporary fix I use is I hit F11 or Mod+F to make the window fullscreen which removes the artifacts.
Platform:
Linux archlinux 5.4.90-1-lts #1 SMP Sun, 17 Jan 2021 19:57:30 +0000 x86_64 GNU/Linux
Other Info

~
❯ pacman -Q | grep xf86-video
xf86-video-ati 1:19.1.0-2
~
❯ glxinfo -B
name of display: :0
display: :0  screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: X.Org (0x1002)
    Device: AMD TURKS (DRM 2.50.0 / 5.4.90-1-lts, LLVM 11.0.1) (0x6840)
    Version: 20.3.3
    Accelerated: yes
    Video memory: 1024MB
    Unified memory: no
    Preferred profile: core (0x1)
    Max core profile version: 3.3
    Max compat profile version: 3.1
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.1
Memory info (GL_ATI_meminfo):
    VBO free memory - total: 1023 MB, largest block: 1023 MB
    VBO free aux. memory - total: 1021 MB, largest block: 1021 MB
    Texture free memory - total: 1023 MB, largest block: 1023 MB
    Texture free aux. memory - total: 1021 MB, largest block: 1021 MB
    Renderbuffer free memory - total: 1023 MB, largest block: 1023 MB
    Renderbuffer free aux. memory - total: 1021 MB, largest block: 1021 MB
Memory info (GL_NVX_gpu_memory_info):
    Dedicated video memory: 1024 MB
    Total available memory: 2045 MB
    Currently available dedicated video memory: 1023 MB
OpenGL vendor string: X.Org
OpenGL renderer string: AMD TURKS (DRM 2.50.0 / 5.4.90-1-lts, LLVM 11.0.1)
OpenGL core profile version string: 3.3 (Core Profile) Mesa 20.3.3
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 3.1 Mesa 20.3.3
OpenGL shading language version string: 1.40
OpenGL context flags: (none)

OpenGL ES profile version string: OpenGL ES 3.1 Mesa 20.3.3
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10



md5-beabf07abf6e76cb99f56919ae73ee09



~
❯ pacman -Q | grep i3
i3-gaps 4.19-1

~
❯ picom --version
vgit-dac85



md5-a0ac030fb63c1672c7df78e9e00730a9



#################################

#     GLX backend

#################################

backend = "glx";

glx-no-stencil = true;

glx-no-rebind-pixmap = true;

vsync = true;

xrender-sync-fence = "true";

glx-swap-method = -1;



#################################

#       Shadows

#################################

shadow = false;

shadow-radius = 5;

shadow-offset-x = -5;

shadow-offset-y = -5;

shadow-opacity = 0.2;

shadow-ignore-shaped = false;



#################################

#       Opacity

#################################

#inactive-opacity = 1;

active-opacity = 1;

frame-opacity = 0.8;

inactive-opacity-override = false;

#blur-background = true;

#blur-background-frame = true;

#blur-background-fixed = true;

#blur-background-exclude = [

 #   "window_type = 'desktop'",
  #  "class_g = 'alacritty'"

#];

#blur-kern = "3x3box";

#blur-method = "dual_kawase";

#blur-strength = 10;

opacity-rule = [

     "75:window_type = 'dock'",
     "75:class_g = 'alacritty'"

];



#################################

#       Fading

#################################

fading = false;



wintypes:

{

  dock = { shadow = false; }

  dnd = { shadow = false; }

  popup_menu = { opacity = 1.0; }

  dropdown_menu = { opacity = 1.0; }

}

Similar issue on Arch/DWM/xf86-video-amdgpu on two separate boxes. Only happens on resume after a monitor times out into a low power state. Spawning a window on each screen after resume seems to resolve this.

I have the same issue and it happens after sleep as point out in original issue.

  • picom version: vgit-dac85
  • OS: Archlinux 5.10.13
  • environment: i3 version 4.19.1-non-git
  • Setup: two monitors, side by side

glxinfo:

name of display: :1
display: :1  screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Intel (0x8086)
    Device: Mesa Intel(R) Iris(R) Plus Graphics (ICL GT1.5) (0x8a5a)
    Version: 20.3.4
    Accelerated: yes
    Video memory: 3072MB
    Unified memory: yes
    Preferred profile: core (0x1)
    Max core profile version: 4.6
    Max compat profile version: 4.6
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.2
OpenGL vendor string: Intel
OpenGL renderer string: Mesa Intel(R) Iris(R) Plus Graphics (ICL GT1.5)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 20.3.4
OpenGL core profile shading language version string: 4.60
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 4.6 (Compatibility Profile) Mesa 20.3.4
OpenGL shading language version string: 4.60
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile

OpenGL ES profile version string: OpenGL ES 3.2 Mesa 20.3.4
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

picom diagnostic:

**Version:** vgit-dac85

### Extensions:

* Shape: Yes
* XRandR: Yes
* Present: Present

### Misc:

* Use Overlay: No (Another compositor is already running)
* Config file used: /etc/xdg/picom.conf

### Drivers (inaccurate):

Intel

configuration:

# vim: filetype=conf
backend = "glx"
glx-no-stencil = true;
glx-no-rebind-pixmap = true;
vsync = true;
unredir-if-possible = false;
inactive-dim = 0.05;

relevant i3 config parts:

exec feh --bg-scale /home/$uz/Pictures/Wallpaper
exec --no-startup-id picom --config /home/$uz/homerepo/picom/picom.conf

Remedies:

  • For the wallpaper flickering issue just launching new terminal/app will fix it.
  • For system-tray icon flickering, restarting i3 will fix it.
  • Killing picom and restart it again seemingly solve the problem but it produce some later problems e.g. in screen sharing, zoom meeting, and interestingly in playing video with mpv which does not play (update frame) any sort of video after picom kill re-launch.

On my end I simply turned off blur and transparency and shadows, enabled round boarders, and called it a day.

same here: flickering after returning from screen saver
Ubuntu, awesome wm, Intel-mesa drivers,
killing picom and restarting resolves this.

Was this page helpful?
0 / 5 - 0 ratings