Re: Problem: OOo 1.0.1 not keeping setting upon restart
Hi all,
I have made some adjustments to /usr/bin/openoffice
#!/bin/sh
#
# Wrapper script for openoffice
#
# (C) Peter 'Nidd' Novodvorsky, 2001,2002
# (C) Martin 'empty' Quinson, 2002.
# Modifications by Chris Halls
# This program is free software; you can redistribute it and/or
modify
# it under the terms of the GNU General Public License as published
by
# the Free Software Foundation; either version 2 of the License,
or
# (at your option) any later
version.
#
# This program is distributed in the hope that it will be
useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty
of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU
# General Public License for more
details.
#
# You should have received a copy of the GNU General Public
License
# along with this program; if not, write to the Free
Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
# this string should be exactly as in ~/.sversionrc
set -x
OOVERSION="OpenOffice.org 1.0.1"
##
## Source system configuration file
##
[ -r /etc/openoffice/openoffice.conf ] && .
/etc/openoffice/openoffice.conf
##
## where does OO live for this user ?
##
OOHOME=""
if [ -e ~/.sversionrc ] && grep -q "$OOVERSION" ~/.sversionrc ; then
# already installed for this user (warning, .sversionrc is DOS
encoded)
OOHOME=`grep "^$OOVERSION=" ~/.sversionrc| \
sed "s|^$OOVERSION=file://||" | \
xargs echo`
if [ ! -e $OOHOME ] ; then
echo "I'm confused because I can't find OpenOffice's user files."
echo "Your ~/.sversionrc file tells they should be under $OOHOME,"
echo "but they are not. Please fix the situation manually."
echo "You may want to edit ~/.sversionrc to indicate where is OO"
echo "installed, or remove it if you did remove your installation"
echo "directory manually (you bad one)."
exit 1
fi
fi
echo OOHOME= $OOHOME
##
## Unset SESSION_MANAGER if gnome-session is the session manager
## See http://www.openoffice.org/issues/show_bug.cgi?id=4494
##
SMPID=`echo $SESSION_MANAGER | sed --quiet "s,local.*/,,p"`
if [ -n "$SMPID" ] && [ -L /proc/"$SMPID"/exe ]; then
SESMGR="`readlink -f /proc/$SMPID/exe`"
if [ "$SESMGR" = "/usr/bin/gnome-session" ]; then
echo "Gnome session manager detected - session management
disabled"
unset SESSION_MANAGER
fi
fi
##
## install OO for this user if needed
##
if [ -z "$OOHOME" ] ; then
if [ -e /etc/openoffice/autoresponse.conf ] && \
grep -q DESTINATIONPATH /etc/openoffice/autoresponse.conf ; then
# first install
OOHOME=`grep DESTINATIONPATH /etc/openoffice/autoresponse.conf | \
sed -e 's/DESTINATIONPATH=//' -e "s|<home>|$HOME|"`
if [ -d "$OOHOME" ]; then
echo "openoffice.org: You have no entry for $OOVERSION in
~/.sversionrc, "
echo "yet the directory $OOHOME exists."
echo "Please remove $OOHOME and try again."
exit 1
fi
echo "running openoffice.org setup..."
if ! /usr/lib/openoffice/program/setup
-R:/etc/openoffice/autoresponse.conf ; then
echo "setup failed.. abort"
exit 1
fi
echo "Setup complete. Running openoffice.org..."
else
echo "openoffice.org: Damnit! I can't find OpenOffice's user files.
Did you break"
echo "the /etc/openoffice/autoresponse.conf file manually ?"
echo "This file should contain DESTINATIONPATH"
exit 1
fi
fi
##
## If no file is specified on the command line, which application to
start?
## The wrapper can be called from several links in /usr/bin
##
if [ $# = 0 ]; then
case `basename $0` in
oocalc) set -- private:factory/scalc;;
oodraw) set -- private:factory/sdraw;;
ooimpress) set -- private:factory/simpress;;
oomath) set -- private:factory/smath;;
oowriter) set -- private:factory/swriter;;
esac
fi
##
##
## Change the config files to conform to current locale used
##
# Fix some variable to make the paths shorter in the rest
LINGFILE="$OOHOME/user/config/registry/instance/org/openoffice/Office/Linguistic.xml"
SETUPFILE="$OOHOME/user/config/registry/instance/org/openoffice/Setup.xml"
# Search the right locale
OLDLOCALE=""
if [ -e $LINGFILE ] ; then
OLDLOCALE=`grep 'DefaultLocale cfg' $LINGFILE|sed 's/<[^>]*>//g'|sed
's/[[:blank:]]//g'`
fi
if [ -z $OLDLOCALE ]; then OLDLOCALE="en-US"; fi
if [ "x$OLDLOCALE" = "xC" ]; then OLDLOCALE="en-US"; fi
LOCALE=$LC_ALL; echo LC_ALL =
$LC_ALL;
if [ -z $LOCALE ] ; then LOCALE="$LC_MESSAGES"; echo LC_MESSAGES =
$LC_MESSAGES; fi
if [ -z $LOCALE ] ; then LOCALE="$LANG"; echo LANG =
$LANG; fi
if [ -z $LOCALE ] ; then LOCALE="en-US"; fi
if [ "x$LOCALE" = "xC" ] ; then LOCALE="en-US"; fi
#### the problem startst here, the original script does treat de_DE and
de_DE@euro as different locales. The follwong hack cures the "euro"
problem.
#####
if [ $LOCALE != $OLDLOCALE ] && [ $LOCALE != $OLDLOCALE@euro ]; then
echo locale eq
else echo locale different
fi
# Change instdb.ins
# cp $OOHOME/instdb.ins $OOHOME/instdb.ins.$OLDLOCALE
# sed "s/>$OLDLOCALE</>$LOCALE</" $OOHOME/instdb.ins.$OLDLOCALE >
$OOHOME/instdb.ins
# Create Linguistic.xml if don't exists
# if [ ! -e $LINGFILE.$OLDLOCALE ] ; then
# get a default one, and change en-US to OLDLOCALE inside. I guess
this is a noop, but I'm not sure
# sed "s/>en-US</>$OLDLOCALE</" \
# <
/usr/lib/openoffice/share/config/registry/instance/org/openoffice/Office/Linguistic.xml \
# > $LINGFILE.$OLDLOCALE
# fi
# change Linguistic.xml
# sed "s/>$OLDLOCALE</>$LOCALE</" $LINGFILE.$OLDLOCALE > $LINGFILE
# Change Setup.xml
# if grep -q '<ooLocale cfg:type' $SETUPFILE ; then
# cp $SETUPFILE $SETUPFILE.$OLDLOCALE
# sed "s/>$OLDLOCALE</>$LOCALE</" $SETUPFILE.$OLDLOCALE > $SETUPFILE
# else # ooLocale entry does not exists in Setup.xml
# cp $SETUPFILE $SETUPFILE.tmp
# cat $SETUPFILE.tmp | \
# perl -e "while (<>) { /<Office>/ && print \"<L10N>\n<ooLocale
cfg:type=\\\"string\\\">$LOCALE</ooLocale>\n</L10N>\n\";print \$_;}" > \
# $SETUPFILE
# this perl command is to add a <L10N> section if it does not
exists.
# On my machine, it produce the following patch:
# <Setup state="modified" cfg:package="org.openoffice"
xmlns="http://openoffice.org/2000/registry/components/Setup"
xmlns:cfg="http://openoffice.org/2000/registry/instance"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
#+ <L10N>
#+ <ooLocale cfg:type="string">fr_FR@euro</ooLocale>
#+ </L10N>
# <Office>
# rm $SETUPFILE.tmp
# fi # change Setup.xml
#fi # LOCALE != OLDLOCALE
## Previous dead installation?
[ -d $HOME/.openoffice/user ] && echo "Warning: you have a user settings
directory from 1.0.0 in ~/.openoffice/user - this is no longer used"
##
## That's it. Launch the beast (with the given args)
##
exec "$OOHOME/soffice" "$@"
## Changelog
# 07/10 challs
# * use 1.0.1 directory and improve error checking
# 07/02 challs
# * use readlink in /proc/PID/exe to get
# real session manager name
# 06/12 challs
# * merge into main package
# * change $@ to "$@"
# * source configuration file:
# /etc/openoffice/openoffice.conf
# 06/12 mquinson
# * strace only when DEBUG is set to yes
# * readd the $@ to pass the args to soffice
# 06/06 mquinson
# * Make sure the OLDLOCALE is never empty
# * handle the case where the locale is C
#### this is the "/usr/bin/openoffice" (modified version) output
cd /usr/bin/
openoffice
+ OOVERSION=OpenOffice.org 1.0.1
+ '[' -r /etc/openoffice/openoffice.conf ']'
+ OOHOME=
+ '[' -e /home/jlueters/.sversionrc ']'
+ grep -q 'OpenOffice.org 1.0.1' /home/jlueters/.sversionrc
++ sed 's|^OpenOffice.org 1.0.1=file://||'
++ grep '^OpenOffice.org 1.0.1=' /home/jlueters/.sversionrc
++ xargs echo
+ OOHOME=/home/jlueters/.openoffice/1.0.1
+ '[' '!' -e /home/jlueters/.openoffice/1.0.1 ']'
+ echo OOHOME= /home/jlueters/.openoffice/1.0.1
OOHOME= /home/jlueters/.openoffice/1.0.1
++ echo local/nomade:/tmp/.ICE-unix/22513
++ sed --quiet 's,local.*/,,p'
+ SMPID=22513
+ '[' -n 22513 ']'
+ '[' -L /proc/22513/exe ']'
++ readlink -f /proc/22513/exe
+ SESMGR=/os/usr/bin/gnome-session
+ '[' /os/usr/bin/gnome-session = /usr/bin/gnome-session ']'
+ '[' -z /home/jlueters/.openoffice/1.0.1 ']'
+ '[' 0 = 0 ']'
++ basename /usr/bin/openoffice
+
LINGFILE=/home/jlueters/.openoffice/1.0.1/user/config/registry/instance/org/openoffice/Office/Linguistic.xml
+
SETUPFILE=/home/jlueters/.openoffice/1.0.1/user/config/registry/instance/org/openoffice/Setup.xml
+ OLDLOCALE=
+ '[' -e
/home/jlueters/.openoffice/1.0.1/user/config/registry/instance/org/openoffice/Office/Linguistic.xml ']'
++ grep 'DefaultLocale cfg'
/home/jlueters/.openoffice/1.0.1/user/config/registry/instance/org/openoffice/Office/Linguistic.xml
++ sed 's/<[^>]*>//g'
++ sed 's/[[:blank:]]//g'
+ OLDLOCALE=de-DE
+ '[' -z de-DE ']'
+ '[' xde-DE = xC ']'
+ LOCALE=
+ echo LC_ALL =
LC_ALL =
+ '[' -z ']'
+ LOCALE=de_DE@euro
+ echo LC_MESSAGES = de_DE@euro
LC_MESSAGES = de_DE@euro
+ '[' -z de_DE@euro ']'
+ '[' -z de_DE@euro ']'
+ '[' xde_DE@euro = xC ']'
+ '[' de_DE@euro '!=' de-DE ']'
+ '[' de_DE@euro '!=' de-DE@euro ']'
+ echo locale eq
locale eq
+ '[' -d /home/jlueters/.openoffice/user ']'
+ exec /home/jlueters/.openoffice/1.0.1/soffice
--
Juergen Lueters
Vom Senator für Wirtschaft, Mittelstand, Technologie
und Europaangelegenheiten der Freien Hansestadt Bremen
öffentlich bestellter und vereidigter Sachverständiger
für Systeme und Anwendungen der Informationsverarbeitung
Intranet Engineering GmbH
Inselstr. 18
D-28207 Bremen
Tel.: +49-(0)421-493990
E-Mail jlueters@intranet-engineering.de
http://www.intranet-engineering.de
http://www.sv.lueters.de
Reply to: