gnome.wmaker.inst works well!

Paul Johnson <[email protected]> Tue, 08 Nov 2005 10:49:29 -0600
Newsgroups gmane.compw.window-managers.windowmaker.user
Message-ID <[email protected]>
I've found that migrating to WindowMaker is just too complicated for 
ordinary people (non programmers) who use Fedora Linux and/or the Gnome 
desktop.  After some more research, I believe I have COMPLETELY SOLVED 
all transition complications.  All users need to do is open a terminal, 
run "gnome.wmaker.inst", and viola!  Metacity is in ancient history.

The attached script adds elements to "wmaker.inst" that

1) remove metacity from the gnome session
2) install the WindowMaker files (as wmaker.inst does)
3) start Window Maker
4) put wmaker into the startup configuration of Gnome session

Now WindowMaker is installed, and running. And after the user logs out 
and logs in again, then WindowMaker is running again.

I would urge the packagers for WindowMaker of doing something like this. 
  Perhaps one of the shell scripting experts will see a way to integrate 
these things into wmaker.inst.

It is not necessary to check in .xinitrc or .Xclients or change them, so 
I commented that part out.

PJ

ps: I found that the WindowMaker RPMS in the Fedora Extras project are 
broken for workspace-specific backgrounds (wmsetbg -w causes wmaker 
segfault), but that the removal of the x86_64 bit patch and a little 
fiddling of the compiler flags allows the RPM to build with gcc32.  I 
pushed my gnome.wmaker.inst script as well as some customizations for 
menus and dual monitor background management into the RPMS that I built 
for our computer lab. In case you want to try them, I'm uploading to

http://lark.cc.ku.edu/~pauljohn/WindowManagers/

The newest version is:

WindowMaker-0.92.0-8gcc32.i386.rpm

I took out my config tips for WindowMaker version 0.14. Hope you don't 
miss those :)


-- 
Paul E. Johnson                       email: [email protected]
Dept. of Political Science            http://lark.cc.ku.edu/~pauljohn
1541 Lilac Lane, Rm 504
University of Kansas                  Office: (785) 864-9086
Lawrence, Kansas 66044-3177           FAX: (785) 864-5700

_______________________________________________
INFO: https://windowmaker.org/lists/listinfo/wm-user
ARCHIVE: https://windowmaker.org/lists/archive/wm-user/
FAQ: http://windowmaker.org/faq.html
gnome.wmaker.inst (text/plain, 9.8 KB)
#!/bin/sh
#
# Install Window Maker for the current user
#

# xx herbert
if test "x$1" = "x--batch" ; then
  BATCH="1"
else
  BATCH=""
fi
# /xx herbert


#pj
gconftool-2  --type bool --set /apps/nautilus/preferences/show_desktop false
#

# name of menu file we install (menu, plmenu)
inst_menu=""

LOCALE=$LANG
if [ -z "$LOCALE" ]; then
	LOCALE=$LC_ALL
fi

# directory where system wide configuration is stored
GLOBALDIR="/usr/share/WindowMaker"
GLOBALDEFDIR="/etc/WindowMaker"

USERDIR=$HOME

VERSION="0.92.0"

BINDIR="/usr/bin"

make_dir() {
	mkdir $1
	chmod +rwx $1
}

make_script() {
	ISCRIPT=$1

	cat << EOF >> $ISCRIPT
# Window Maker default X session startup script 

PATH="\$PATH:$BINDIR"

# If you login from xdm, uncomment this to make error messages appear
# in the console window.
#
# tail -f $HOME/.xsession-errors > /dev/console &

exec wmaker

EOF
	chmod +rx $ISCRIPT
}

make_session_starter() {
       MYSCRIPT=$1

      cat << EOF >> $MYSCRIPT


[Default]
num_clients=1
0,RestartStyleHint=3
0,Priority=50
0,RestartCommand=wmaker
0,Program=wmaker

EOF
}

