Difference between revisions of "Compton"

From ArchWiki
Jump to: navigation, search
(Not worth a "note". style)
 
(112 intermediate revisions by 37 users not shown)
Line 1: Line 1:
[[Category:X Server]]
+
[[Category:X server]]
 
[[Category:Eye candy]]
 
[[Category:Eye candy]]
{{Article summary start}}
+
[[ja:Compton]]
{{Article summary text|Introduces chjj's fork of xcompmgr (fork of fork indeed).}}
+
[[ru:Compton]]
{{Article summary end}}
+
[[zh-hans:Compton]]
 +
Compton is a standalone composite manager, suitable for use with [[window managers]] that do not natively provide compositing functionality. Compton is a fork of [http://oliwer.net/xcompmgr-dana/ xcompmgr-dana], which in turn is a fork of [[xcompmgr]]. See the [https://github.com/chjj/compton compton github page] for more information.
  
[https://github.com/chjj/compton Compton] is a fork of xcompmgr-dana by chjj, where xcompmgr-dana is a fork of xcompmgr by Dana. It is therefore, like xcompmgr, a standalone composite manager and can be used as a companion to lightweight [[Window Manager|window managers]] which don't do composition on themselves.
+
== Installation ==
 +
 
 +
[[Install]] {{Pkg|compton}} or its [[git]] version, {{AUR|compton-git}}.
 +
 
 +
{{AUR|compton-conf}} or {{AUR|compton-conf-git}} package provide [[Qt]]-based GUI for Compton configuration.
  
This fork fixed many bugs, and is very usable by this time of writing.
+
== Use ==
  
== Installation ==
+
Compton may be manually enabled or disabled at any time during a session, or autostarted as a background ([[Daemon]]) process for sessions. There are also several optional arguments that may be used to tweak the compositing effects provided. These include:
Install the {{AUR|compton-git}} package, available in the [[AUR]].
+
 
 +
* {{ic|-b}}: Run as a background ([[Daemon]]) process for a session (e.g. when autostarting for a [[window manager]] such as [[Openbox]])
 +
* {{ic|-c}}: Enable shadow effects
 +
* {{ic|-C}}: Disable shadow effects on panels and docks
 +
* {{ic|-G}}: Disable shadow effects for application windows and drag-and-drop objects
 +
* {{ic|--config}}: Use a specified configuration file
 +
 
 +
Many more options are available, including to set timing, displays to be managed, and the opacity of menus, window borders, and inactive application menus. See the [https://github.com/chjj/compton/blob/master/man/compton.1.asciidoc Compton Man Page] for further information.
 +
 
 +
{{Note|If a different [[composite manager]] is running, it should be disabled before starting ''compton''.}}
 +
 
 +
=== Autostarting ===
 +
How compton would be autostarted as a [[Daemon]] process will depend on the [[desktop environment]] or [[window manager]] used. For example, for [[Openbox]] the {{ic|~/.config/openbox/autostart}} file must be edited, while for [[i3]] it would be the {{ic|~/.i3/config}} file. Where necessary, compton may also be autostarted from [[xprofile]] or [[Xinitrc]]. Read the [[startup files]] article for further information.
 +
 
 +
=== Command only ===
 +
To manually enable default compositing effects during a session, use the following command:
  
== Usage ==
 
To start manually, just run:
 
 
  $ compton
 
  $ compton
  
To use fancy shadows, you can run
+
Alternatively, to disable all shadowing effects during a session, the {{ic|-C}} and {{ic|-G}} arguments must be added:
  $ compton -c
+
 
Additionally, -C can be used to avoid shadows on panels and docks, and -G can be used to avoid shadows on drag-and-drop objects (you probably want this).
+
  $ compton -CG
 +
 
 +
To autostart compton as a background ([[Daemon]]) process for a session, the {{ic|-b}} argument must be used:
 +
 
 +
compton -b
 +
 
 +
To disable all shadowing effects from the [[Daemon]] process, the {{ic|-C}} and {{ic|-G}} arguments must again be added:
  
If you want it started automatically, put this in [[xprofile]]:
+
compton -CGb
  
compton -cGb
+
Finally, this is an example where additional arguments that require values to be set have been used:
  
where -b means to daemonize after composite manager registered.
+
compton -cCGfF -o 0.38 -O 200 -I 200 -t 0 -l 0 -r 3 -D2 -m 0.88
  
An example of a more customised command:
+
=== Using a configuration file ===
compton -cCGfF -o 0.38 -O 200 -I 200 -t 0.02 -l 0.02 -r 3.2 -D2 -m 0.88
 
  
You can also put your configuration in a file {{ic|~/.config/compton.conf}} or {{ic|~/.compton.conf}}.
+
The default configuration is available in {{ic|/etc/xdg/compton.conf}}. For modifications, it can be copied to {{ic|~/.config/compton.conf}}, or to {{ic|~/.compton.conf}}.
  
A sample configuration file.
+
To use a custom configuration file with compton during a session, use the following command:
  
{{hc|~/.compton.conf|2=
+
compton --config ''path/to/compton.conf''
# Shadow
 
shadow = true; # Enabled client-side shadows on windows.
 
no-dock-shadow = true; # Avoid drawing shadows on dock/panel windows.
 
no-dnd-shadow = true; # Don't draw shadows on DND windows.
 
clear-shadow = true; # Zero the part of the shadow's mask behind the window (experimental).
 
shadow-radius = 7; # The blur radius for shadows. (default 12)
 
shadow-offset-x = -7; # The left offset for shadows. (default -15)
 
shadow-offset-y = -7; # The top offset for shadows. (default -15)
 
# shadow-opacity = 0.7; # The translucency for shadows. (default .75)
 
# shadow-red = 0.0; # Red color value of shadow. (0.0 - 1.0, defaults to 0)
 
# shadow-green = 0.0; # Green color value of shadow. (0.0 - 1.0, defaults to 0)
 
# shadow-blue = 0.0; # Blue color value of shadow. (0.0 - 1.0, defaults to 0)
 
shadow-exclude = [ "n:e:Notification" ]; # Exclude conditions for shadows.
 
# shadow-exclude = "n:e:Notification";
 
shadow-ignore-shaped = true;
 
  
# Opacity
+
To auto-start compton as a background ([[Daemon]]) process for a session, specify the {{ic|-b}} argument:
menu-opacity = 0.9; # The opacity for menus. (default 1.0)
 
inactive-opacity = 0.9; # Opacity of inactive windows. (0.1 - 1.0)
 
#frame-opacity = 0.8; # Opacity of window titlebars and borders. (0.1 - 1.0)
 
inactive-opacity-override = true; # Inactive opacity set by 'inactive-opacity' overrides value of _NET_WM_OPACITY.
 
  
# Fading
+
compton --config ''path/to/compton.conf'' -b
fading = true; # Fade windows during opacity changes.
 
# fade-delta = 30; # The time between steps in a fade in milliseconds. (default 10).
 
fade-in-step = 0.03; # Opacity change between steps while fading in. (default 0.028).
 
fade-out-step = 0.03; # Opacity change between steps while fading out. (default 0.03).
 
# no-fading-openclose = true; # Fade windows in/out when opening/closing.
 
  
# Other
+
==== Disable shadowing of some windows ====
#inactive-dim = 0.5; # Dim inactive windows. (0.0 - 1.0, defaults to 0).
 
mark-wmwin-focused = true; # Try to detect WM windows and mark them as active.
 
mark-ovredir-focused = true;
 
detect-rounded-corners = true;
 
  
# Window type settings
+
Due to the way compton draws its shadows, certain applications will have visual glitches when you have shadows enabled. The {{ic|shadow-exclude}} options could disable compton shadows.
wintypes:
 
{
 
  tooltip = { fade = true; shadow = false; opacity = 0.75; };
 
};
 
}}
 
  
To run compton with config file:
+
For example, to disable Compton shadows on all GTK +3 windows, add below setting to {{ic|shadow-exclude}} in {{ic|compton.conf}}:
 +
"_GTK_FRAME_EXTENTS@:c"
  
$ compton --config ~/.compton.conf
+
To disable shadows around [[conky]] windows - where used - first amend the conky configuration file {{ic|~/.conkyrc}} as follows:
  
To automatically start compton put following in any of your [[Startup files]]:
+
own_window_class conky
  
compton --config ~/.compton.conf -b
+
Then amend the compton configuration file as follows:
  
== Transparency ==
+
shadow-exclude = "class_g = 'conky'";
Besides what is provided in xcompmgr, compton introduces two new auto-transparency options:
 
  
      -i opacity
+
For currently disabled windows, please see [https://projects.archlinux.org/svntogit/community.git/tree/trunk/compton.conf?h=packages/compton#n80 here].
              Specifies inactive window transparency. (0.1 - 1.0)
 
      -e opacity
 
              Specifies window frame transparency. (0.1 - 1.0)
 
  
Try them out on your own.
+
== Multihead ==
 +
If a [[multihead]] configuration is used without xinerama - meaning that X server is started with more than one screen - then compton will start on only one screen by default. It can be started on all screens by using the {{ic|-d}} argument. For example, compton can be executed for 4 monitors with the following command:
  
=== Problem with slock ===
+
seq 0 3 | xargs -l1 -I@ compton -b -d :0.@
  
Note that inactive window transparency (-i option) will make all inactive window became transparent, and if you use {{Pkg|slock}} it may not be a good result. Try this in config file instead:
+
== Troubleshooting ==
 +
The use of compositing effects may on occasion cause issues such as visual glitches when not configured correctly for use with other applications and programs.
 +
 
 +
=== Tabbed windows ===
 +
 
 +
When windows with transparency are tabbed, the underlying tabbed windows
 +
are still visible because of transparency. Each tabbed window also draws its
 +
own shadow resulting in multiple shadows.
 +
 
 +
Removing the multiple shadows issue can be done by adding the following to
 +
the already existing [https://projects.archlinux.org/svntogit/community.git/tree/trunk/compton.conf?h=packages/compton#n80 {{ic|shadow-exclude}} list]:
 +
 
 +
"_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'"
 +
 
 +
Not drawing underlying tabbed windows can be enabled by adding the following to your {{ic|compton.conf}}:
 +
 
 +
opacity-rule = [
 +
  "95:class_g = 'URxvt' && !_NET_WM_STATE@:32a",
 +
  "0:_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'"
 +
];
 +
 
 +
Note that {{ic|URxvt}} is the Xorg class name of your terminal. Change this if you use a different terminal.
 +
 
 +
See [https://www.reddit.com/r/unixporn/comments/330zxl/webmi3_no_more_overlaying_shadows_and_windows_in/] for more information.
 +
 
 +
=== slock ===
 +
 
 +
Where inactive window transparency has been enabled (the {{ic|-i}}
 +
argument when running as a command), this may provide troublesome
 +
results when also using [[slock]]. One solution is to amend the
 +
transparency to {{ic|0.2}}. For example, where running compton arguments
 +
as a command:
 +
 
 +
$ compton <any other arguments> -i 0.2
 +
 
 +
Otherwise, where using a configuration file:
  
 
  inactive-dim = 0.2;
 
  inactive-dim = 0.2;
  
This will work with slock better.
+
Alternatively, you may try to exclude slock by its window id, or by
 +
excluding all windows with no name.
 +
{{note|Some programs change their id for every new instance, but slock's appears to be static. Someone more knowledgeable will have to confirm that slock's id is in fact static- until then, use at your own risk.}}
 +
Exclude all windows with no name from compton using the following
 +
options:
 +
$ compton <other arguments> --focus-exclude "! name~=<nowiki>''</nowiki>"
 +
Find your slock's window id by running the command:
 +
$ xwininfo & slock
 +
Quickly click anywhere on the screen (before slock exits), then type
 +
your password to unlock. You should see the window id in the output:
 +
xwininfo: Window id: 0x1800001 (has no name)
 +
Take the window id and exclude it from compton with:
 +
$ compton <any other arguments> --focus-exclude 'id = 0x1800001'
 +
Otherwise, where using a configuration file:
 +
focus-exclude = "id = 0x1800001";
  
== Multihead ==
+
=== dwm & dmenu===
 +
dwm's statusbar is not detected by any of compton's functions to automatically exclude window manager elements. Neither dwm statusbar nor dmenu have a static window id. If you want to exclude it from inactive window transparency (or other), you'll have to either patch a window class into the source code of each, or exclude by less precise attributes. The following exmaple is with dwm's status on top, which allows a resolution independent of location exclusion:
 +
$ compton <any other arguments> --focus-exclude "x = 0 && y = 0 && override_redirect = true"
 +
Otherwise, where using a configuration file:
 +
focus-exclude = "x = 0 && y = 0 && override_redirect = true";
 +
The override redirect property seems to be false for most windows- having this in the exclusion rule prevents other windows drawn in the upper left corner from being excluded (for example, when dwm statusbar is hidden, x0 y0 will match whatever is in dwm's master stack).
 +
 
 +
=== Unable to change the background color with xsetroot ===
 +
Currently, compton is incompatible with {{ic|xsetroot}}'s {{ic|-solid}} option, a workaround is to use {{aur|hsetroot}} to set the background color:
 +
 
 +
$ hsetroot -solid '#000000'
 +
 
 +
For a detailed explanation, please see https://github.com/chjj/compton/issues/162.
 +
 
 +
=== Corrupted screen contents with Intel graphics ===
 +
On at least some Intel chipsets, DRI3 is known to cause [https://bugs.freedesktop.org/show_bug.cgi?id=97916 trouble] for compton when the display resolution is changed or a new monitor is connected.  This can happen with either the {{ic|intel}} or {{ic|modesetting}} driver.  A workaround is to [[Intel graphics#DRI3_issues|disable DRI3]].
 +
 
 +
=== Screen artifacts/screenshot issues when using AMD's Catalyst driver ===
 +
Try running compton with
 +
 
 +
--backend xrender
 +
 
 +
or adding
 +
 
 +
backend = "xrender";
 +
 
 +
to your compton.conf file.
 +
 
 +
For more info, please see https://github.com/chjj/compton/issues/208
 +
 
 +
=== Errors while trying to daemonize with nvidia drivers ===
 +
 
 +
If you get error {{ic|main(): Failed to create new session.}} while trying to start compton in background you should try {{AUR|compton-garnetius-git}}. It also provides a few pulls from upstream that aren't merged yet.
 +
 
 +
=== Lag when using xft fonts ===
 +
 
 +
If you experience heavy lag when using Xft fonts in applications such as [[xterm]] or [[urxvt]] try running with
 +
 
 +
--xrender-sync --xrender-sync-fence
 +
 
 +
or try using the xrender backend.
 +
 
 +
See [https://github.com/chjj/compton/issues/152] for more information.
 +
 
 +
=== Flicker ===
  
If you use a [[multihead]] configuration without Xinerama, which means you start a X server with more than one screen, then compton will start on only one screen by default. You can start on all screen by starting multiple compton on all screens with -d. For example, if you have 4 monitors then you can start compton by:
+
Applies to fully maximized windows (in sessions without any panels) with the default compton.conf caused and resolved by the following option:
  
seq 0 3 | xargs -l1 -I@ compton -b -d :0.@
+
  unredir-if-possible = false;
  
== Conky without shadows ==
+
See [https://github.com/chjj/compton/issues/402] for more information.
  
If you use conky, there may be shadows, you don't want around conky's windows. To get rid of it, add this line to your conky configuration file:
+
=== Fullscreen tearing ===
  
own_window_class conky
+
If you observe screen tearing of video playback only in fullscreen mode see above.
  
then in your compton configuration file edit the following line
+
== See also ==
  
shadow-exclude = "class_g = 'conky'";
+
*[http://ubuntuforums.org/showthread.php?t=2144468&p=12644745#post12644745 Howto: Using Compton for tear-free compositing on XFCE or LXDE]

Latest revision as of 22:43, 26 June 2017

Compton is a standalone composite manager, suitable for use with window managers that do not natively provide compositing functionality. Compton is a fork of xcompmgr-dana, which in turn is a fork of xcompmgr. See the compton github page for more information.

Installation

Install compton or its git version, compton-gitAUR.

compton-confAUR or compton-conf-gitAUR package provide Qt-based GUI for Compton configuration.

Use

Compton may be manually enabled or disabled at any time during a session, or autostarted as a background (Daemon) process for sessions. There are also several optional arguments that may be used to tweak the compositing effects provided. These include:

  • -b: Run as a background (Daemon) process for a session (e.g. when autostarting for a window manager such as Openbox)
  • -c: Enable shadow effects
  • -C: Disable shadow effects on panels and docks
  • -G: Disable shadow effects for application windows and drag-and-drop objects
  • --config: Use a specified configuration file

Many more options are available, including to set timing, displays to be managed, and the opacity of menus, window borders, and inactive application menus. See the Compton Man Page for further information.

Note: If a different composite manager is running, it should be disabled before starting compton.

Autostarting

How compton would be autostarted as a Daemon process will depend on the desktop environment or window manager used. For example, for Openbox the ~/.config/openbox/autostart file must be edited, while for i3 it would be the ~/.i3/config file. Where necessary, compton may also be autostarted from xprofile or Xinitrc. Read the startup files article for further information.

Command only

To manually enable default compositing effects during a session, use the following command:

$ compton

Alternatively, to disable all shadowing effects during a session, the -C and -G arguments must be added:

$ compton -CG

To autostart compton as a background (Daemon) process for a session, the -b argument must be used:

compton -b

To disable all shadowing effects from the Daemon process, the -C and -G arguments must again be added:

compton -CGb

Finally, this is an example where additional arguments that require values to be set have been used:

compton -cCGfF -o 0.38 -O 200 -I 200 -t 0 -l 0 -r 3 -D2 -m 0.88

Using a configuration file

The default configuration is available in /etc/xdg/compton.conf. For modifications, it can be copied to ~/.config/compton.conf, or to ~/.compton.conf.

To use a custom configuration file with compton during a session, use the following command:

compton --config path/to/compton.conf

To auto-start compton as a background (Daemon) process for a session, specify the -b argument:

compton --config path/to/compton.conf -b

Disable shadowing of some windows

Due to the way compton draws its shadows, certain applications will have visual glitches when you have shadows enabled. The shadow-exclude options could disable compton shadows.

For example, to disable Compton shadows on all GTK +3 windows, add below setting to shadow-exclude in compton.conf:

"_GTK_FRAME_EXTENTS@:c"

To disable shadows around conky windows - where used - first amend the conky configuration file ~/.conkyrc as follows:

own_window_class conky

Then amend the compton configuration file as follows:

shadow-exclude = "class_g = 'conky'";

For currently disabled windows, please see here.

Multihead

If a multihead configuration is used without xinerama - meaning that X server is started with more than one screen - then compton will start on only one screen by default. It can be started on all screens by using the -d argument. For example, compton can be executed for 4 monitors with the following command:

seq 0 3 | xargs -l1 -I@ compton -b -d :0.@

Troubleshooting

The use of compositing effects may on occasion cause issues such as visual glitches when not configured correctly for use with other applications and programs.

Tabbed windows

When windows with transparency are tabbed, the underlying tabbed windows are still visible because of transparency. Each tabbed window also draws its own shadow resulting in multiple shadows.

Removing the multiple shadows issue can be done by adding the following to the already existing shadow-exclude list:

"_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'"

Not drawing underlying tabbed windows can be enabled by adding the following to your compton.conf:

opacity-rule = [
  "95:class_g = 'URxvt' && !_NET_WM_STATE@:32a",
  "0:_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'"
];

Note that URxvt is the Xorg class name of your terminal. Change this if you use a different terminal.

See [1] for more information.

slock

Where inactive window transparency has been enabled (the -i argument when running as a command), this may provide troublesome results when also using slock. One solution is to amend the transparency to 0.2. For example, where running compton arguments as a command:

$ compton <any other arguments> -i 0.2

Otherwise, where using a configuration file:

inactive-dim = 0.2;

Alternatively, you may try to exclude slock by its window id, or by excluding all windows with no name.

Note: Some programs change their id for every new instance, but slock's appears to be static. Someone more knowledgeable will have to confirm that slock's id is in fact static- until then, use at your own risk.

Exclude all windows with no name from compton using the following options:

$ compton <other arguments> --focus-exclude "! name~=''"

Find your slock's window id by running the command:

$ xwininfo & slock

Quickly click anywhere on the screen (before slock exits), then type your password to unlock. You should see the window id in the output:

xwininfo: Window id: 0x1800001 (has no name)

Take the window id and exclude it from compton with:

$ compton <any other arguments> --focus-exclude 'id = 0x1800001'

Otherwise, where using a configuration file:

focus-exclude = "id = 0x1800001";

dwm & dmenu

dwm's statusbar is not detected by any of compton's functions to automatically exclude window manager elements. Neither dwm statusbar nor dmenu have a static window id. If you want to exclude it from inactive window transparency (or other), you'll have to either patch a window class into the source code of each, or exclude by less precise attributes. The following exmaple is with dwm's status on top, which allows a resolution independent of location exclusion:

$ compton <any other arguments> --focus-exclude "x = 0 && y = 0 && override_redirect = true"

Otherwise, where using a configuration file:

focus-exclude = "x = 0 && y = 0 && override_redirect = true";

The override redirect property seems to be false for most windows- having this in the exclusion rule prevents other windows drawn in the upper left corner from being excluded (for example, when dwm statusbar is hidden, x0 y0 will match whatever is in dwm's master stack).

Unable to change the background color with xsetroot

Currently, compton is incompatible with xsetroot's -solid option, a workaround is to use hsetrootAUR to set the background color:

$ hsetroot -solid '#000000'

For a detailed explanation, please see https://github.com/chjj/compton/issues/162.

Corrupted screen contents with Intel graphics

On at least some Intel chipsets, DRI3 is known to cause trouble for compton when the display resolution is changed or a new monitor is connected. This can happen with either the intel or modesetting driver. A workaround is to disable DRI3.

Screen artifacts/screenshot issues when using AMD's Catalyst driver

Try running compton with

--backend xrender

or adding

backend = "xrender";

to your compton.conf file.

For more info, please see https://github.com/chjj/compton/issues/208

Errors while trying to daemonize with nvidia drivers

If you get error main(): Failed to create new session. while trying to start compton in background you should try compton-garnetius-gitAUR. It also provides a few pulls from upstream that aren't merged yet.

Lag when using xft fonts

If you experience heavy lag when using Xft fonts in applications such as xterm or urxvt try running with

--xrender-sync --xrender-sync-fence

or try using the xrender backend.

See [2] for more information.

Flicker

Applies to fully maximized windows (in sessions without any panels) with the default compton.conf caused and resolved by the following option:

 unredir-if-possible = false;

See [3] for more information.

Fullscreen tearing

If you observe screen tearing of video playback only in fullscreen mode see above.

See also