Bug#471738: compiz-core: does not start gtk-window-decorator on XFCE
I just upgraded from Etch to Sid, and was playing with
the same version of 'compiz' as the OP. I also prefer
XFCE, and ran into the same problem with 'compiz
--replace' not being able to run
'gtk-window-decorator' (from pkg 'compiz-gtk') because
the script requires an environment variable that will
only exist if the user is running Gnome. (Some of)
the offending code is near the end of the script:
# start the gtk-window-decorator if present
if [ -x ${COMPIZ_BIN_PATH}emerald ] &&
[ "$USE_EMERALD" = "yes" ]; then
verbose "Starting emerald\n"
${COMPIZ_BIN_PATH}emerald --replace &
elif [ -x ${COMPIZ_BIN_PATH}gtk-window-decorator ]
&& [ -n "$GNOME_DESKTOP_SESSION_ID" ]; then
verbose "Starting gtk-window-decorator\n"
${COMPIZ_BIN_PATH}gtk-window-decorator \
--replace &
elif [ -x ${COMPIZ_BIN_PATH}kde-window-decorator ]
&& [ -n "$KDE_FULL_SESSION" ]; then
verbose "Starting kde-window-decorator\n"
${COMPIZ_BIN_PATH}kde-window-decorator \
--replace &
FALLBACKWM="${KWIN}"
fi
XFCE users will not have GNOME_SESSION_DESKTOP_ID in
their environment, so the '/usr/bin/compiz' script
packaged with 'compiz-core' will not work for them.
Another problem for XFCE users, adding insult to
injury, is that the script does not provide a fall
back window manager in the event that it fails:
KWIN="/usr/bin/kwin"
METACITY="/usr/bin/metacity"
[...]
FALLBACKWM="${METACITY}"
This is a purely Gnome-centric assumption, and a hack
provided for KDE users is clearly visible in the
"elif" block above. Unfortunately, XFCE users have
neither '/usr/bin/metacity' nor '/usr/bin/kwin'
installed, so after running 'compiz --replace &' they
are left with decoration-less windows and no window
manager!
The OP provided a diff with a fix like this:
+elif [ -x ${COMPIZ_BIN_PATH}gtk-window-decorator ]\
&& [ "$DESKTOP_SESSION" = "xfce4" ]; then
+ verbose "Starting gtk-window-decorator\n"
+ ${COMPIZ_BIN_PATH}gtk-window-decorator \
--replace &
I don't see any DESKTOP_SESSION variable in my
environment, but I _do_ see GNOME_SESSION_DESKTOP_ID
in my user environment on my other box, so this fix
cannot work unless DESKTOP_SESSION is temporarily
defined as "xfce4" in the scripts that start XFCE.
I didn't see a clear way to allow the script to
determine that XFCE was running except to grep for
'xfce' in the output of 'ps -A'. Since I know what I
have on my own machine, I hacked the 'compiz' script
to work temporarily -- since I'm just temporarily
taking 'compiz' for a test-drive, and will probably
uninstall all of it pretty soon. I have attached a
diff for my own temporary hack.
Maybe 3 separate scripts -- 'compiz.gnome',
'compiz.kde', and 'compiz.xfce' -- would server users
better? Possibly, they could be provided by 3 small
virtual packages which drag in only those dependencies
needed for each kind of desktop environment?
HTH,
Dave Witbrodt
*** compiz.orig 2008-04-09 09:39:32.000000000 -0400
--- compiz 2008-04-09 09:58:24.000000000 -0400
***************
*** 47,53 ****
# For detecting what driver is in use, the + is for one or more /'s
XORG_DRIVER_PATH="/usr/lib/xorg/modules/drivers/+"
! FALLBACKWM="${METACITY}"
FALLBACKWM_OPTIONS="--replace $@"
# Driver whitelist
--- 47,54 ----
# For detecting what driver is in use, the + is for one or more /'s
XORG_DRIVER_PATH="/usr/lib/xorg/modules/drivers/+"
! # FALLBACKWM="${METACITY}"
! FALLBACKWM="/usr/bin/xfwm4"
FALLBACKWM_OPTIONS="--replace $@"
# Driver whitelist
***************
*** 382,394 ****
verbose "Dry run finished: everything should work with regards to Compiz and 3D.\n"
exit 0;
fi
! # start the gtk-window-decorator if present
if [ -x ${COMPIZ_BIN_PATH}emerald ] && [ "$USE_EMERALD" = "yes" ]; then
verbose "Starting emerald\n"
${COMPIZ_BIN_PATH}emerald --replace &
! elif [ -x ${COMPIZ_BIN_PATH}gtk-window-decorator ] && [ -n "$GNOME_DESKTOP_SESSION_ID" ]; then
verbose "Starting gtk-window-decorator\n"
${COMPIZ_BIN_PATH}gtk-window-decorator --replace &
elif [ -x ${COMPIZ_BIN_PATH}kde-window-decorator ] && [ -n "$KDE_FULL_SESSION" ]; then
verbose "Starting kde-window-decorator\n"
${COMPIZ_BIN_PATH}kde-window-decorator --replace &
--- 383,400 ----
verbose "Dry run finished: everything should work with regards to Compiz and 3D.\n"
exit 0;
fi
!
! # start emerald if present
if [ -x ${COMPIZ_BIN_PATH}emerald ] && [ "$USE_EMERALD" = "yes" ]; then
verbose "Starting emerald\n"
${COMPIZ_BIN_PATH}emerald --replace &
!
! # start the gtk-window-decorator if present
! elif [ -x ${COMPIZ_BIN_PATH}gtk-window-decorator ]; then
verbose "Starting gtk-window-decorator\n"
${COMPIZ_BIN_PATH}gtk-window-decorator --replace &
+
+ # start the kde-window-decorator if present
elif [ -x ${COMPIZ_BIN_PATH}kde-window-decorator ] && [ -n "$KDE_FULL_SESSION" ]; then
verbose "Starting kde-window-decorator\n"
${COMPIZ_BIN_PATH}kde-window-decorator --replace &
***************
*** 396,399 ****
fi
${COMPIZ_BIN_PATH}${COMPIZ_NAME} $COMPIZ_OPTIONS "$@" $COMPIZ_PLUGINS || exec $FALLBACKWM $FALLBACKWM_OPTIONS
-
--- 402,404 ----
Reply to: