From Mageia wiki
Jump to: navigation, search
Currently, this is a draft work-in-progress page.

Compiz fusion splash logo.png

Introduction

This page describes installing and configuring Compiz Fusion 3D desktop in Mageia Linux.

Compiz can work well with different Desktop Environments. It also works in XFCE and LXDE.

It probably will not work with Gnome or Plasma. Here we look at how it works with MATE.

Benefits

Compiz fusion offers a way to organize your desktop environment making full use of 3D capablities of your graphics card.

For more background on Compiz Fusion please see wikipdia page.

Assumptions

Here we assume you already have MATE desktop environment already installed and configured.


Install Compiz

/bin/sudo urpmi compiz-plugins-main compiz-fusion-icon compiz-decorator-gtk

Example:

[user@localhost ~]$ /bin/sudo urpmi compiz-plugins-main compiz-fusion-icon compiz-decorator-gtk
To satisfy dependencies, the following packages are going to be installed:
  Package                        Version      Release       Arch    
(medium "Core Release (Installer)")
  lib64protobuf17                3.6.1        1.mga7        x86_64  
(medium "Core Release")
  compiz-ccsm                    0.8.16       2.mga7        noarch  
  compiz-fusion-icon             0.2.4        4.mga7        noarch  
  compiz-manager                 0.7.0        2.mga7        noarch  
  compiz-plugins-main            0.8.16       1.mga7        x86_64  
  compizconfig                   0.8.16       2.mga7        x86_64  
  compizconfig-python            0.8.16       3.mga7        x86_64  
  compositing-wm-common          2018.0       16.mga7       x86_64  
  lib64appindicator3-gir0.1      12.10.0      21.mga7       x86_64  
  lib64compizconfig0             0.8.16       2.mga7        x86_64  
  xvinfo                         1.1.4        1.mga7        x86_64  
(medium "Core Updates")
  compiz                         0.8.16.1     3.1.mga7      x86_64  
  compiz-decorator-gtk           0.8.16.1     3.1.mga7      x86_64  
  lib64decoration0               0.8.16.1     3.1.mga7      x86_64  
16MB of additional disk space will be used.
3.1MB of packages will be retrieved.
Proceed with the installation of the 14 packages? (Y/n) y


    distrib-coffee.ipsl.jussieu.fr::mageia/distrib/7/x86_64/media/core/release/compiz-manager-0.7.0-2.mga7.noarch.rpm
    distrib-coffee.ipsl.jussieu.fr::mageia/distrib/7/x86_64/media/core/release/lib64appindicator3-gir0.1-12.10.0-21.mga7.x86_64.rpm                                                           
    distrib-coffee.ipsl.jussieu.fr::mageia/distrib/7/x86_64/media/core/release/compiz-ccsm-0.8.16-2.mga7.noarch.rpm                                                                           
    distrib-coffee.ipsl.jussieu.fr::mageia/distrib/7/x86_64/media/core/release/compizconfig-0.8.16-2.mga7.x86_64.rpm                                                                          
    distrib-coffee.ipsl.jussieu.fr::mageia/distrib/7/x86_64/media/core/release/lib64compizconfig0-0.8.16-2.mga7.x86_64.rpm                                                                    
    distrib-coffee.ipsl.jussieu.fr::mageia/distrib/7/x86_64/media/core/release/xvinfo-1.1.4-1.mga7.x86_64.rpm                                                                                 
    distrib-coffee.ipsl.jussieu.fr::mageia/distrib/7/x86_64/media/core/release/compiz-fusion-icon-0.2.4-4.mga7.noarch.rpm                                                                     
    distrib-coffee.ipsl.jussieu.fr::mageia/distrib/7/x86_64/media/core/release/compositing-wm-common-2018.0-16.mga7.x86_64.rpm                                                                
    distrib-coffee.ipsl.jussieu.fr::mageia/distrib/7/x86_64/media/core/release/compiz-plugins-main-0.8.16-1.mga7.x86_64.rpm                                                                   
    distrib-coffee.ipsl.jussieu.fr::mageia/distrib/7/x86_64/media/core/release/compizconfig-python-0.8.16-3.mga7.x86_64.rpm                                                                   
    distrib-coffee.ipsl.jussieu.fr::mageia/distrib/7/x86_64/media/core/updates/compiz-decorator-gtk-0.8.16.1-3.1.mga7.x86_64.rpm                                                              
    distrib-coffee.ipsl.jussieu.fr::mageia/distrib/7/x86_64/media/core/updates/compiz-0.8.16.1-3.1.mga7.x86_64.rpm                                                                            
    distrib-coffee.ipsl.jussieu.fr::mageia/distrib/7/x86_64/media/core/updates/lib64decoration0-0.8.16.1-3.1.mga7.x86_64.rpm                                                                  
