discuss-gnustep
[Top][All Lists]
Advanced

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

Summary: Latest GNUstep/Etoile on Solaris non-root user problem


From: Andreas Höschler
Subject: Summary: Latest GNUstep/Etoile on Solaris non-root user problem
Date: Fri, 3 Aug 2007 09:50:19 +0200

Hi all,

I got this problem sorted out. It had (of course) nothing to do with Solaris but with wrong file permissions. Here is the long story:

***************************************************************************************************************************
Note, I am installing as root for Etoile to be used by all users:

cd /usr/src
ls -l
total 104704
-rw-r--r-- 1 root root 53565440 Aug 3 09:01 etoile-0.2.tar

I didn' t see in the first place that these file permissions are rather uncommon (never seen this before in any sources tar archive I downloaded).

tar xvf etoile-0.2.tar
ls -l
total 104706
drwx--x--x 8 502 502 512 Jul 28 21:43 Etoile-0.2
-rw-r--r-- 1 root root 53565440 Aug 3 09:01 etoile-0.2.tar

ls -l Etoile-0.2/
-rw------- 1 502 502 2672 Jul 28 21:38 ANNOUNCE
drwx--x--x 3 502 502 512 Jul 28 19:18 Build
drwx--x--x 8 502 502 512 Jul 28 19:19 Bundles
-rw------- 1 502 502 16902 Jul 28 19:19 ChangeLog
drwx--x--x 19 502 502 512 Jul 28 19:18 Frameworks
-rw------- 1 502 502 1406 Jul 28 19:19 GNUmakefile
-rw------- 1 502 502 5800 Jul 28 19:19 INSTALL
-rw------- 1 502 502 1527 Jul 28 19:19 INSTALL.Ubuntu
drwx--x--x 4 502 502 512 Jul 28 19:19 Languages
-rw------- 1 502 502 2179 Jul 28 19:19 README
drwx--x--x 5 502 502 512 Jul 28 19:19 Services
-rw------- 1 502 502 9167 Jul 28 19:19 etoile.make
-rwx------ 1 502 502 6138 Jul 28 19:19 setdown.sh
-rwx------ 1 502 502 9819 Jul 28 19:19 setup.sh

Someone has a rather uncommon umask here. :-) This made some of the files/resources of the installed stuff unreadable by a normal user.

NSApplication.m:

- (void) _init
{
...
initialize_gnustep_backend();

/* Load user-defined bundles */
gsapp_user_bundles();

/* Connect to our window server. */
srv = [GSDisplayServer serverWithAttributes: nil];
RETAIN(srv);
[GSDisplayServer setCurrentServer: srv];
...
}

[GSDisplayServer setCurrentServer: srv] was never called since gsapp_user_bundles() raised an exception.

gsapp_user_bundles(void)
{
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
NSArray *array = [defs arrayForKey:@"GSAppKitUserBundles"];
int i, c = [array count];
if (array == nil || c == 0) return;
NSLog(@"Loading %d user defined AppKit bundles", c);
for (i = 0; i < c; i++)
{
NSString *path = [array objectAtIndex:i];
NSLog(@"Trying %@ ...", path);
NS_DURING
NSBundle *bundle = [NSBundle bundleWithPath:path];
if (bundle)
{
NSLog(@"Loading...");
[[[bundle principalClass] alloc] init]; // <----- Camaelon raised an exception when accessing resources (unreadable by normal user)
NSLog(@"Loaded '%@'\n", path);
NSLog(@" ");
}
else NSLog(@"* Unable to load '%@'", path);
NS_HANDLER
NSLog(@"Warning (gsapp): %@", [localException reason]);
NS_ENDHANDLER
}
}

Some method in the process of loading the bundles

("/opt/GNUstep/System/Library/Bundles/Camaelon.themeEngine","/opt/GNUstep/System/Library/Bundles/EtoileMenus.bundle","/opt/GNUstep/System/Library/Bundles/EtoileBehavior.bundle")

called [NSScreen screens] which raised another exception since GSCurrentServer() could not be set.

NSScreen.m
+ (NSArray *)screens
{
...
srv = GSCurrentServer();
screens = [srv screenList];
count = [screens count];
if (count == 0)
{
// something is wrong. This shouldn't happen.
[NSException raise: NSWindowServerCommunicationException format: @"Unable to retrieve list of screens from window server."];
return nil;
}
...
}

and Etoile fun was over.
***************************************************************************************************************************
My hints for installing Etoile on Solaris:

• Forget setup.sh and set things up manually (see below)
• Check file permissions; do chmod -R a+r to the Etoile source tree after deflating Etoile-0.2.tar
• You need a bunch of fixes to the source tree to get Etoile-0.2 compiled under Solaris (too many for this mail). If anyone is interested drop me a note.
• Etoile can't be installed with make, make install on a fresh system due to many self-reflexive dependencies. Here is my list of commands that more or less successfully gets stuff installed.

