COMPTON(1)

πŸ“¦
version 1 Β· 5 versions
, in ubuntu resolute, ubuntu stonking

COMPTON(1) πŸ’…βœ¨

LOCAL USER COMMANDS

okay bestie, sit DOWN, because we're about to talk about compton β€” a compositor for X11, and she is genuinely iconic. this is the manual page, but make it make sense. no cap, every single flag is still here, i'm just giving them the energy they deserve. 🫢


NAME πŸŽ€

compton β€” a compositor for X11


SYNOPSIS 🌸

compton [OPTIONS]

that's it. that's the whole vibe. you give her options, she composites. πŸ’–


WARNING βš οΈπŸ’€

bestie. listen. this man page may be less up-to-date than the usage text in compton (compton -h). so if something here looks crusty and outdated, run compton -h and trust that instead. the man page is the friend who texts back three days late. 😭

DESCRIPTION πŸ¦‹

so compton is a compositor based on Dana Jansens' version of xcompmgr (which itself was written by Keith Packard). she's got some glow-ups over the original xcompmgr, like window frame opacity and inactive window transparency. it's giving vintage but make it cunty. πŸ‘‘


✨ OPTIONS ✨

every flag, every default, nothing skipped, periodt. πŸ’…

  • -h, --help β€” get the usage text embedded in program code, which may be more up-to-date than this man page. (yes, again. it's really that girl. πŸ’)
  • -d DISPLAY β€” the display to be managed.
  • -r, --shadow-radius=RADIUS β€” the blur radius for shadows, in pixels. (defaults to 12)
  • -o, --shadow-opacity=OPACITY β€” the opacity of shadows. (0.0 - 1.0, defaults to 0.75)
  • -l, --shadow-offset-x=OFFSET β€” the left offset for shadows, in pixels. (defaults to -15)
  • -t, --shadow-offset-y=OFFSET β€” the top offset for shadows, in pixels. (defaults to -15)
  • -I, --fade-in-step=OPACITY_STEP β€” the opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
  • -O, --fade-out-step=OPACITY_STEP β€” the opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
  • -D, --fade-delta=MILLISECONDS β€” the time between steps in fade step, in milliseconds. (> 0, defaults to 10)
  • -m, --menu-opacity=OPACITY β€” the default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0)
  • -c, --shadow β€” enables client-side shadows on windows. lowkey important: desktop windows (windows with _NET_WM_WINDOW_TYPE_DESKTOP) never get shadow. she's on a strict no-shadow diet. πŸ™…
  • -C, --no-dock-shadow β€” avoid drawing shadows on dock/panel windows. your taskbar stays unbothered. ✨
  • -z, --clear-shadow β€” zero the part of the shadow's mask behind the window. heads up though: this may not work properly on ARGB windows with fully transparent areas. 🫠
  • -f, --fading β€” fade windows in/out when opening/closing and when opacity changes, unless --no-fading-openclose is used.
  • -F β€” equals to -f. Deprecated. (she's retired but still showing up to the party πŸ’€)
  • -i, --inactive-opacity=OPACITY β€” the opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
  • -e, --frame-opacity=OPACITY β€” the opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
  • -G, --no-dnd-shadow β€” don't draw shadows on drag-and-drop windows. (don't drag them, don't shadow them 🚫)
  • -b, --daemon β€” daemonize process. forks to background after initialization. causes issues with certain (badly-written) drivers. you've been warned, bestie.
  • -S β€” enable synchronous X operation (for debugging). πŸ›
  • --show-all-xerrors β€” show all X errors (for debugging).
  • --config PATH β€” look for configuration file at the path. see the CONFIGURATION FILES section below for where compton looks for a configuration file by default. use /dev/null to avoid loading configuration file. (bye config, blocked. βœ‹)
  • --write-pid-path PATH β€” write process ID to a file.
  • --shadow-red VALUE β€” red color value of shadow. (0.0 - 1.0, defaults to 0)
  • --shadow-green VALUE β€” green color value of shadow. (0.0 - 1.0, defaults to 0)
  • --shadow-blue VALUE β€” blue color value of shadow. (0.0 - 1.0, defaults to 0)
  • --inactive-opacity-override β€” let inactive opacity set by -i override the windows' _NET_WM_OPACITY values.
  • --active-opacity OPACITY β€” default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
  • --inactive-dim VALUE β€” dim inactive windows. (0.0 - 1.0, defaults to 0.0)
  • --mark-wmwin-focused β€” try to detect WM windows (a non-override-redirect window with no child that has WM_STATE) and mark them as active.
  • --mark-ovredir-focused β€” mark override-redirect windows that doesn't have a child window with WM_STATE focused.
  • --no-fading-openclose β€” do not fade on window open/close.
  • --no-fading-destroyed-argb β€” do not fade destroyed ARGB windows with WM frame. workaround of bugs in Openbox, Fluxbox, etc. (not her fault, she's just fixing their mess 🫢)
  • --shadow-ignore-shaped β€” do not paint shadows on shaped windows. quick note: shaped windows here means windows setting its shape through the X Shape extension. those using ARGB background is beyond our control. Deprecated β€” use --shadow-exclude 'bounding_shaped' or --shadow-exclude 'bounding_shaped && !rounded_corners' instead. πŸ’€
  • --detect-rounded-corners β€” try to detect windows with rounded corners and don't consider them shaped windows. the accuracy is not very high, unfortunately. (she's trying her best 😭)
  • --detect-client-opacity β€” detect _NET_WM_OPACITY on client windows, useful for window managers not passing _NET_WM_OPACITY of client windows to frame windows.
  • --refresh-rate REFRESH_RATE β€” specify refresh rate of the screen. if not specified or 0, compton will try detecting this with the X RandR extension.
  • --vsync VSYNC_METHOD β€” set VSync method. VSync methods currently available:
    • none: No VSync
    • drm: VSync with DRM_IOCTL_WAIT_VBLANK. may only work on some (DRI-based) drivers.
    • opengl: try to VSync with SGI_video_sync OpenGL extension. only work on some drivers.
    • opengl-oml: try to VSync with OML_sync_control OpenGL extension. only work on some drivers.
    • opengl-swc: try to VSync with SGI_swap_control OpenGL extension. only work on some drivers. works only with GLX backend. known to be most effective on many drivers. does not guarantee to control paint timing.
    • opengl-mswc: try to VSync with MESA_swap_control OpenGL extension. basically the same as opengl-swc above, except the extension we use.

(Note some VSync methods may not be enabled at compile time. 🫠)

  • --vsync-aggressive β€” attempt to send painting request before VBlank and do XFlush() during VBlank. reported to work pretty terribly. this switch may be lifted out at any moment. (she's on borrowed time, bestie ⏳)
  • --alpha-step VALUE β€” X Render backend: step for pregenerating alpha pictures. (0.01 - 1.0, defaults to 0.03)
  • --dbe β€” enable DBE painting mode, intended to use with VSync to (hopefully) eliminate tearing. reported to have no effect, though. πŸ™ˆ
  • --paint-on-overlay β€” painting on X Composite overlay window instead of on root window.
  • --sw-opti β€” limit compton 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.
  • --use-ewmh-active-win β€” use EWMH _NET_ACTIVE_WINDOW to determine currently focused window, rather than listening to FocusIn/FocusOut event. might have more accuracy, provided that the WM supports it.
  • --respect-prop-shadow β€” respect _COMPTON_SHADOW. this a prototype-level feature, which you must not rely on. 🚧 (do not build your life on this, i'm so serious)
  • --unredir-if-possible β€” unredirect all windows if a full-screen opaque window is detected, to maximize performance for full-screen windows. known to cause flickering when redirecting/unredirecting windows. --paint-on-overlay may make the flickering less obvious. 🎒
  • --unredir-if-possible-delay MILLISECONDS β€” delay before unredirecting the window, in milliseconds. defaults to 0.
  • --unredir-if-possible-exclude CONDITION β€” conditions of windows that shouldn't be considered full-screen for unredirecting screen.
  • --shadow-exclude CONDITION β€” specify a list of conditions of windows that should have no shadow.
  • --fade-exclude CONDITION β€” specify a list of conditions of windows that should not be faded.
  • --focus-exclude CONDITION β€” specify a list of conditions of windows that should always be considered focused.
  • --inactive-dim-fixed β€” use fixed inactive dim value, instead of adjusting according to window opacity.
  • --detect-transient β€” use WM_TRANSIENT_FOR to group windows, and consider windows in the same group focused at the same time.
  • --detect-client-leader β€” 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.
  • --blur-background β€” blur background of semi-transparent / ARGB windows. bad in performance, with driver-dependent behavior. the name of the switch may change without prior notifications. πŸ‘€
  • --blur-background-frame β€” blur background of windows when the window frame is not opaque. implies --blur-background. bad in performance, with driver-dependent behavior. the name may change. (again 😭)
  • --blur-background-fixed β€” use fixed blur strength rather than adjusting according to window opacity.
  • --blur-kern MATRIX β€” specify the blur convolution kernel, with the following format:
WIDTH,HEIGHT,ELE1,ELE2,ELE3,ELE4,ELE5...

the element in the center must not be included, it will be forever 1.0 or changing based on opacity, depending on whether you have --blur-background-fixed. yet the automatic adjustment of blur factor may not work well with a custom blur kernel.

a 7x7 Gaussian blur kernel (sigma = 0.84089642) looks like:

--blur-kern '7,7,0.000003,0.000102,0.000849,0.001723,0.000849,0.000102,0.000003,0.000102,0.003494,0.029143,0.059106,0.029143,0.003494,0.000102,0.000849,0.029143,0.243117,0.493069,0.243117,0.029143,0.000849,0.001723,0.059106,0.493069,0.493069,0.059106,0.001723,0.000849,0.029143,0.243117,0.493069,0.243117,0.029143,0.000849,0.000102,0.003494,0.029143,0.059106,0.029143,0.003494,0.000102,0.000003,0.000102,0.000849,0.001723,0.000849,0.000102,0.000003'

may also be one of the predefined kernels: 3x3box (default), 5x5box, 7x7box, 3x3gaussian, 5x5gaussian, 7x7gaussian, 9x9gaussian, 11x11gaussian. all Gaussian kernels are generated with sigma = 0.84089642 . you may use the accompanied compton-convgen.py to generate blur kernels. 🧚

  • --blur-background-exclude CONDITION β€” exclude conditions for background blur.
  • --resize-damage INTEGER β€” bestie, this one resizes the damaged region by a specific number of pixels ✨. Positive value = it grows, negative = it shrinks. And if the value is positive, those extra pixels are genuinely never painted to screen, they're only used for blur calculation and stuff like that. (But lowkey, because of technical limitations, if you're running --dbe or --glx-swap-method, those pixels WILL still get incorrectly painted to screen anyway, oops 😭.) Mainly this exists to fix the line corruption issues from blur β€” and in that case you should just use the blur radius value right here. So like, with a 3x3 kernel you'd use --resize-damage 1, with a 5x5 one you use --resize-damage 2, and so on and so forth πŸ’…. May or may not work with --glx-no-stencil, no cap. Oh and also: shrinking doesn't function correctly 🫠.
  • --invert-color-include CONDITION β€” give it a list of conditions for windows that should be painted with inverted color 🌈. Heads up though: this is resource-hogging and not well tested. It's giving experimental, fr fr.
  • --opacity-rule OPACITY:'CONDITION' β€” gives you a list of opacity rules, in the format PERCENT:PATTERN, like 50:name *= "Firefox". Honestly compton-trans is the recommended move over using this directly πŸ‘‘. Also note: there's zero guarantee about possible conflicts with other programs that set _NET_WM_WINDOW_OPACITY on frame or client windows. Just so you know πŸ’–.
  • --shadow-exclude-reg GEOMETRY β€” specify an X geometry describing the region where shadow should NOT be painted, like a dock window region 🌸. So for example use --shadow-exclude-reg x10+0-0 if the 10 pixels on the bottom of the screen shouldn't have shadows painted on them. Iconic.
  • --xinerama-shadow-crop β€” crops the shadow of a window that's fully on a particular Xinerama screen to that screen βœ‚οΈ.
  • --backend BACKEND β€” pick your backend babe: xrender, glx, or xr_glx_hybrid. Default is xrender πŸ’«.
    • xrender backend does ALL the rendering operations with the X Render extension. It's literally what xcompmgr uses, and it's generally the safe fallback when you run into rendering artifacts or instability 🫢.
    • glx (OpenGL) backend does all rendering operations with OpenGL. It's more friendly to some VSync methods, and it has significantly superior performance on color inversion (--invert-color-include) or blur (--blur-background) πŸ”₯. It requires proper OpenGL 2.0 support from your driver and hardware, no exceptions. You may want to look at the GLX performance optimization options below πŸ‘€. Also --xrender-sync and --xrender-sync-fence might be needed on some systems to avoid delay in changes of screen contents.
    • xr_glx_hybrid backend renders the updated screen contents with X Render and presents it on screen with GLX. It's trying to address the rendering issues some users hit with the GLX backend while still enabling the better VSync of GLX backends πŸ’…. --vsync-use-glfinish might fix some rendering issues with this backend.
  • --glx-no-stencil β€” GLX backend: avoid using the stencil buffer, useful if you literally don't have a stencil buffer πŸ’€. Might cause incorrect opacity when rendering transparent content (but, like, never practically happened) and may not work with --blur-background. My tests show a 15% performance boost. Recommended bestie, take the 15% ✨.
  • --glx-copy-from-front β€” GLX backend: copy unmodified regions from the 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 πŸ’€. Useful with --glx-swap-method as well.
  • --glx-use-copysubbuffermesa β€” GLX backend: use MESA_copy_sub_buffer to do partial screen update. My tests on nouveau show a 200% performance boost when only 1/4 of the screen is updated πŸ”₯. But may break VSync and it's not available on some drivers. It also overrides --glx-copy-from-front. Trade-offs, babe.
  • --glx-no-rebind-pixmap β€” GLX backend: avoid rebinding pixmap on window damage. It probably could improve performance on rapid window content changes, but it's known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.) 😭. Recommended if it works for you 🫢.
  • --glx-swap-method undefined/exchange/copy/3/4/5/6/buffer-age β€” GLX backend: the 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 it's the default value. copy is fastest, but may fail on some drivers, and 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. Periodt.
  • --glx-use-gpushader4 β€” GLX backend: use GL_EXT_gpu_shader4 for some optimization on blur GLSL code ✨. My tests on GTX 670 show no noticeable effect. It's giving "sure, whatever" ngl.
  • --xrender-sync β€” attempts to synchronize client applications' draw calls with XSync(), used on GLX backend to ensure up-to-date window content is painted πŸŽ€.
  • --xrender-sync-fence β€” additionally uses X Sync fence to sync clients' draw calls πŸ’œ. Needed on nvidia-drivers with GLX backend for some users. May be disabled at compile time with NO_XSYNC=1.
  • --glx-fshader-win SHADER β€” GLX backend: use the specified GLSL fragment shader for rendering window contents 🌈. Go peep compton-default-fshader-win.glsl and compton-fake-transparency-fshader-win.glsl in the source tree for examples πŸ‘€.
  • --force-win-blend β€” force ALL windows to be painted with blending πŸ’…. Useful if you have a --glx-fshader-win that could turn opaque pixels transparent.
  • --dbus β€” enables remote control via D-Bus ✨. See the D-BUS API section below for more details.
  • --benchmark CYCLES β€” benchmark mode, bestie πŸ“Š. Repeatedly paints until reaching the specified cycles.
  • --benchmark-wid WINDOW_ID β€” specify the window ID to repaint in benchmark mode. If it's omitted or is 0, the whole screen gets repainted πŸ–₯️.

πŸ¦‹ FORMAT OF CONDITIONS πŸ¦‹

Okay so some options accept a condition string to match certain windows πŸ’–. A condition string is formed by one or more conditions, joined by logical operators.

A condition with the exists operator looks like this:

<NEGATION> <TARGET> <CLIENT/FRAME> [<INDEX>] : <FORMAT> <TYPE>

With the equals operator it looks like:

<NEGATION> <TARGET> <CLIENT/FRAME> [<INDEX>] : <FORMAT> <TYPE> <NEGATION> <OP QUALIFIER> <MATCH TYPE> = <PATTERN>

With greater-than/less-than operators it looks like:

<NEGATION> <TARGET> <CLIENT/FRAME> [<INDEX>] : <FORMAT> <TYPE> <NEGATION> <OPERATOR> <PATTERN>

Let's break it down, because it's giving anatomy class 🧚:

  • NEGATION (optional) is one or more exclamation marks ❗.
  • TARGET is either a predefined target name, or the name of a window property to match. The supported predefined targets are: id, x, y, x2 (x + widthb), y2, width, height, widthb (width + 2 * border_width), heightb, override_redirect, argb (whether the window has an ARGB visual), focused, wmwin (whether the window looks like a WM window, i.e. has no child window with WM_STATE and is not override-redirected), bounding_shaped, rounded_corners (requires --detect-rounded-corners), client (ID of client window), window_type (window type in string), leader (ID of window leader), name, class_g (= WM_CLASS[1]), class_i (= WM_CLASS[0]), and role ✨.
  • CLIENT/FRAME is a single @ if the window attribute should be looked up on the client window, and nothing if it should be looked up on the frame window πŸ‘‘.
  • INDEX (optional) is the index number of the property to look up. So for example [2] means look at the third value in the property πŸ’«. Do NOT specify it for predefined targets, babe.
  • FORMAT (optional) specifies the format of the property: 8, 16, or 32. If it's absent we use the format X reports πŸ“‹. Do not specify it for predefined or string targets.
  • TYPE is a single character representing the type of property to match for: c for CARDINAL, a for ATOM, w for WINDOW, d for DRAWABLE, s for STRING (and any other string types, such as UTF8_STRING) πŸŽ€. Do not specify it for predefined targets.
  • OP QUALIFIER (optional), only applicable for the equals operator, could be ? (ignore-case) πŸ”€.
  • MATCH TYPE (optional), only applicable for the equals operator, could be nothing (exact match), * (match anywhere), ^ (match from start), % (wildcard), or ~ (PCRE regular expression) 🌸.
  • OPERATOR is one of = (equals), <, >, <=, =>, or nothing (exists). The exists operator checks whether a property exists on a window (but for predefined targets, exists means != 0 then) πŸ‘€.
  • PATTERN is either an integer or a string enclosed by single or double quotes πŸ’œ. Python-3-style escape sequences and raw string are supported in the string format.

Supported logical operators are && (and) and || (or) ✨. && has higher precedence than ||, left-to-right associativity. Use parentheses to change precedence β€” yes bestie, full math-class energy, we love to see it.

Examples:

# If the window is focused
focused
focused = 1
# If the window is not override-redirected
!override_redirect
override_redirect = false
override_redirect != true
override_redirect != 1
# If the window is a menu
window_type *= "menu"
_NET_WM_WINDOW_TYPE@:a *= "MENU"
# If the window name contains "Firefox", ignore case
name *?= "Firefox"
_NET_WM_NAME@:s *?= "Firefox"
# If the window name ends with "Firefox"
name %= "*Firefox"
name ~= "Firefox$"
# If the window has a property _COMPTON_SHADOW with value 0, type CARDINAL,
# format 32, value 0, on its frame window
_COMPTON_SHADOW:32c = 0
# If the third value of _NET_FRAME_EXTENTS is less than 20, or there's no
# _NET_FRAME_EXTENTS property on client window
_NET_FRAME_EXTENTS@[2]:32c < 20 || !_NET_FRAME_EXTENTS@:32c
# The pattern here will be parsed as "dd4"
name = "\x64\x64\o64"
# The pattern here will be parsed as "\x64\x64\x64"
name = r"\x64\x64\o64"

πŸ•°οΈ LEGACY FORMAT OF CONDITIONS πŸ•°οΈ

Okay so this is the OLD condition format we once used πŸ‘΅. Heads up: support of this format might be removed in the future 😭. Fair warning, bestie.

condition = TARGET:TYPE[FLAGS]:PATTERN
  • TARGET is one of "n" (window name), "i" (window class instance), "g" (window general class), and "r" (window role) 🏷️.
  • TYPE is one of "e" (exact match), "a" (match anywhere), "s" (match from start), "w" (wildcard), and "p" (PCRE regular expressions, if compiled with the support) πŸ”.
  • FLAGS could be a series of flags. Currently the only defined flag is "i" (ignore case) πŸ’….
  • PATTERN is the actual pattern string ✨.

πŸŽ€ CONFIGURATION FILES πŸŽ€

ok so here's the tea, bestie: compton can read from a configuration file if libconfig support is compiled in πŸ‘‘. And if you don't pass --config, it's gonna go hunting for one, in this exact order:

  1. $XDG_CONFIG_HOME/compton.conf (which is ~/.config/compton.conf, usually) πŸ’–
  2. ~/.compton.conf
  3. compton.conf under $XDG_CONFIG_DIRS (often /etc/xdg/compton.conf)

compton uses the general libconfig configuration file format, fr fr. There's a sample config hanging out as compton.sample.conf in the source tree if you wanna peek πŸ‘€.

Most commandline switches each could be replaced with an option in the configuration file β€” so like, everything documented above, basically, you can put it in the file instead. slay. ✨

Window-type-specific settings though? Those are exposed only in the configuration file, and they look like this:

wintypes:
{
  WINDOW_TYPE = { fade = BOOL; shadow = BOOL; opacity = FLOAT; focus = BOOL; };
};

WINDOW_TYPE is one of the 15 window types defined in the EWMH standard, and I'm listing every single one because we don't skip: "unknown", "desktop", "dock", "toolbar", "menu", "utility", "splash", "dialog", "normal", "dropdown_menu", "popup_menu", "tooltip", "notify", "combo", and "dnd". 🌈

A lil breakdown of what each field does:

  • fade and shadow β€” control the window-type-specific shadow and fade settings πŸ’…
  • opacity β€” controls the default opacity of the window type
  • focus β€” controls whether the window of this type is to be always considered focused. (And by default, all window types except "normal" and "dialog" have this one turned on, just so you know 🫢)

πŸ’€ SIGNALS πŸ’€

  • compton reinitializes itself upon receiving SIGUSR1. that's it, that's the signal 😭

🌸 D-B-BUS API 🌸

wait no, it's D-Bus β€” typo, ignore me πŸ™ˆ. Anyway! It's possible to control compton via D-Bus messages, by running compton with --dbus and sending messages to com.github.chjj.compton.<DISPLAY>.

<DISPLAY> is the display used by compton, with all non-alphanumeric characters transformed to underscores. So like, for DISPLAY=:0.0 you should use com.github.chjj.compton._0_0, for example. iconic. πŸ’œ

⚠️ The D-Bus methods and signals are not yet stable, thus undocumented right now. no cap, they're just vibes at this stage 🧚

πŸ”₯ EXAMPLES πŸ”₯

  • Disable configuration file parsing:
$ compton --config /dev/null
  • Run compton with client-side shadow and fading, disable shadow on dock windows and drag-and-drop windows:
$ compton -cCGf
  • Same thing as above, plus making inactive windows 80% transparent, making frame 80% transparent, don't fade on window open/close, enable software optimization, and fork to background:
$ compton -bcCGf -i 0.8 -e 0.8 --no-fading-openclose --sw-opti
  • Draw white shadows:
$ compton -c --shadow-red 1 --shadow-green 1 --shadow-blue 1
  • Avoid drawing shadows on wbar window:
$ compton -c --shadow-exclude 'class_g = "wbar"'
  • Enable OpenGL SGI_swap_control VSync with GLX backend:
$ compton --backend glx --vsync opengl-swc

πŸ› BUGS πŸ›

Please report any you find to https://github.com/chjj/compton . like, genuinely, they wanna know πŸ’–


πŸ‘‘ AUTHORS πŸ‘‘

xcompmgr, originally written by Keith Packard, with contributions from Matthew Allum, Eric Anholt, Dan Doel, Thomas Luebking, Matthew Hawn, Ely Levy, Phil Blundell, and Carl Worth. Compton by Christopher Jeffrey, based on Dana Jansens' original work, with contributions from Richard Grenville. absolute legends, all of them 🫢


🌈 RESOURCES 🌈

Homepage: https://github.com/chjj/compton


πŸ’… SEE ALSO πŸ’…

xcompmgr(1), compton-trans(1)


and that's the whole page bestie!! this masterpiece is compton nightly-20141124, dated 01/14/2026, and it's giving COMPTON(1) main character energy ⭐ go forth and composite, you got this πŸ¦‹πŸ’–βœ¨

πŸ“¦ where this page comes from