installing /var/cache/urpmi/rpms/compiz-0.8.16.1-3.1.mga7.x86_64.rpm                                                                                                                          
/var/cache/urpmi/rpms/compiz-ccsm-0.8.16-2.mga7.noarch.rpm
/var/cache/urpmi/rpms/compiz-manager-0.7.0-2.mga7.noarch.rpm
/var/cache/urpmi/rpms/compiz-plugins-main-0.8.16-1.mga7.x86_64.rpm
/mnt/Mageia-7.1-x86_64/x86_64/media/core/lib64protobuf17-3.6.1-1.mga7.x86_64.rpm
/var/cache/urpmi/rpms/lib64decoration0-0.8.16.1-3.1.mga7.x86_64.rpm
/var/cache/urpmi/rpms/compiz-fusion-icon-0.2.4-4.mga7.noarch.rpm
/var/cache/urpmi/rpms/xvinfo-1.1.4-1.mga7.x86_64.rpm
/var/cache/urpmi/rpms/lib64appindicator3-gir0.1-12.10.0-21.mga7.x86_64.rpm
/var/cache/urpmi/rpms/compiz-decorator-gtk-0.8.16.1-3.1.mga7.x86_64.rpm
/var/cache/urpmi/rpms/compositing-wm-common-2018.0-16.mga7.x86_64.rpm
/var/cache/urpmi/rpms/compizconfig-python-0.8.16-3.mga7.x86_64.rpm
/var/cache/urpmi/rpms/lib64compizconfig0-0.8.16-2.mga7.x86_64.rpm
/var/cache/urpmi/rpms/compizconfig-0.8.16-2.mga7.x86_64.rpm
Preparing...                     ############################################################################################################################################################
     1/14: xvinfo                ############################################################################################################################################################
     2/14: lib64decoration0      ############################################################################################################################################################
     3/14: lib64appindicator3-gir0.1
                                 ############################################################################################################################################################
     4/14: lib64protobuf17       ############################################################################################################################################################
     5/14: lib64compizconfig0    ############################################################################################################################################################
     6/14: compizconfig          ############################################################################################################################################################
     7/14: compiz-manager        ############################################################################################################################################################
     8/14: compositing-wm-common ############################################################################################################################################################
     9/14: compiz-decorator-gtk  ############################################################################################################################################################
    10/14: compiz-ccsm           ############################################################################################################################################################
    11/14: compiz                ############################################################################################################################################################
    12/14: compizconfig-python   ############################################################################################################################################################
    13/14: compiz-fusion-icon    ############################################################################################################################################################
    14/14: compiz-plugins-main   ############################################################################################################################################################

Confirm version installed is 0.8.16.1-3.1 (or higher):

[user@localhost ~]$ rpm -q compiz compiz-decorator-gtk
compiz-0.8.16.1-3.1.mga7
compiz-decorator-gtk-0.8.16.1-3.1.mga7

Configure Compiz

Run the Compiz Configuration Settings Manager (ccsm) to define the how we wish the 3D desktop to appear.

In this example, we will set a rotatable cube with a workspace on the side faces of the cube. The background "behind" the cube is referred to as the skydome.

First, run ccsm:

ccsm

or from the GUI: Applications => Tools => CompizConfig Settings Manager

Screenshot:

2020 04 07 CompizConfig Settings Manager a.png
____________________________________________ ^ click on: 1. MATE Compatibility 2. Desktop Cube 3. Rotate Cube
2020 04 18 ccsm with MATE and cube rotate set annotated.png

Screenshot:

2020 04 07 CompizConfig Settings Manager b.png
____________________________________________^ click on: Disable Desktop Wall

NB: At this point, we are not yet running Compiz.

Start Compiz

/usr/bin/compiz ccp --replace


Alternatively, use the example script compiz_position in Appendix-1:_compiz_position_script (below) which will set out some programs on workspaces in the 3D desktop:

