Xcompmgr: Difference between revisions

From ArchWiki
(simplification of wikilinks (testing https://github.com/lahwaacz/wiki-scripts/blob/master/link-checker.py))
m (Link to Xorg#Composite)
 
(23 intermediate revisions by 13 users not shown)
Line 1: Line 1:
[[Category:X Server]]
[[Category:X server]]
[[Category:Eye candy]]
[[Category:Eye candy]]
[[es:Xcompmgr]]
[[ja:Xcompmgr]]
[[ja:Xcompmgr]]
[[ru:Xcompmgr]]
[[ru:Xcompmgr]]
[[zh-CN:Xcompmgr]]
[[zh-hans:Xcompmgr]]
{{Related articles start}}
{{Related articles start}}
{{Related|Compiz}}
{{Related|Compiz}}
{{Related|Cairo Compmgr}}
{{Related|picom}}
{{Related|Compton}}
{{Related articles end}}
{{Related articles end}}


[http://cgit.freedesktop.org/xorg/app/xcompmgr/ Xcompmgr] is a simple [[Wikipedia:Compositing window manager|composite manager]] capable of rendering drop shadows and, with the use of the '''transset''' utility, primitive window transparency. Designed solely as a proof-of-concept, Xcompmgr is a lightweight alternative to Compiz and similar composite managers.
[https://gitlab.freedesktop.org/xorg/app/xcompmgr/ Xcompmgr] is a simple [[Xorg#Composite|compositor]] capable of rendering drop shadows and, with the use of the '''transset''' utility, primitive window transparency. Designed solely as a proof-of-concept, Xcompmgr is a lightweight alternative to Compiz and similar composite managers.


Because it does not replace any existing window manager, it is an ideal solution for users of lightweight [[window managers]], seeking a more elegant desktop.
Because it does not replace any existing window manager, it is an ideal solution for users of lightweight [[window managers]], seeking a more elegant desktop.
Line 17: Line 15:
== Installation ==
== Installation ==


Before installing Xcompmgr, make sure you have installed and correctly configured [[Xorg]]. If you have a custom setup, also turn on the [[Composite]] extension for the X Server.
Before installing Xcompmgr, make sure you have [[install]]ed and correctly configured [[Xorg]]. To make sure the [[Composite]] extension is enabled for the X Server, run:


Xcompmgr can be [[Pacman|installed]] with the package {{Pkg|xcompmgr}}, available in the [[official repositories]]. For transparency also install {{Pkg|transset-df}} from the [[official repositories]].
{{hc|<nowiki>$ xdpyinfo | grep Composite</nowiki>|Composite}}


=== Forks and updated versions ===
If there is no output, add the {{ic|Composite}} option to the {{ic|Extensions}} section of xorg.conf:


There are some forks available, with various bugfixes:
{{hc|/etc/X11/xorg.conf|
* {{App|xcompmgr-dana|One of the first forks of Xcompmgr.|http://oliwer.net/xcompmgr-dana/|{{AUR|xcompmgr-dana}}}}
Section "Extensions"
* {{App|[[Compton]]|A fork of Xcompmgr that contains most of the previous fixes as well as many others.|https://github.com/chjj/compton|{{AUR|compton-git}}}}
        Option  "Composite" "true"
EndSection}}
 
Xcompmgr can be [[install]]ed with the package {{Pkg|xcompmgr}}. For transparency also [[install]] the {{AUR|transset-df}}. See [[Xterm#Automatic transparency]] for an example.


== Configuration ==
== Configuration ==


To load {{ic|xcompmgr}}, simply run:
To load {{ic|xcompmgr}}, simply run:
  $ xcompmgr -c
  $ xcompmgr -c


To have it load at session start, add the following to [[xprofile]]:
To have it load at session start, add the following to [[xprofile]]:
  xcompmgr -c &
  xcompmgr -c &


Instead of {{ic|-c}} you can experiment with the other switches to modify the drop-shadows or even enable fading. Below is a common example:
Instead of {{ic|-c}} you can experiment with the other switches to modify the drop-shadows or even enable fading. Below is a common example:
  xcompmgr -c -C -t-5 -l-5 -r4.2 -o.55 &
  xcompmgr -c -C -t-5 -l-5 -r4.2 -o.55 &


For a full list of options, run:
For a full list of options, run:
  $ xcompmgr --help
  $ xcompmgr --help


Line 46: Line 51:


To set the transparency of a program window, make sure the desired program is already running, then execute:
To set the transparency of a program window, make sure the desired program is already running, then execute:
  $ transset-df ''opacity''
  $ transset-df ''opacity''
where ''opacity'' is a number between '''0''' and '''1''', 0 being transparent and 1 being opaque.
where ''opacity'' is a number between '''0''' and '''1''', 0 being transparent and 1 being opaque.


Line 56: Line 63:


This script allows easy (re)starting and stopping of the compositing manager.
This script allows easy (re)starting and stopping of the compositing manager.
{{hc|~/.bin/comp|<nowiki>
{{hc|~/.bin/comp|<nowiki>
#!/bin/bash
#!/bin/bash
Line 99: Line 107:


Assign the following script to any hot-key:
Assign the following script to any hot-key:
{{bc|
{{bc|
#!/bin/bash
#!/bin/bash


if pgrep xcompmgr &>/dev/null; then
if pgrep xcompmgr &>/dev/null; then
    echo "Turning xcompmgr OFF"
    pkill xcompmgr &
else
     echo "Turning xcompmgr ON"
     echo "Turning xcompmgr ON"
     xcompmgr -c -C -t-5 -l-5 -r4.2 -o.55 &
     xcompmgr -c -C -t-5 -l-5 -r4.2 -o.55 &
else
    echo "Turning xcompmgr OFF"
    pkill xcompmgr &
fi
fi


Line 114: Line 123:


== Troubleshooting ==
== Troubleshooting ==
=== Mozilla Firefox crashes when entering a Flash site ===
You can fix it by creating an executable file named {{ic|/etc/profile.d/flash.sh}} containing this line:
export XLIB_SKIP_ARGB_VISUALS=1
{{Warning|This will disable compositing effects.}}


=== Background turns light gray briefly after logging in (e.g. in Openbox) ===
=== Background turns light gray briefly after logging in (e.g. in Openbox) ===


This is fixed by installing {{AUR|hsetroot}} and setting the background color by executing {{ic|hsetroot -solid "#000000"}} (just type the code of the color you want instead of ''#000000'') before {{ic|xcompmgr}}.
This is fixed by [[install]]ing {{Pkg|hsetroot}} and setting the background color by executing {{ic|hsetroot -solid "#000000"}} (just type the code of the color you want instead of ''#000000'') before {{ic|xcompmgr}}. Alternatively, if {{ic|xcompmgr}} is called prior to {{ic|exec}} in {{ic|~/.xinitrc}}, you can change {{ic|xcompmgr &}} to {{ic|(sleep 1 && xcompmgr) &}} which will fork a subshell and allow {{ic|xcompmgr}} to execute after your window manager has already started.


=== BadPicture request in awesome ===
=== BadPicture request in awesome ===


If you get the following error in [[awesome]]:
If you get the following error in [[awesome]]:
   error 163: BadPicture request 149 minor 8 serial 34943
   error 163: BadPicture request 149 minor 8 serial 34943
   error 163: BadPicture request 149 minor 8 serial 34988
   error 163: BadPicture request 149 minor 8 serial 34988
   error 163: BadPicture request 149 minor 8 serial 35033
   error 163: BadPicture request 149 minor 8 serial 35033
just install [[feh]] and restart [[awesome]].
 
just [[install]] [[feh]] and restart [[awesome]].


=== Screen not updating in awesome after resolution change ===
=== Screen not updating in awesome after resolution change ===
Line 138: Line 142:
When using an external monitor, you may encounter problems when automatically changing display resolutions: a part of the screen becomes "stuck" and no longer updates itself. This problem occurs because of the initial resolution change (happening before Xcompmgr starts) as well as [[awesome]] setting the background via [[feh]].
When using an external monitor, you may encounter problems when automatically changing display resolutions: a part of the screen becomes "stuck" and no longer updates itself. This problem occurs because of the initial resolution change (happening before Xcompmgr starts) as well as [[awesome]] setting the background via [[feh]].


To fix it, you need to install {{AUR|hsetroot}}, from the [[official repositories]], and put the following line in {{ic|.xinitrc}}, just before {{ic|xcompmgr}}:
To fix it, you need to [[install]] {{Pkg|hsetroot}} and put the following line in {{ic|.xinitrc}}, just before {{ic|xcompmgr}}:
 
  hsetroot -solid "#000066"
  hsetroot -solid "#000066"
(you can replace ''#000066'' with your color of choice).
(you can replace ''#000066'' with your color of choice).

Latest revision as of 18:41, 1 February 2023

Xcompmgr is a simple compositor capable of rendering drop shadows and, with the use of the transset utility, primitive window transparency. Designed solely as a proof-of-concept, Xcompmgr is a lightweight alternative to Compiz and similar composite managers.

Because it does not replace any existing window manager, it is an ideal solution for users of lightweight window managers, seeking a more elegant desktop.

Installation

Before installing Xcompmgr, make sure you have installed and correctly configured Xorg. To make sure the Composite extension is enabled for the X Server, run:

$ xdpyinfo | grep Composite
Composite

If there is no output, add the Composite option to the Extensions section of xorg.conf:

/etc/X11/xorg.conf
Section "Extensions"
        Option  "Composite" "true"
EndSection

Xcompmgr can be installed with the package xcompmgr. For transparency also install the transset-dfAUR. See Xterm#Automatic transparency for an example.

Configuration

To load xcompmgr, simply run:

$ xcompmgr -c

To have it load at session start, add the following to xprofile:

xcompmgr -c &

Instead of -c you can experiment with the other switches to modify the drop-shadows or even enable fading. Below is a common example:

xcompmgr -c -C -t-5 -l-5 -r4.2 -o.55 &

For a full list of options, run:

$ xcompmgr --help

Window transparency

Although its practical use is limited, due to its slow performance, the transset-df utility can be used to set the transparency of individual windows.

To set the transparency of a program window, make sure the desired program is already running, then execute:

$ transset-df opacity

where opacity is a number between 0 and 1, 0 being transparent and 1 being opaque.

Once execution, the mouse cursor will transform to a cross-hair. Click a window and its transparency will change to the value specified. For example, transset-df 0.25 will set the target window to 25% opacity (75% transparency).

Tips and tricks

Start/Stop Xcompmgr on demand

This script allows easy (re)starting and stopping of the compositing manager.

~/.bin/comp
#!/bin/bash
#
# Start a composition manager.
# (xcompmgr in this case)

comphelp() {
    echo "Composition Manager:"
    echo "   (re)start: COMP"
    echo "   stop:      COMP -s"
    echo "   query:     COMP -q"
    echo "              returns 0 if composition manager is running, else 1"
    exit
}

checkcomp() {
    pgrep xcompmgr &>/dev/null
}

stopcomp() {
    checkcomp && killall xcompmgr
}

startcomp() {
    stopcomp
    # Example settings only. Replace with your own.
    xcompmgr -CcfF -I-.015 -O-.03 -D6 -t-1 -l-3 -r4.2 -o.5 &
    exit
}

case "$1" in
    "")   startcomp ;;
    "-q") checkcomp ;;
    "-s") stopcomp; exit ;;
    *)    comphelp ;;
esac

For ease of use, you can bind this script to a hot-key using, for example, Xbindkeys. This allows for fast restart or temporary composition removal if needed without interrupting other work.

Toggle Xcompmgr

Assign the following script to any hot-key:

#!/bin/bash

if pgrep xcompmgr &>/dev/null; then
    echo "Turning xcompmgr OFF"
    pkill xcompmgr &
else
    echo "Turning xcompmgr ON"
    xcompmgr -c -C -t-5 -l-5 -r4.2 -o.55 &
fi

exit 0

Troubleshooting

Background turns light gray briefly after logging in (e.g. in Openbox)

This is fixed by installing hsetroot and setting the background color by executing hsetroot -solid "#000000" (just type the code of the color you want instead of #000000) before xcompmgr. Alternatively, if xcompmgr is called prior to exec in ~/.xinitrc, you can change xcompmgr & to (sleep 1 && xcompmgr) & which will fork a subshell and allow xcompmgr to execute after your window manager has already started.

BadPicture request in awesome

If you get the following error in awesome:

 error 163: BadPicture request 149 minor 8 serial 34943
 error 163: BadPicture request 149 minor 8 serial 34988
 error 163: BadPicture request 149 minor 8 serial 35033

just install feh and restart awesome.

Screen not updating in awesome after resolution change

When using an external monitor, you may encounter problems when automatically changing display resolutions: a part of the screen becomes "stuck" and no longer updates itself. This problem occurs because of the initial resolution change (happening before Xcompmgr starts) as well as awesome setting the background via feh.

To fix it, you need to install hsetroot and put the following line in .xinitrc, just before xcompmgr:

hsetroot -solid "#000066"

(you can replace #000066 with your color of choice).