#
# Copy files considering special cases
#
copy() {
	source=$1
	target=$2
	file=`basename $source`
	rm -f $target
	if [ "$file" = "WindowMaker" ]; then
		sed -e "s|~/GNUstep|$GSDIR|g" $source > $target
	elif [ "$file" = "WMRootMenu" ]; then
		if [ "$LOCALE" ]; then
            	    if [ -f $GLOBALDIR/plmenu.$LOCALE ]; then
                	source=$GLOBALDIR/plmenu.$LOCALE
            	    elif [ -f $GLOBALDIR/plmenu.${LOCALE%.*} ]; then
                	source=$GLOBALDIR/plmenu.${LOCALE%.*}
            	    elif [ -f $GLOBALDIR/plmenu.${LOCALE%_*} ]; then
                	source=$GLOBALDIR/plmenu.${LOCALE%_*}
		    elif [ -f $GLOBALDIR/menu.${LOCALE%_*} ]; then
			source=$GLOBALDIR/menu.${LOCALE%_*}
		    else
			source=$GLOBALDIR/plmenu 
            	    fi
        	else
            	    source=$GLOBALDIR/plmenu
        	fi
		sed -e "s:#wmdatadir#:$GLOBALDIR:g" \
			$source > $GSDIR/Defaults/WMRootMenu
	else
		if test "x$GNUSTEP_USER_ROOT" = "x"; then
			sed -e "s:#wmdatadir#:$GLOBALDIR:g" \
					$source > $target
		else
			sed -e "s|\$HOME/GNUstep|$GSDIR|g" \
				-e "s:#wmdatadir#:$GLOBALDIR:g" \
					$source > $target
		fi
	fi
}



echo "Installing WindowMaker $VERSION for current user..."


if [ ! -d $GLOBALDIR ]; then
      echo "Could not find global data files"
      echo "Make sure you have installed Window Maker correctly"
      exit 1
fi

if [ ! -d $GLOBALDEFDIR ]; then
      echo "Could not find global configurations files"
      echo "Make sure you have installed Window Maker correctly"
      exit 1
fi

if [ ! -d "$USERDIR" ]; then
      echo "Could not find user directory $USERDIR"
      exit 1
fi


if test "x$GNUSTEP_USER_ROOT" = "x"; then
	cd $USERDIR
	GSDIR=$USERDIR/GNUstep
	if [ ! -d $GSDIR ]; then
		echo "Creating $GSDIR user directory"
		make_dir $GSDIR
	fi
else
	GSDIR=$GNUSTEP_USER_ROOT
	if [ ! -d $GSDIR ]; then
		echo "Directory specified in GNUSTEP_USER_ROOT environment variable does not exist"
		exit 1
	fi
	cd $GSDIR
	cd ..
fi


if [ ! -d "$GSDIR/Defaults" ]; then
	make_dir $GSDIR/Defaults
fi

echo "Copying defaults database..."

FILES=`(cd $GLOBALDEFDIR;ls -d *)`
all=""
for i in $FILES; do
	if [ ! -d $GLOBALDEFDIR/$i ]; then
		if [ -f $GSDIR/Defaults/$i -a -z "$BATCH" ]; then
			echo "The configuration file \"$i\" already exists in your defaults database."
			echo "Do you wish to replace it? <y/n/a> [n] $all"
			if [ "$all" != "a" ]; then
				read foo
				if [ "$foo" = "a" -o "$foo" = "A" ]; then
					all="a"
				fi
			fi
			if [ "$foo" = "y" -o "$foo" = "Y" -o "$all" = "a" ]; then
				copy $GLOBALDEFDIR/$i $GSDIR/Defaults/$i
			fi
		else
			copy $GLOBALDEFDIR/$i $GSDIR/Defaults/$i
		fi
	fi
done


if [ ! -d "$GSDIR/Library/Icons/" ]; then
      echo "Creating icon library directory $GSDIR/Library/Icons"
      if [ ! -d $GSDIR/Library ]; then
              make_dir $GSDIR/Library
      fi
      make_dir $GSDIR/Library/Icons
fi


if [ ! -d "$GSDIR/Library/WindowMaker/" ]; then
      echo "Creating WindowMaker data library directory $GSDIR/Library/WindowMaker"
      if [ ! -d $GSDIR/Library ]; then
              make_dir $GSDIR/Library
      fi
      make_dir $GSDIR/Library/WindowMaker
fi

if [ ! -d "$GSDIR/Library/WindowMaker/Styles" ]; then
	echo "Creating style library $GSDIR/Library/WindowMaker/Styles"
	make_dir $GSDIR/Library/WindowMaker/Styles
fi


if [ ! -d "$GSDIR/Library/WindowMaker/Themes" ]; then
	echo "Creating theme library $GSDIR/Library/WindowMaker/Themes"
	make_dir  $GSDIR/Library/WindowMaker/Themes
fi


if [ ! -d "$GSDIR/Library/WindowMaker/Backgrounds" ]; then
	echo "Creating bg image library $GSDIR/Library/WindowMaker/Backgrounds"
	make_dir  $GSDIR/Library/WindowMaker/Backgrounds
else
	echo "Default Backgrounds directory already exists. Skipping..."
fi


if [ ! -d "$GSDIR/Library/WindowMaker/IconSets" ]; then
	echo "Creating icon setup library $GSDIR/Library/WindowMaker/IconSets"
	make_dir  $GSDIR/Library/WindowMaker/IconSets
else
	echo "Default IconSets directory already exists. Skipping..."
fi


if [ ! -d "$GSDIR/Library/WindowMaker/Pixmaps" ]; then
	echo "Creating pixmap library $GSDIR/Library/WindowMaker/Pixmaps"
	make_dir  $GSDIR/Library/WindowMaker/Pixmaps
else
	echo "Default Pixmaps directory already exists. Skipping..."
fi


if [ ! -d "$GSDIR/Library/WindowMaker/Sounds" ]; then
	echo "Creating sound library $GSDIR/Library/WindowMaker/Sounds"
	make_dir  $GSDIR/Library/WindowMaker/Sounds
else
	echo "Default Sounds directory already exists. Skipping..."
fi


if [ ! -d "$GSDIR/Library/WindowMaker/SoundSets" ]; then
	echo "Creating sound set library $GSDIR/Library/WindowMaker/SoundSets"
	make_dir  $GSDIR/Library/WindowMaker/SoundSets
else
	echo "Default SoundSets directory already exists. Skipping..."
fi


if [ ! -d "$GSDIR/Library/WindowMaker/CachedPixmaps" ]; then
	make_dir $GSDIR/Library/WindowMaker/CachedPixmaps
fi

if [ ! -d "$GSDIR/Library/WindowMaker/WPrefs" ]; then
	make_dir $GSDIR/Library/WindowMaker/WPrefs
fi

if test -z "" ; then
FILES=`(cd $GLOBALDIR; ls menu menu.* plmenu plmenu.?? wmmacros)`
for i in $FILES; do
# xx herbert
	if [ -f "$GSDIR/Library/WindowMaker/$i" -a -z "$BATCH" ]; then
# /xx herbert
		echo "The file \"$i\" already exists in $GSDIR/Library/WindowMaker"
		echo "Do you wish to replace it? <y/n/a> [n] $all"
		if [ "$all" != "a" ]; then
			read foo
			if [ "$foo" = "a" -o "$foo" = "A" ]; then
				all="a"
			fi
		fi
		if [ "$foo" = "y" -o "$foo" = "Y" -o "$foo" = "a" ]; then
			copy $GLOBALDIR/$i $GSDIR/Library/WindowMaker/$i
		fi
	else
		copy $GLOBALDIR/$i $GSDIR/Library/WindowMaker/$i
	fi
done
fi

cp $GLOBALDIR/README.themes $GSDIR/Library/WindowMaker 
cp $GLOBALDIR/README $GSDIR/Library/WindowMaker

test -f ~$GSDIR/Library/WindowMaker/autostart || \
    cp $GLOBALDIR/autostart.sh $GSDIR/Library/WindowMaker/autostart
chmod +rx $GSDIR/Library/WindowMaker/autostart

test -f ~$GSDIR/Library/WindowMaker/exitscript || \
    cp $GLOBALDIR/exitscript.sh $GSDIR/Library/WindowMaker/exitscript
chmod +rx $GSDIR/Library/WindowMaker/exitscript



# pj
# if there is a metacity running now, kill it and 
# try to remove it from the gnome-session

mcpsvalue=""; 
mcpsvalue=`pgrep metacity`;
if test -n "$mcpsvalue"; then
  echo "Trying to kill session"
  gnome-session-remove metacity
 # kill -9 "$mcpsvalue"
fi

# waiting to make sure session clears
sleep 2 


 
# run wmaker; Is proper to background this? 
wmaker & 

# pj


# xx herbert
if test -n "$BATCH" ; then
  echo "Installation Finished"
  exit 0
fi
# /xx herbert


#
#######################

DATE=`date +%b%d.%T`

show_end_message() {

echo
echo "Installation Finished"
echo
if test -z "" ; then
 echo "There are menus in 2 different file formats. The plain text format and"
 echo "the property list format. The plain text format is more flexible, but"
 echo "the menu in the property list format can be edited graphically. The"
 echo "menu that will be used by default is the property list one. Read"
 echo "    $GSDIR/Library/WindowMaker/README"
 echo "for information on how to change it."
    if [ "${inst_menu%.*}" = "menu" ]; then
 echo "However, since you have locale set to $LOCALE and plmenu for such locale"
 echo "was not found, your WMRootMenu contains path to text formated menu:"
 echo "    $GSDIR/Library/WindowMaker/$inst_menu"
    fi
else
 echo "Your copy of Window Maker is configured especially for KDE."
 echo "Window Maker application menus are not available."
fi
}

#wmaker_found=0
#for xinit in .xinitrc .Xclients .xsession; do
#     test ! -f "$HOME/$xinit" && continue
#     res="`grep wmaker $HOME/$xinit`"
#     if test "x$res" != x; then
#     	wmaker_found=1
#	break
#     fi
#done
#if test $wmaker_found = 1; then
#	echo "Found Window Maker to already be your default window manager."
#	show_end_message
#	exit 0
#fi

#pj: don't bother looking in .xinitrc, since gnome-session is running.
# just set the default wm and hope it sticks!

gconftool-2 --type=string --set /desktop/gnome/applications/window_manager/default wmaker

gconftool-2 --type=string --set /desktop/gnome/applications/window_manager/current wmaker

make_session_starter $HOME/.gnome2/session-manual


echo "When you exit Gnome, be sure to check the box to \"save settings\""
echo "in order to cause Window Maker (\"wmaker\") to be your default"
echo "window manager"


exit 0

trap "show_end_message;exit" 2

#echo
#echo "Now the .xinitrc, .Xclients or .xsession script must be updated so that"
#echo "it calls wmaker when you start an X session."
#echo "Type the name of the file that must be changed (normally .xinitrc)."
#echo "If the file already exists, it will be backed up with a .old.$DATE "
#echo "extension"
#echo "If you want to edit it by hand, hit <Control>-C now."
#read file

#if test "x$file" = "x"; then
#	echo "Using .xinitrc as a default value"
#	file=.xinitrc
#fi

#if [ -f $USERDIR/$file ]; then
#	mv $USERDIR/$file $USERDIR/$file.old.$DATE
#fi

#make_script $USERDIR/$file

show_end_message