cd /usr/src/Etoile-0.2

cd ./Frameworks/OgreKit
make
make install

Temporär auskommentieren
pico ./Source/GNUmakefile
# FindPanel \
make
make install
cd ..
cd ..

cd ./Frameworks/PaneKit
make
make install
cd ..
cd ..

cd ./Frameworks/IconKit
make
make install
cd ..
cd ..

cd ./Frameworks/InspectorKit
make
make install
cd ..
cd ..

cd ./Services/User
make
make install
cd ..
cd ..

Temporär auskommentieren

pico GNUmakefile
#InspectorKit_SUBPROJECTS += Source
make
make install
cd ..
cd ..

pico /usr/src/Etoile-0.2/Frameworks/AddressesKit/Frameworks/GNUmakefile
# Addresses \


cd ./Frameworks
make OBJCFLAGS="-Dtypeof=__typeof__"
make install
cd ..

make OBJCFLAGS="-Dtypeof=__typeof__"
make install

After installing Etoile-0.2 you probably want to install Yen-Ju's latest fix to Azalea (broken arrow for edited documents). Thanks a lot to Yen-Ju for this fix.

cd /usr/src
svn co http://svn.gna.org/svn/etoile/trunk/Etoile/Services/Private/Azalea
cd Azalea
rm -rf /opt/GNUstep/System/Applications/Azalea.app
rm -rf /opt/GNUstep/Local/Applications/Azalea.app
make OBJCFLAGS="-Dtypeof=__typeof__"
make install
cd ..

As mentioned above I don't recommend to use setup. It at least did nothing good to me and I was better off using the following list of commands to set things up manually.

Settings defaults
We need to set some user defaults (for each user).

defaults write NSGlobalDomain GSAppKitUserBundles '("/opt/GNUstep/System/Library/Bundles/Camaelon.themeEngine","/opt/GNUstep/System/Library/Bundles/EtoileMenus.bundle","/opt/GNUstep/System/Library/Bundles/EtoileBehavior.bundle")'
defaults write NSGlobalDomain NSUseRunningCopy YES
defaults write Camaelon Theme "Nesedah"
defaults write GWorkspace NoWarnOnQuit YES
defaults write NSGlobalDomain GSWorkspaceApplication "Finder.app"
defaults write NSGlobalDomain XWindowBufferUseXShm NO

Etoile startup script
We probably could use /opt/GNUstep/System/Tools/etoile_system directly. But it can't hurt to have a wrapper script that sources GNUstep.sh first.

pico /usr/local/bin/etoile

#!/bin/sh
. /opt/GNUstep/System/Library/Makefiles/GNUstep.sh
etoile_system

chmod a+x /usr/local/bin/etoile

Session management
Under Linux we setup a file /usr/share/xsessions/etoile.desktop with the contents

[Desktop Entry]
Encoding=UTF-8
Name=Étoilé
Comment=Use this session to log in Étoilé environment
Comment[fr]=Utilisez cette session pour vous logguez dans
l'environnement Étoilé
Exec=/usr/local/bin/etoile
# No icon for now
Icon=
Type=Application

This file has no meaning under Solaris. We setup corresponding dlogin files instead. To make Etoile/Azalea selectable in dtlogin create the following files by duplicating the jds templates and modifying them accordingly (--> file permissions).

cp -Ppr /usr/dt/config/C/Xresources.d/Xresources.jds /usr/dt/config/C/Xresources.d/Xresources.aza
cp -Ppr /usr/dt/config/Xsession2.jds /usr/dt/config/Xsession.aza
cp -Ppr /usr/dt/config/Xinitrc.jds /usr/dt/config/Xinitrc.aza

ls /opt/GNUstep/System/Applications/Azalea.app/Azalea
ls /opt/GNUstep/System/Tools/etoile_system
ls /usr/local/bin/etoile

pico /usr/dt/config/C/Xresources.d/Xresources.aza
Dtlogin*altDtsIncrement: True

Dtlogin*altDtName: Etoile Desktop
Dtlogin*altDtKey: /usr/local/bin/etoile
Dtlogin*altDtStart: /usr/dt/config/Xsession.aza
Dtlogin*altDtLogo: JDS_s10

pico /usr/dt/config/Xsession.aza
#!/bin/ksh
#####################################################################
### File: Xsession2.jds Version 0.21 $Revision: 1.4 $
###
### Default Location: /usr/dt/config/Xsession2.jds
###
### Purpose: GNOME Desktop start script
###
### Invoked by: /usr/dt/bin/Xsession
###
#####################################################################

# First a little namespace cleanup of vars associated with this
# (and /usr/dt/bin/Xsession.ow) scripts.

unset SDT_ALT_SESSION
unset SDT_ALT_HELLO
unset SDT_NO_DSDM

XINITRC="/usr/dt/config/Xinitrc.aza"

if [ -x /usr/dt/bin/xmbind ]; then
/usr/dt/bin/xmbind
fi