workspace program Comment
1 mate-terminal multi-tabbed
1 gkrellm system monitor
2 ccsm compiz configuration setting manager
3 Google Chrome google-chrome-stable Installing_Google_Chrome_in_Mageia
4 Mozilla Firefox (downloaded version not ESR)

Example:

[user@localhost ~]$ ~/bin/compiz_position
stdout and stderr now being written to /home/user/logs/compiz_position_log+
log results in /home/user/logs/compiz_position_log

This is a similar configuration as in the example script: Configuring_autostart_with_MATE_in_Mageia#Appendix-1:_Autostart_script_example_MATE_initrc.

Modify to your needs.

Using Compiz

Change number of workspaces

To increase number of workspaces from default 4:

CCSM => General Options => Desktop size => Horizontal Virtual Size => + (to increase) or - (to decrease)


Compiz keys

Here are some key sequences used with compiz. Most require a setting to be made in ccsm to enable.

If your ccsm does not have a particular effect then you probably need to install additional compiz plugins package.

Here, key <super> refers to what is typically labelled as the "windows" key on most keyboards.

# action keys Comment
1 fire drawing <super> + <shift> + <left_mouse_button> and drag check "Paint fire on screen" in ccsm.

To disable: uncheck in ccsm.

2 snow toggle snow on/off with: <super> + <f3> snowing in your desktop

check "Snow" in ccsm "extras"

3 stars toggle stars on/off with <super> + <f5> desktop travelling through stars.

check "Stars" in ccsm "extras"

4 fireflies toggle stars on/off with <super> + <f7> multi-coloured fireflies in your desktop

check "Fireflies" in ccsm "extras"

5 spin cube left <ctrl> + <alt> + <left_arrow> check "cube" and "rotate cube" in ccsm "desktop"
6 spin cube right <ctrl> + <alt> + <right_arrow> check "cube" and "rotate cube" in ccsm "desktop"
7 spin cube to specific workspace left click mouse on specific workspace in workspace selector (bottom right) check "cube" and "rotate cube" in ccsm "desktop"
8 zoom out hold <ctrl> + <alt> and tap and release <down_arrow>

use <left_arrow> or <right_arrow> to find workspace
then release <ctrl> + <alt> to zoom in

9 rotate cube in any direction hold <ctrl> + <alt> and hold left mouse button and move mouse check "cube" and "rotate cube" in ccsm "desktop"
10 animate aquarium "inside" cube no specific keys: view aquarium when rotating cube check "Cube Atlantis" in ccsm "Effects"
11 Earth globe inside cube with starry night sky skydome no specific keys: view Earth when rotating cube check "Earth" in ccsm "Effects"

Appendix-1: compiz_position script

Example script for positioning mate-terminal, gkrellm, chrome and firefox on specific workspaces on the compiz 3D desktop.
Follows on from example MATE_initrc script example in: Configuring_autostart_with_MATE_in_Mageia

#!/usr/bin/bash

# Name		compiz_position
		version=13
# Purpose	Starts compiz (if not already running) and position software windows on Compiz workspaces
#		Follow on from:
#		https://wiki.mageia.org/en/Configuring_autostart_with_MATE_in_Mageia
#		for when compiz in use.
#
#		Positions of windows started with MATE_initrc via autostart
#		are lost when compiz is started because compiz uses a single workspace
#		for 3D shape "workfaces".
#		So, when compiz is started, windows all appear in first workspace/face.
#		"compiz_position" puts windows back in pre-defined position for compiz usage.

# Author	paul[dot]blackburn[at]gmail[dot]com
# Written	2020_04_07
# Updated	Tue 14 Apr 2020 12:36:09 AM BST

# Updates
# 2020_04_13	more portable position and resize mate-terminal on 395, added "Tips"
# 2020_04_11	bugfix on 314: with doit, need to use:  grep  \"compiz\ ccp\" 
# 2020_04_11	tidy up code around starting compiz
# 2020_04_11	bugfix on 310: doit grep for s/compiz\ ccp/compiz\\ ccp/
# 2020_04_10	bugfix: s/maxNF/max_NF/ on line 336
# 2020_04_10	add pause after starting compiz so that $(wmctrl -d) will return correct compiz data
# 2020_04_10	Fix for loop for rotations after positioning
# 2020_04_09	Logs to logfile in ~/logs/
# 2020_04_09	Added ccsm in workspace 2

