2 XCOMM ##########################################################################
6 XCOMM Common Desktop Environment (CDE)
8 XCOMM Configuration script for the Login Manager
10 XCOMM (c) Copyright 1996 Digital Equipment Corporation.
11 XCOMM (c) Copyright 1993,1994,1996 Hewlett-Packard Company.
12 XCOMM (c) Copyright 1993,1994,1996 International Business Machines Corp.
13 XCOMM (c) Copyright 1993,1994,1996 Sun Microsystems, Inc.
14 XCOMM (c) Copyright 1993,1994,1996 Novell, Inc.
15 XCOMM (c) Copyright 1996 FUJITSU LIMITED.
16 XCOMM (c) Copyright 1996 Hitachi.
18 XCOMM ************** DO NOT EDIT THIS FILE **************
20 XCOMM CDE_INSTALLATION_TOP/bin/Xsession is a factory-default file and will
21 XCOMM be unconditionally overwritten upon subsequent installation.
22 XCOMM Modification is discouraged.
24 XCOMM $TOG: Xsession.src /main/19 1999/03/30 09:38:50 mgreess $
26 XCOMM Usage: $0 [-session session_name]
28 XCOMM ##########################################################################
36 if [ -z "$OPENWINHOME" ]
38 export OPENWINHOME="/usr/openwin"
45 * Platform specific definitions
47 * cpp_XINITUSER - user's xinit startup file
48 * cpp_MAIL - system mail file
49 * cpp_HELLO - dthello command line
50 * cpp_XDMSYS - xdm system session file
55 # define cpp_XINITUSER "$HOME/.xinitrc"
56 # define cpp_MAIL "/var/spool/mail/$USER"
57 #elif defined (__hpux)
58 # define cpp_XDMSYS "/usr/lib/X11/xdm/sys.xsession"
60 # define cpp_XINITUSER "$HOME/.xinitrc"
61 # define cpp_MAIL "/var/mail/$USER"
63 # define cpp_HELLO "$DT_BINPATH/dthello -file $DT_INSTALL/copyright &"
66 #if defined (__hpux) && defined (BLS)
68 # define cpp_HELLO "$DT_BINPATH/dthello -file /etc/copyright -file $HOME/.dtlogininfo &"
72 # define cpp_MAIL "/var/spool/mail/$USER"
73 # define cpp_XDIR "/usr/bin"
74 # define cpp_XINITUSER "$HOME/.xinitrc"
75 # define cpp_XDMSYS "/etc/X11/Xsession"
77 # define cpp_HELLO "$DT_BINPATH/dthello -file $DT_INSTALL/copyright &"
81 # define cpp_MAIL "/var/mail/$USER"
82 # define cpp_XINITUSER "$HOME/.xinitrc"
83 # define cpp_XDMSYS "/usr/local/lib/X11/xdm/Xsession"
85 # define cpp_HELLO "$DT_BINPATH/dthello -file $DT_INSTALL/copyright &"
89 # define cpp_MAIL "/var/mail/$USER"
90 # define cpp_XINITUSER "$HOME/.xinitrc"
91 # define cpp_XDMSYS "/etc/X11/xdm/Xsession"
93 # define cpp_HELLO "$DT_BINPATH/dthello -file $DT_INSTALL/copyright &"
97 # define cpp_MAIL "/var/mail/$USER"
98 # define cpp_XINITUSER "$HOME/.xinitrc"
99 # define cpp_XDMSYS "/etc/X11/xdm/Xsession"
101 # define cpp_HELLO "$DT_BINPATH/dthello -file $DT_INSTALL/copyright &"
107 * Fallback definitions
111 #if !defined (cpp_XINITUSER)
112 # define cpp_XINITUSER "$HOME/.x11start"
115 #if !defined (cpp_MAIL)
116 # define cpp_MAIL "/var/mail/$USER"
119 #if !defined (cpp_HELLO)
120 # define cpp_HELLO "$DT_BINPATH/dthello &"
123 #if !defined (cpp_XDMSYS)
124 # define cpp_XDMSYS "/usr/lib/X11/xdm/Xsession"
127 XCOMM ##########################################################################
130 XCOMM This script starts the user's session. It searches for one of three
131 XCOMM types of startup mechanisms, in the following order:
133 XCOMM DT existence of CDE DT Session Manager on the system
134 XCOMM XDM "$HOME/.xsession" (executable)
135 XCOMM xinit cpp_XINITUSER (executable)
137 XCOMM If none of these startup mechanisms exist, a default window manager
138 XCOMM and terminal emulator client are started.
140 XCOMM ##########################################################################
143 XCOMM Variables must be explicitly exported
147 XCOMM ##########################################################################
149 XCOMM Initialize session startup logging
151 XCOMM ##########################################################################
153 exec >/dev/null 2>/dev/null
156 LOGFILENAME=$LOGDIR/startlog
157 MSGLOGFILENAME=$LOGDIR/errorlog
159 if [ ! -d $LOGDIR ]; then
161 if [ -d $LOGDIR ]; then
166 [ -f $LOGFILENAME.older ] && rm -f $LOGFILENAME.older
167 [ -f $LOGFILENAME.old ] && mv -f $LOGFILENAME.old $LOGFILENAME.older
168 [ -f $LOGFILENAME ] && mv -f $LOGFILENAME $LOGFILENAME.old
170 [ ! -f $MSGLOGFILENAME ] && touch $MSGLOGFILENAME
172 if [ -w $LOGFILENAME ]; then
173 exec >>$LOGFILENAME 2>&1
179 echo "--- $1" >>$LOGFILENAME 2>&1
185 XCOMM ##########################################################################
187 XCOMM Global environment section
189 XCOMM DT pre-sets the following environment variables for each user.
193 XCOMM DISPLAY set to the value of the first field in the Xservers file.
194 XCOMM HOME set to the user's home directory (from /etc/passwd)
195 XCOMM LANG set to the display's current NLS language (if any)
196 XCOMM LC_ALL set to the value of $LANG
197 XCOMM LOGNAME set to the user name
198 XCOMM PATH set to the value of the Dtlogin "userPath" resource
199 XCOMM USER set to the user name
200 XCOMM SHELL set to the user's default shell (from /etc/passwd)
201 XCOMM TZ set to the value of the Dtlogin "timeZone" resource
206 XCOMM TERM set to xterm
207 XCOMM EDITOR set to the default editor
208 XCOMM KBD_LANG set to the value of $LANG for certain languages
209 XCOMM MAIL set to cpp_MAIL
212 XCOMM Three methods are available to modify or add to this list depending
213 XCOMM on the desired scope of the resulting environment variable.
215 XCOMM 1. X server and/or all users on a display (Xconfig file)
216 XCOMM 2. all users on a display (Xsession file)
217 XCOMM 3. individual users (.dtprofile file)
219 XCOMM See DT on-line help, the DT Users Guide, or the Dtlogin(1X) man
220 XCOMM page for details on setting environment variables.
223 XCOMM ##########################################################################
225 [ -z "$EDITOR" ] && EDITOR=CDE_INSTALLATION_TOP/bin/dtpad
226 [ -z "$MAIL" ] && MAIL=cpp_MAIL
227 [ -z "$LANG" ] && LANG="C"
229 SESSION_SVR=`hostname`
231 export PATH EDITOR MAIL TERM SESSION_SVR LANG
233 #if defined (_AIX) && defined (AIXV4)
235 XCOMM Clear the LFT message locale override if set
237 if [ "$LC_MESSAGES" = "C@lft" ]
243 #if defined (__osf__)
245 HASH Set XFILESEARCHPATH if necessary
247 if [ -z "$XFILESEARCHPATH" ]
249 export XFILESEARCHPATH="%D"
252 HASH check if network is configured. If not, set environment variable
253 HASH so that tooltalk will use localhost/loopback rather than system
255 RCMGR=/usr/sbin/rcmgr
256 NUM_NETCONFIG=`$RCMGR get NUM_NETCONFIG`
257 if [ "$NUM_NETCONFIG" = '' -o "$NUM_NETCONFIG" = 0 ]; then
258 export DTNONETWORK=true
264 HASH Set the keyboard language if necessary...
269 bulgarian | czech | hebrew | hungarian | \
270 japanese | korean | polish | rumanian | \
271 russian | serbocroatian)
275 chinese-t) KBD_LANG=t_chinese
277 chinese-s) KBD_LANG=s_chinese
286 HASH Locate configuration file directories
288 XDIR=XPROJECTROOT/bin
289 DT_BINPATH=CDE_INSTALLATION_TOP/bin
290 DT_INSTALL=CDE_INSTALLATION_TOP
291 DT_INSTALL_CONFIG=CDE_INSTALLATION_TOP/config
292 DT_CONFIG=CDE_CONFIGURATION_TOP/config
293 DT_CONFIG_PATH="$DT_INSTALL_CONFIG $DT_CONFIG"
295 XCOMM ##########################################################################
297 XCOMM Default desktop component configuration variable settings
299 XCOMM This section sets the default value for variables controlling
300 XCOMM some desktop components.
302 XCOMM ##########################################################################
305 HASH Input method server startup
307 if [ -z "$DTSTARTIMS" ]; then
311 if [ "$DTSTARTIMS" = "False" ]; then
316 HASH Default desktop screen saver action list
318 export DTSCREENSAVERLIST="StartDtscreenSwarm StartDtscreenQix \
319 StartDtscreenFlame StartDtscreenHop StartDtscreenImage StartDtscreenLife \
320 StartDtscreenRotor StartDtscreenPyro StartDtscreenWorm StartDtscreenBlank"
323 HASH Session startup clients and args
325 if [ "$SESSIONTYPE" = "altDt" ]; then
326 dtstart_session[0]="$SDT_ALT_SESSION"
327 dtstart_hello[0]="$SDT_ALT_HELLO"
330 if [ $# -ge 2 ]; then
331 if [ "$1" = "-session" ]; then
332 DTSESSION_ARGS="$1 $2"
335 dtstart_session[0]="$DT_BINPATH/dtsession $DTSESSION_ARGS"
336 dtstart_hello[0]=cpp_HELLO
338 dtstart_session[1]="$HOME/.xsession"
339 dtstart_session[2]=cpp_XINITUSER
340 dtstart_session[3]="$XDIR/xterm -geometry 80x24+10+10"
341 dtstart_hello[1]="$XDIR/xsetroot -default &"
342 dtstart_searchpath="$DT_BINPATH/dtsearchpath -ksh"
343 dtstart_ttsession="$DT_BINPATH/ttsession -s"
344 dtstart_dtdbcache="$DT_BINPATH/dtdbcache -init"
346 HASH dtdbcache file's directory should match
347 HASH _DTDTSMMTEMPDIR in DtSvc/DtUtil1/DtsMM.h
350 dtdbcacherm="rm -f /var/tmp/dtdbcache_$DISPLAY"
352 dtdbcacherm="rm -f /tmp/dtdbcache_$DISPLAY"
354 dtstart_appgather="$DT_BINPATH/dtappgather &"
356 dtstart_dsdm="$DT_BINPATH/dsdm &"
359 xdmstart_session[0]="$HOME/.xsession"
360 xdmstart_session[1]=cpp_XDMSYS
361 xdmstart_session[2]="xterm -geometry 80x24+10+10 -ls"
362 xdmstart_hello="$XDIR/xsetroot -default &"
365 SESSIONLOGDIR=$LOGDIR/sessionlogs
366 SESSIONLOGFILENAME="$SESSIONLOGDIR/$SESSION_SVR"_DISPLAY=$DISPLAY
368 if [ ! -d $SESSIONLOGDIR ]; then
370 if [ -d $SESSIONLOGDIR ]; then
371 chmod 755 $SESSIONLOGDIR
375 touch $SESSIONLOGFILENAME
377 if [ -w $SESSIONLOGFILENAME ]; then
378 dtstart_sessionlogfile="$SESSIONLOGFILENAME"
380 dtstart_sessionlogfile="/dev/null"
383 rm -f $SESSIONLOGFILENAME
386 if [ "$DTXSERVERLOCATION" != "remote" ]
389 HASH Start fallback console
391 if [ -x $XDIR/fbconsole ]
399 #include "_common.ksh.src"
402 #if defined (__osf__)
404 XCOMM Bring up the sysman checklist if it hasn't been run before
406 if [ -f /usr/sbin/start_checklist ]
408 Log "Starting the checklist setup"
409 /usr/sbin/start_checklist&
413 XCOMM ##########################################################################
415 XCOMM Source user's desktop profile
417 XCOMM This section determines if the user has a desktop profile in their
418 XCOMM home directory. If not, the desktop default profile is copied to
419 XCOMM the home directory. The desktop profile is then sourced. The purpose
420 XCOMM is to incorporate any per-user/per-session environment customizations
421 XCOMM and thereby propagate them to applications and desktop components.
423 XCOMM ##########################################################################
426 DTSYSPROFILE=sys.dtprofile
429 if [ ! -f $HOME/$DTPROFILE ]; then
430 for i in $DT_CONFIG_PATH
432 if [ -f $i/$DTSYSPROFILE ]; then
435 /SYSPROFILE COMMENT START/ {printit=0; next}
436 /SYSPROFILE COMMENT END/ {printit=1; next}
437 printit==1 {print}' <$i/$DTSYSPROFILE >$HOME/$DTPROFILE
438 /bin/chmod 755 $HOME/$DTPROFILE
445 HASH source the .dtprofile.
447 if [ -f $HOME/$DTPROFILE ]; then
448 dtprofile_errors=`KORNSHELL -n $HOME/$DTPROFILE 2>&1`
449 if [ "0" = "$?" ]; then
450 Log "sourcing $HOME/$DTPROFILE..."
453 Log "not sourcing $HOME/$DTPROFILE due to errors..."
454 Log "$dtprofile_errors"
459 XCOMM ##########################################################################
461 XCOMM External Xsession processing section
463 XCOMM This section searches the Xsession.d subdirectory and sources
464 XCOMM the files contained therein. The purpose is to set up any
465 XCOMM per-user/per-session environment customizations and thereby propagate
466 XCOMM them to applications and desktop components.
468 XCOMM ##########################################################################
470 DT_XSESSION_DIR=Xsession.d
472 for i in $DT_CONFIG_PATH
474 if [[ -d $i/$DT_XSESSION_DIR ]]; then
476 HASH Run custom Xsession scripts for this session.
478 for SCRIPT in $(ls $i/$DT_XSESSION_DIR); do
479 if [ -x $i/$DT_XSESSION_DIR/$SCRIPT -a \
480 \( ! -d $i/$DT_XSESSION_DIR/$SCRIPT \) ]; then
481 Log "sourcing $i/$DT_XSESSION_DIR/$SCRIPT..."
482 . $i/$DT_XSESSION_DIR/$SCRIPT
489 XCOMM ##########################################################################
491 XCOMM Startup section.
493 XCOMM Note: The ksh syntax ${parameter%% *} is used when appropriate to
494 XCOMM remove any command line options that may have been included
495 XCOMM in the definition of a DT executable below.
497 XCOMM ##########################################################################
500 XCOMM Return first command in array named by $1 that is executable
506 eval "cmd=\${$1[$i]}"
507 [ -z "$cmd" ] && break
508 [ -x "${cmd%% *}" ] && echo "$cmd" && break
509 Log "could not start $cmd"
515 XCOMM Start first command in array named by $1 that is executable. If
516 XCOMM $2 is 'eval', command result will be 'eval'ed.
521 if [ ! -z "$first" ]; then
522 Log "starting $first"
523 if [ "$2" = "eval" ]; then
524 eval `eval "PATH=$DT_BINPATH:$PATH $first"`
526 eval "PATH=$DT_BINPATH:$PATH $first"
532 HASH Prepare for session startup
535 if [ "$DTSOURCEPROFILE" = "true" ]
538 sh | ksh | ksh93 | dtksh) shellprofile="$HOME/.profile";;
539 bash) shellprofile="$HOME/.bash_profile";;
540 csh | tcsh) shellprofile="$HOME/.login";;
541 *) Log "non-standard shell $SHELL"
545 if [ "$shellprofile" -a ! -f "$shellprofile" ]
547 Log "could not read $shellprofile"
551 if [ "$SESSIONTYPE" = "xdm" ]; then
552 startup=$(GetFirst xdmstart_session) # get xdm session client
553 StartFirst xdmstart_hello # start xdm hello client
555 startup=$(GetFirst dtstart_session) # get desktop session client
556 StartFirst dtstart_hello # start desktop hello client
557 StartFirst dtstart_searchpath eval # setup desktop search paths
559 tooltalk=$(GetFirst dtstart_ttsession) # get tooltalk client
560 dtdbcache=$(GetFirst dtstart_dtdbcache) # get dtdbcache client
563 if [ -z "$SDT_NO_DSDM" ]; then
564 StartFirst dtstart_dsdm # start drag and drop proxy
567 StartFirst dtstart_appgather # setup session applications
571 HASH Start the session.
574 if [ $shellprofile ]; then
575 Log "execing $startup using $shellprofile..."
579 sh | bash | ksh | ksh93 | dtksh)
580 dotprofile_errors=`$SHELL -n $shellprofile 2>&1`
581 if [ "0" = "$?" ]; then
582 source_profile=". $shellprofile"
583 source_login="source $shellprofile"
585 Log "parse errors found in $shellprofile..."
586 Log "$dotprofile_errors"
587 source_profile="echo 'not execing $shellprofile due to errors'"
588 source_login="echo 'not execing $shellprofile due to errors'"
592 source_profile=". $shellprofile"
593 source_login="source $shellprofile";;
597 Log "execing $startup..."
599 source_profile="echo 'not execing $HOME/.profile (see $HOME/.dtprofile)'"
600 source_login="echo 'not execing $HOME/.login (see $HOME/.dtprofile)'"
603 if [ -z "$dtdbcache" ]; then
604 dtdbcache="echo could not start $dtstart_dtdbcache"
609 sh | bash) $SHELL -c "$source_profile; \
612 PATH=$DT_BINPATH:\$PATH $tooltalk; \
613 $startup > $dtstart_sessionlogfile 2>&1" ;;
615 ksh | ksh93 | dtksh) $SHELL -c "$source_profile; \
618 PATH=$DT_BINPATH:\$PATH $tooltalk;\
619 $startup >| $dtstart_sessionlogfile 2>&1" ;;
621 csh | tcsh) $SHELL -c "unsetenv _ PWD; \
625 (set path = ( $DT_BINPATH \$path ); $tooltalk ); \
626 $startup >&! $dtstart_sessionlogfile" ;;
630 StartFirst dtstart_ttsession
631 $startup >| $dtstart_sessionlogfile 2>&1 ;;
634 $dtdbcacherm # remove the actions/datatypes cachefile
636 XCOMM #################### eof #################################