The actual bug is an interaction with chvt, which is the first thing pm-utils does. One has to get in before chvt and invoke metacity. One way to do that is something like this file, which would go in /etc/pm/config.d/00-compiz-stop
# override the real chvt to stop compiz before doing anything
chvt() {
# invoke metacity as user "dave"
sudo -b -H -u dave XAUTHORITY=/home/dave/.Xauthority DISPLAY=:0 metacity --replace gconf
# wait until compiz.real actually dies
while pgrep compiz.real; do sleep 0.1; done
# forget this function definition
unset -f chvt
# call the real chvt
chvt "$1"
}
The above is a proof-of-concept hack. Tomorrow I should have a "real" version that also properly restores compiz on all the screens where it has been killed.
The actual bug is an interaction with chvt, which is the first thing pm-utils does. One has to get in before chvt and invoke metacity. One way to do that is something like this file, which would go in /etc/pm/ config. d/00-compiz- stop
# override the real chvt to stop compiz before doing anything /home/dave/ .Xauthority DISPLAY=:0 metacity --replace gconf
chvt() {
# invoke metacity as user "dave"
sudo -b -H -u dave XAUTHORITY=
# wait until compiz.real actually dies
while pgrep compiz.real; do sleep 0.1; done
# forget this function definition
unset -f chvt
# call the real chvt
chvt "$1"
}
The above is a proof-of-concept hack. Tomorrow I should have a "real" version that also properly restores compiz on all the screens where it has been killed.