# Assumptions
#	o compiz installed
#	o wmctrl installed
#	o will move windows to workspace/geos based on MATE_initrc conventions

# Tips
#	o Disable "splash screen" in ccsm: does not work with compiz_position
#	o Determine a window's geometry and size with:
#		sleep 3 && xdotool getwindowfocus getwindowgeometry

# Acknowledgements
#	for rotate function: Shang-Feng Yang
#	https://sfyang-en.blogspot.com/2008/02/rotate-cube-in-compiz-with-wmctrl.html

#LOCAL		code sections tagged #LOCAL for localizations

# functions -------------------------------------------------------------

function rotate() {
# rotate the compiz "cube"

# The target face number (begins with 0)
  let TVPN=${1}%${NF}

  # The X coordinate of the target viewport
  let TVPX=${TVPN}*${WW}

  # Change to the target viewport
  wmctrl -o ${TVPX},0
}

usage() {
        cat <<eeooff
${cmd} starts compiz (if not already running) and re-positions mate-terminal, gkrellm, ccsm, chrome and firefox at pre-defined workspaces (as were in MATE without compiz)

Can also be used to restart compiz.

Please report bugs/suggestions/comments to: ${default_notify}
eeooff

}

fatal() {
        echo "${cmd} fatal: ${1}" >&2
        exit 1
}

error() {
        echo "${cmd} error: ${1}" >&2
}

warning() {
        echo "${cmd} warning: ${1}" >&2
}

tstamp() {
        echo $(date +%Y_%m_%d_at_%H:%M:%S) ${cmd}: ${1}
}

doit() {
        tstamp "${1}"
        eval ${1}

        retcode=$?
        if [ ${retcode} != 0 ]; then
                error "\$?=${retcode}"
        fi
}

elapsed_time () {
        start=${1}
        end=${2}

#       echo debug: elapsed_time ${start} ${end}
        unset x
        unset y

        if [ ${start} = ${end} ]; then
                echo -n "zero seconds"
        fi

        let elapsed_seconds=${end}-${start}
        let days=${elapsed_seconds}/86400
        let days_sec=${days}*86400

        let x=${elapsed_seconds}-${days_sec}
        let hours=${x}/3600
        let hours_sec=${hours}*3600
       
        let x=${days_sec}+${hours_sec}
        let y=${elapsed_seconds}-${x}
        let mins=${y}/60
        let mins_sec=${mins}*60

        let x=${days_sec}+${hours_sec}+${mins_sec}
        let secs=${elapsed_seconds}-${x}

        if [ ${days} != 0 ]; then
                if [ ${days} = 1 ]; then
                        echo -n "1 day "
                else
                        echo -n "${days} days "
                fi
        fi

        if [ ${hours} != 0 ]; then
                if [ ${hours} = 1 ]; then
                        echo -n "1 hour "
                else
                        echo -n "${hours} hours "
                fi
        fi


        if [ ${mins} != 0 ]; then
                if [ ${mins} = 1 ]; then
                        echo -n "1 minute "
                else
                        echo -n "${mins} minutes "
                fi
        fi

        if [ ${secs} != 0 ]; then
                if [ ${secs} = 1 ]; then
                        echo -n "1 second "
                else
                        echo -n "${secs} seconds"
                fi
        fi

        echo
}

trap_cleanup () {                # tidy up on receipt of signal (ctrl-C, etc)
        tstamp "trap_cleanup commenced"

        doit "rm ${lockfile}"

        epoch_now=$(date +%s)
        tstamp "total duration $(elapsed_time ${start_epoch} ${epoch_now})"

        tstamp "trap_cleanup completed"
        exit 1
}

# end functions section

# set initial values ----------------------------------------------------------------------

cmd=$(basename $0)
cmdline="${cmd} $*"
logdir=~/logs
log=${logdir}/${cmd}_log

lockfile=/tmp/${cmd}_lockfile
tempfile=/tmp/${cmd}_tempfile_$$

# Configure the following for your needs: #LOCAL
default_notify=Your.email@wherever.org    # set to email to be notified of errors #LOCAL

# main starts here ------------------------------------------------------------------------

start_epoch=$(date +%s)

# set interrupt signal trap routine

for signal in 1 2 3 15; do
trap "echo \"interrupted by signal ${signal}\"; trap_cleanup; exit 1" ${signal}
done

case "${1}" in
        -? | -help | -usage | --?| --help | --usage )
                usage
                exit
                ;;