echo 'GNOME Desktop Environment'

if [ -f $XINITRC ]; then
echo "using xinitrc file: $XINITRC"
/bin/ksh $XINITRC
else
echo "xinitrc file: $XINITRC not found"
fi


pico /usr/dt/config/Xinitrc.aza
#!/bin/ksh
#####################################################################
### File: Xinitrc.jds Version 0.23 $Revision: 1.19 $
###
### Default Location: /usr/dt/config/Xinitrc.jds
###
### Purpose: X session startup script
###
### Invoked by: /usr/dt/bin/Xsession
###
#####################################################################

if [ "x$LC_ALL" = x -a "x$LANG" = x -o "x$LANG" = xC ]; then
export LC_ALL="C"
export LC_CTYPE="C"
else
export LC_MESSAGES=$LANG
fi

export G_FILENAME_ENCODING=@locale,UTF-8
export G_BROKEN_FILENAMES=yes

/usr/openwin/bin/xrdb -merge << EOF
! Default CDE resources
*WindowColor: #8A008A008A00
!*WindowForeground: #FF0000000000
!*DataBackground: #0000FF000000
*DataForeground: #FF0000000000
*WorkspaceColor: #8A008A008A00
*Color.Background: #FF000000FF00
!*Color.Foreground: #0000FF000000
*foreground: #000000000000
! Hack for Dtmail
*XmText*background: seashell
*XmTextField*background: seashell
*Message_List*background: seashell
*background: #AE00B200C300
Dthello*string: Welcome to the GNOME Desktop Environment
EOF

if [ -f $HOME/.Xdefaults ]; then
xrdb -merge $HOME/.Xdefaults # Load Users X11 resource database
fi

echo "Starting GNOME"
#/opt/GNUstep/System/Tools/make_services
#openapp AZBackground.app &
#openapp EtoileMenuServer &
#openapp AZDock.app &
#openapp Finder.app &
#exec /opt/GNUstep/System/Applications/Azalea.app/Azalea
exec /usr/local/bin/etoile


SystemTaskList.plist
The file SystemTaskList.plist contains a dictionary with entries of applications/tools (gpbs, gdnc, Azalea, EtoileMenuServer,...) that are to be started when a user logs in. This file is read by the etoile_system tool.

mkdir /opt/GNUstep/System/Library/Etoile
cd /usr/src/Etoile-0.2
cp ./Services/Private/System/SystemTaskList.plist /opt/GNUstep/System/Library/Etoile
chmod a+r /opt/GNUstep/System/Library/Etoile/SystemTaskList.plist
pico /opt/GNUstep/System/Library/Etoile/SystemTaskList.plist

The Etoile system defines some keys (/etoilesystem/application/azalea, /etoilesystem/tool/gpbs, /etoilesystem/application/menuserver,...) that are associated with concrete value sin this dic, e.g.

/etoilesystem/application/menuserver -> EtoileMenuServer
/etoilesystem/application/dock -> AZDock
/etoilesystem/application/dock -> AZDock
/etoilesystem/application/background -> AZBackground
/etoilesystem/application/outerspace -> Finder
/etoilesystem/tool/make_services -> make_services

We probably should have this file in /home/<user>/Library/Etoile as well.

cd
mkdir ./Library/Etoile
cp /opt/GNUstep/System/Library/Etoile/SystemTaskList.plist ./Library/Etoile
/opt/GNUstep/System/Library/Etoile/SystemTaskList.plist

pico ./Library/Etoile/SystemTaskList.plist

Installing fonts and themes
The Etoile fonts can be installed as follows.

mkdir /opt/GNUstep/System/Library/Fonts
cd /usr/src
wget http://download.gna.org/etoile/etoile-default-fonts.tar.gz
gunzip etoile-default-fonts.tar.gz
tar xvf etoile-default-fonts.tar
cp -R etoile-default-fonts/* /opt/GNUstep/System/Library/Fonts
rm -rf etoile-default-fonts

mkdir /opt/GNUstep/System/Library/Themes
cp -r /opt/GNUstep/System/Library/Bundles/Camaelon.themeEngine/Resources/Nesedah.theme /opt/GNUstep/System/Library/Themes


Hopefully this is of help to someone. Thanks to the Etoile team for this great software. Logout is not working for me yet (still have to do pkill etoile), but I suppose this is a minor issue and probably easy to fix. In one of the versions I had tried out I saw tool tips popping up on the screen (probably to tell me which application my mouse pointer is hovering over). Unfortunately they never disappeared again. In my current install they luckily do not popup. However, there is no way for me to determine which icon in AZDock refers to which application. The contextual menu has no title as it should according to Yen-Ju. :-( But this is a rather minor issue. I am a happy user of Etoile now (time to get rid of Window Maker) and strongly recommend everybody - that not yet dared - to check it out. :-)

Regards,

Andreas











reply via email to

[Prev in Thread] Current Thread [Next in Thread]