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 ----