esac

mkdir -p ${logdir} 2>/dev/null          # make sure we have a $logdir

echo "stdout and stderr now being written to ${log}+"
exec 4>&2
exec 3>&1
exec 1>${log}+
exec 2>&1

tstamp "commenced $(dirname ${0})/${cmd} version ${version} on $(date '+%a %d %h %y')"

doit "zenity --notification --title ${cmd} --text='${cmd} commenced'"


# sanity checking starts here -----------------------

tstamp "Check we are running on Linux"
os=$(uname)

if [ "${os}" != "Linux" ]; then
        fatal "${os} is not Linux. Bye-bye!"
else
        tstamp "Good news: this is Linux"
fi

failed="false"
essential_command_list="wmctrl compiz"
for command in ${essential_command_list}; do
       tstamp "checking we have essential command: ${command}"
        which ${command} 2>&1 > /dev/null
        if [ $? = 0 ]; then
                tstamp "Good, we have ${command}: $(${command} --version)"
        else
                warning "missing essential command: ${command}"
                warning "Please install ${command} and try again"
                failed="true"
        fi
done

if [ ${failed} = "true" ]; then
	fatal "Unable to continue. Bye."
fi

#LOCAL - If you change the programs started in the autostart section then you need to also update "command_list=" below
tstamp "Checking if we have the commands we need"
command_list="mate-terminal gkrellm /usr/bin/google-chrome-stable ${HOME}/Downloads/firefox/firefox zenity ccsm"

for command in ${command_list}; do
#       tstamp "checking we have ${command} command"
        which ${command} 2>&1 > /dev/null
        if [ $? = 0 ]; then
                tstamp "Good, we have ${command}: $(${command} --version)"
        else
                warning "missing command: ${command}"
                warning "Please install ${command} and try again"
                failed="true"
        fi
done

# end of (most) sanity checking --------------------------------------

# crack command line arguments
while [ ! -z "${1}" ]; do
        case ${1} in
                -notify )
                        shift
                        if [ -z "${1}" ]; then
                                fatal "missing notify email address"
                        else
                                notify=${1}
                        fi
                        ;;
                -notify*)
                        notify=$(echo ${1} | cut -c8-)
                        ;;
                -help | -? | -usage )
                        usage
                        exit
                        ;;
                *)
                        warning "unknown command line argument: ${1}"
                        usage
                        exit 1
                        ;;
        esac
        shift
done

if [ -z "${notify}" ]; then
        notify=${default_notify}
fi

# If we reached here then it is likely we can complete a normal run
# but we need to switch the logfile.
# Start by renaming an existing previous log by adding a date prefix

if [ -s ${log} ]; then
        old_log=$(dirname ${log})/$(date +%Y_%m_%d_at_%H:%M:%S)_$(basename ${log})
        doit "mv -f ${log} ${old_log}    # rename previous log to <date>_log "
fi
doit "mv ${log}+ ${log}    # log cycling"

# processing ---------------------------------------------------------

# Is Compiz running? If not then start it.

need_compiz_started="false"
compiz_pid=""
ps -ef | grep  "compiz\ ccp" | grep -v grep
if [ $? = 0 ]; then
    tstamp "compiz is already running"
else
    tstamp "compiz is not running    starting compiz"
    doit "compiz ccp --replace &"
    doit "ps -ef | grep  \"compiz\ ccp\" | grep -v grep"  
    need_compiz_started="true"
fi
compiz_pid=$(ps -ef | grep "compiz\ ccp" | grep -v grep | awk '{print $2}')
tstamp "compiz pid is: ${compiz_pid}"

if [ "${need_compiz_started}" = "true" ]; then
	doit "sleep 3    # pause for compiz start up"
fi

# initializations ----------------------------------------------------

doit "wmctrl -d    # List all desktops managed by the window manager"

# information about the desktop
INFO=$(wmctrl -d)

# width of the desktop
DW=$(echo "${INFO}"| awk '{sub(/x[0-9]+/, "", $4); print $4}')
tstamp "DW=${DW}"

# width of the workarea
WW=$(echo "${INFO}"| awk '{sub(/x[0-9]+/, "", $9); print $9}')
tstamp "WW=${WW}"

# number of faces on the compiz "cube"
let NF=${DW}/${WW}
tstamp "NF=${NF}"

# limit check for NF (number of faces): if wmctrl not returning compiz specific data (above)
let max_NF=8
if [ "${NF}" -ge "${max_NF}" ]; then
	warning "NF=${NF} throttled to NF=${maxNF}"
	let NF=${maxNF}
fi

# X coordinate of the viewport
CVPX=$(echo "${INFO}" |awk '{sub(/,[0-9]+/, "", $6); print $6}')

# Current number of the face in all faces (begins with 0)
let CVPN=${CVPX}/${WW}




tstamp "processing windows geometries and placement on workspaces"

# geometry for Firefox on 4th face (from MATE_initrc)
firefox_geo="0,160,30,1752,990"
firefox_x=160

#### Compiz has a single super-wide workspace
#### So we compute: x=offset+((WorkspaceNumber-1)*WorkspaceWidth)

# For Firefox on the 4th workspace, compute "firefox_x":
let firefox_x=${firefox_x}+3*${WW}
firefox_geo="0,${firefox_x},30,1754,990"
doit "wmctrl -i -r $(wmctrl -lp | grep "Mozilla Firefox"| awk '{print $1}') -e ${firefox_geo}    # position and resize Mozilla Firefox"


#geometry for Google Chrome on workspace-3 (from MATE_initrc)
chrome_geo="0,150,30,1766,1020"
chrome_x=150

# For Google Chrome on the 3rd workspace, compute "chrome_x":
let chrome_x=${chrome_x}+2*${WW}
chrome_geo="0,${chrome_x},30,1766,1020"
doit "wmctrl -i -r $(wmctrl -lp | grep "Google Chrome" | awk '{print $1}') -e ${chrome_geo}  # position and resize Google Chrome"


# For ccsm on 2nd workspace, compute "ccsm_geo_x":
ccsm_geo="0,280,30,1640,964"
ccsm_geo_x=280
let ccsm_geo_x=${ccsm_geo_x}+${WW}
ccsm_geo="0,${ccsm_geo_x},30,1640,964"
doit "wmctrl -i -r $(wmctrl -lp | grep "CompizConfig Settings Manager" | awk '{print $1}') -e ${ccsm_geo}  # position and resize CCSM"


#Geometry for mate-terminal on 1st workspace
##mate_terminal_geo="154x42+146+30"
##mate_terminal_geo="0,149,30,1556,981"
mate_terminal_geo="0,136,30,1556,960" 

doit "wmctrl -i -r $(wmctrl -lp | grep "$(echo ${USER}@$(hostname | awk -F\. '{print $1}'):)" | awk '{print $1}') -e ${mate_terminal_geo}      # position and resize mate_terminal"

#Geometry for gkrellm on 1st workspace
#gkrellm_geo="+1714+30"
gkrellm_geo="0,1714,30,200,826"
doit "wmctrl -i -r $(wmctrl -lp | grep "gkrellm" | awk '{print $1}') -e ${gkrellm_geo}      # position and resize gkrellm"


doit "zenity --notification --title ${cmd} --text='${cmd} rotating through ${NF} workspaces'"

let i=1
while [ ${i} -le ${NF} ]; do
#	doit "zenity --notification --title ${cmd} --text='${cmd} rotate ${i}'"
	doit "rotate ${i} && sleep 2" 
	let i=${i}+1
done

doit "zenity --notification --title ${cmd} --text='${cmd} completed'"


# tidying up and ending ------------------------------------------------------------------

end_epoch=$(date +%s)

tstamp "total duration $(elapsed_time ${start_epoch} ${end_epoch})"
tstamp "completed"

# Switch stdout and stderr back to report results ONLY if something failed

# Restore stdout and stderr
exec 1>&3
exec 2>&4

# email log if there was a ${failed}
if [ "${failed}" = "true" ]; then
        < ${log} mail -s "${cmd} on $(hostname)" ${notify}
fi

echo log results in ${log}

Appendix-2: example logfile from compiz_position script

mpb@kali:~$ nl /home/mpb/logs/compiz_position_log
     1	2020_04_14_at_00:36:32 compiz_position: commenced bin/compiz_position version 13 on Tue 14 Apr 20
     2	2020_04_14_at_00:36:32 compiz_position: zenity --notification --title compiz_position --text='compiz_position commenced'
     3	2020_04_14_at_00:36:32 compiz_position: Check we are running on Linux
     4	2020_04_14_at_00:36:32 compiz_position: Good news: this is Linux
     5	2020_04_14_at_00:36:32 compiz_position: checking we have essential command: wmctrl
     6	2020_04_14_at_00:36:32 compiz_position: Good, we have wmctrl: 1.07
     7	2020_04_14_at_00:36:32 compiz_position: checking we have essential command: compiz
     8	2020_04_14_at_00:36:32 compiz_position: Good, we have compiz: compiz 0.8.18
     9	2020_04_14_at_00:36:32 compiz_position: Checking if we have the commands we need
    10	2020_04_14_at_00:36:32 compiz_position: Good, we have mate-terminal: MATE Terminal 1.24.0
    11	2020_04_14_at_00:36:32 compiz_position: Good, we have gkrellm: gkrellm 2.3.10
    12	2020_04_14_at_00:36:32 compiz_position: Good, we have /usr/bin/google-chrome-stable: Google Chrome 81.0.4044.92
    13	2020_04_14_at_00:36:32 compiz_position: Good, we have /home/mpb/Downloads/firefox/firefox: Mozilla Firefox 75.0
    14	2020_04_14_at_00:36:32 compiz_position: Good, we have zenity: 3.32.0
    15	Another CCSM instance is already running...
    16	2020_04_14_at_00:36:32 compiz_position: Good, we have ccsm:
    17	2020_04_14_at_00:36:32 compiz_position: mv -f /home/mpb/logs/compiz_position_log /home/mpb/logs/2020_04_14_at_00:36:32_compiz_position_log # rename previous log to <date>_log
    18	2020_04_14_at_00:36:32 compiz_position: mv /home/mpb/logs/compiz_position_log+ /home/mpb/logs/compiz_position_log # log cycling
    19	mpb         4397       1  2 Apr13 pts/4    00:01:08 compiz ccp --replace
    20	2020_04_14_at_00:36:32 compiz_position: compiz is already running
    21	2020_04_14_at_00:36:32 compiz_position: compiz pid is: 4397
    22	2020_04_14_at_00:36:32 compiz_position: wmctrl -d # List all desktops managed by the window manager
    23	0  * DG: 11520x1080  VP: 0,0  WA: 0,28 1920x1027  Workspace 1
    24	2020_04_14_at_00:36:32 compiz_position: DW=11520
    25	2020_04_14_at_00:36:32 compiz_position: WW=1920
    26	2020_04_14_at_00:36:32 compiz_position: NF=6
    27	2020_04_14_at_00:36:32 compiz_position: processing windows geometries and placement on workspaces
    28	2020_04_14_at_00:36:32 compiz_position: wmctrl -i -r 0x04000003 -e 0,5920,30,1754,990 # position and resize Mozilla Firefox
    29	2020_04_14_at_00:36:32 compiz_position: wmctrl -i -r 0x02e00001 -e 0,3990,30,1766,1020 # position and resize Google Chrome
    30	2020_04_14_at_00:36:32 compiz_position: wmctrl -i -r 0x05000007 -e 0,2200,30,1640,964 # position and resize CCSM
    31	2020_04_14_at_00:36:32 compiz_position: wmctrl -i -r 0x0340000b -e 0,136,30,1556,960 # position and resize mate_terminal
    32	2020_04_14_at_00:36:32 compiz_position: wmctrl -i -r 0x02200003 -e 0,1714,30,200,826 # position and resize gkrellm
    33	2020_04_14_at_00:36:32 compiz_position: zenity --notification --title compiz_position --text='compiz_position rotating through 6 workspaces'
    34	2020_04_14_at_00:36:32 compiz_position: rotate 1 && sleep 2
    35	2020_04_14_at_00:36:34 compiz_position: rotate 2 && sleep 2
    36	2020_04_14_at_00:36:36 compiz_position: rotate 3 && sleep 2
    37	2020_04_14_at_00:36:38 compiz_position: rotate 4 && sleep 2
    38	2020_04_14_at_00:36:40 compiz_position: rotate 5 && sleep 2
    39	2020_04_14_at_00:36:42 compiz_position: rotate 6 && sleep 2
    40	2020_04_14_at_00:36:44 compiz_position: zenity --notification --title compiz_position --text='compiz_position completed'
    41	2020_04_14_at_00:36:45 compiz_position: total duration 13 seconds
    42	2020_04_14_at_00:36:45 compiz_position: completed