[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: