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 &"
68 # define cpp_MAIL "/usr/spool/mail/$USER"
71 #if defined (__hpux) && defined (BLS)
73 # define cpp_HELLO "$DT_BINPATH/dthello -file /etc/copyright -file $HOME/.dtlogininfo &"
77 # define cpp_MAIL "/var/spool/mail/$USER"
78 # define cpp_XDIR "/usr/bin"
79 # define cpp_XINITUSER "$HOME/.xinitrc"
80 # define cpp_XDMSYS "/etc/X11/Xsession"
82 # define cpp_HELLO "$DT_BINPATH/dthello -file $DT_INSTALL/copyright &"
86 # define cpp_MAIL "/var/mail/$USER"
87 # define cpp_XINITUSER "$HOME/.xinitrc"
88 # define cpp_XDMSYS "/usr/local/lib/X11/xdm/Xsession"
90 # define cpp_HELLO "$DT_BINPATH/dthello -file $DT_INSTALL/copyright &"
94 # define cpp_MAIL "/var/mail/$USER"
95 # define cpp_XINITUSER "$HOME/.xinitrc"
96 # define cpp_XDMSYS "/etc/X11/xdm/Xsession"
98 # define cpp_HELLO "$DT_BINPATH/dthello -file $DT_INSTALL/copyright &"
102 # define cpp_MAIL "/var/mail/$USER"
103 # define cpp_XINITUSER "$HOME/.xinitrc"
104 # define cpp_XDMSYS "/etc/X11/xdm/Xsession"
106 # define cpp_HELLO "$DT_BINPATH/dthello -file $DT_INSTALL/copyright &"
112 * Fallback definitions
116 #if !defined (cpp_XINITUSER)
117 # define cpp_XINITUSER "$HOME/.x11start"
120 #if !defined (cpp_MAIL)
121 # define cpp_MAIL "/usr/mail/$USER"
124 #if !defined (cpp_HELLO)
125 # define cpp_HELLO "$DT_BINPATH/dthello &"
128 #if !defined (cpp_XDMSYS)
129 # define cpp_XDMSYS "/usr/lib/X11/xdm/Xsession"
132 XCOMM ##########################################################################
135 XCOMM This script starts the user's session. It searches for one of three
136 XCOMM types of startup mechanisms, in the following order:
138 XCOMM DT existence of CDE DT Session Manager on the system
139 XCOMM XDM "$HOME/.xsession" (executable)
140 XCOMM xinit cpp_XINITUSER (executable)
142 XCOMM If none of these startup mechanisms exist, a default window manager
143 XCOMM and terminal emulator client are started.
145 XCOMM ##########################################################################
148 XCOMM Variables must be explicitly exported
152 XCOMM ##########################################################################
154 XCOMM Initialize session startup logging
156 XCOMM ##########################################################################
158 exec >/dev/null 2>/dev/null
161 LOGFILENAME=$LOGDIR/startlog
162 MSGLOGFILENAME=$LOGDIR/errorlog
164 if [ ! -d $LOGDIR ]; then
166 if [ -d $LOGDIR ]; then
171 [ -f $LOGFILENAME.older ] && rm -f $LOGFILENAME.older
172 [ -f $LOGFILENAME.old ] && mv -f $LOGFILENAME.old $LOGFILENAME.older
173 [ -f $LOGFILENAME ] && mv -f $LOGFILENAME $LOGFILENAME.old
175 [ ! -f $MSGLOGFILENAME ] && touch $MSGLOGFILENAME
177 if [ -w $LOGFILENAME ]; then
178 exec >>$LOGFILENAME 2>&1
184 echo "--- $1" >>$LOGFILENAME 2>&1
190 XCOMM ##########################################################################
192 XCOMM Global environment section
194 XCOMM DT pre-sets the following environment variables for each user.
198 XCOMM DISPLAY set to the value of the first field in the Xservers file.
199 XCOMM HOME set to the user's home directory (from /etc/passwd)
200 XCOMM LANG set to the display's current NLS language (if any)
201 XCOMM LC_ALL set to the value of $LANG
202 XCOMM LOGNAME set to the user name
203 XCOMM PATH set to the value of the Dtlogin "userPath" resource
204 XCOMM USER set to the user name
205 XCOMM SHELL set to the user's default shell (from /etc/passwd)
206 XCOMM TZ set to the value of the Dtlogin "timeZone" resource
211 XCOMM TERM set to xterm
212 XCOMM EDITOR set to the default editor
213 XCOMM KBD_LANG set to the value of $LANG for certain languages
214 XCOMM MAIL set to cpp_MAIL
217 XCOMM Three methods are available to modify or add to this list depending
218 XCOMM on the desired scope of the resulting environment variable.
220 XCOMM 1. X server and/or all users on a display (Xconfig file)
221 XCOMM 2. all users on a display (Xsession file)
222 XCOMM 3. individual users (.dtprofile file)
224 XCOMM See DT on-line help, the DT Users Guide, or the Dtlogin(1X) man
225 XCOMM page for details on setting environment variables.
228 XCOMM ##########################################################################
230 [ -z "$EDITOR" ] && EDITOR=CDE_INSTALLATION_TOP/bin/dtpad
231 [ -z "$MAIL" ] && MAIL=cpp_MAIL
232 [ -z "$LANG" ] && LANG="C"
234 SESSION_SVR=`hostname`
236 export PATH EDITOR MAIL TERM SESSION_SVR LANG
238 #if defined (_AIX) && defined (AIXV4)
240 XCOMM Clear the LFT message locale override if set
242 if [ "$LC_MESSAGES" = "C@lft" ]
248 #if defined (__osf__)
250 HASH Set XFILESEARCHPATH if necessary
252 if [ -z "$XFILESEARCHPATH" ]
254 export XFILESEARCHPATH="%D"
257 HASH check if network is configured. If not, set environment variable
258 HASH so that tooltalk will use localhost/loopback rather than system
260 RCMGR=/usr/sbin/rcmgr
261 NUM_NETCONFIG=`$RCMGR get NUM_NETCONFIG`
262 if [ "$NUM_NETCONFIG" = '' -o "$NUM_NETCONFIG" = 0 ]; then
263 export DTNONETWORK=true
269 HASH Set the keyboard language if necessary...
274 bulgarian | czech | hebrew | hungarian | \
275 japanese | korean | polish | rumanian | \
276 russian | serbocroatian)
280 chinese-t) KBD_LANG=t_chinese
282 chinese-s) KBD_LANG=s_chinese
291 HASH Locate configuration file directories
293 XDIR=XPROJECTROOT/bin
294 DT_BINPATH=CDE_INSTALLATION_TOP/bin
295 DT_INSTALL=CDE_INSTALLATION_TOP
296 DT_INSTALL_CONFIG=CDE_INSTALLATION_TOP/config
297 DT_CONFIG=CDE_CONFIGURATION_TOP/config
298 DT_CONFIG_PATH="$DT_INSTALL_CONFIG $DT_CONFIG"
300 XCOMM ##########################################################################
302 XCOMM Default desktop component configuration variable settings
304 XCOMM This section sets the default value for variables controlling
305 XCOMM some desktop components.
307 XCOMM ##########################################################################
310 HASH Input method server startup
312 if [ -z "$DTSTARTIMS" ]; then
316 if [ "$DTSTARTIMS" = "False" ]; then
321 HASH Default desktop screen saver action list
323 export DTSCREENSAVERLIST="StartDtscreenSwarm StartDtscreenQix \
324 StartDtscreenFlame StartDtscreenHop StartDtscreenImage StartDtscreenLife \
325 StartDtscreenRotor StartDtscreenPyro StartDtscreenWorm StartDtscreenBlank"
328 HASH Session startup clients and args
330 if [ "$SESSIONTYPE" = "altDt" ]; then
331 dtstart_session[0]="$SDT_ALT_SESSION"
332 dtstart_hello[0]="$SDT_ALT_HELLO"
335 if [ $# -ge 2 ]; then
336 if [ "$1" = "-session" ]; then
337 DTSESSION_ARGS="$1 $2"
340 dtstart_session[0]="$DT_BINPATH/dtsession $DTSESSION_ARGS"
341 dtstart_hello[0]=cpp_HELLO
343 dtstart_session[1]="$HOME/.xsession"
344 dtstart_session[2]=cpp_XINITUSER
345 dtstart_session[3]="$XDIR/xterm -geometry 80x24+10+10"
346 dtstart_hello[1]="$XDIR/xsetroot -default &"
347 dtstart_searchpath="$DT_BINPATH/dtsearchpath -ksh"
348 dtstart_ttsession="$DT_BINPATH/ttsession -s"
349 dtstart_dtdbcache="$DT_BINPATH/dtdbcache -init"
351 HASH dtdbcache file's directory should match
352 HASH _DTDTSMMTEMPDIR in DtSvc/DtUtil1/DtsMM.h
355 dtdbcacherm="rm -f /var/tmp/dtdbcache_$DISPLAY"
357 dtdbcacherm="rm -f /tmp/dtdbcache_$DISPLAY"
359 dtstart_appgather="$DT_BINPATH/dtappgather &"
361 dtstart_dsdm="$DT_BINPATH/dsdm &"
364 xdmstart_session[0]="$HOME/.xsession"
365 xdmstart_session[1]=cpp_XDMSYS
366 xdmstart_session[2]="xterm -geometry 80x24+10+10 -ls"
367 xdmstart_hello="$XDIR/xsetroot -default &"
370 SESSIONLOGDIR=$LOGDIR/sessionlogs
371 SESSIONLOGFILENAME="$SESSIONLOGDIR/$SESSION_SVR"_DISPLAY=$DISPLAY
373 if [ ! -d $SESSIONLOGDIR ]; then
375 if [ -d $SESSIONLOGDIR ]; then
376 chmod 755 $SESSIONLOGDIR
380 touch $SESSIONLOGFILENAME
382 if [ -w $SESSIONLOGFILENAME ]; then
383 dtstart_sessionlogfile="$SESSIONLOGFILENAME"
385 dtstart_sessionlogfile="/dev/null"
388 rm -f $SESSIONLOGFILENAME
391 if [ "$DTXSERVERLOCATION" != "remote" ]
394 HASH Start fallback console
396 if [ -x $XDIR/fbconsole ]
404 #include "_common.ksh.src"
407 #if defined (__osf__)
409 XCOMM Bring up the sysman checklist if it hasn't been run before
411 if [ -f /usr/sbin/start_checklist ]
413 Log "Starting the checklist setup"
414 /usr/sbin/start_checklist&
418 XCOMM ##########################################################################
420 XCOMM Source user's desktop profile
422 XCOMM This section determines if the user has a desktop profile in their
423 XCOMM home directory. If not, the desktop default profile is copied to
424 XCOMM the home directory. The desktop profile is then sourced. The purpose
425 XCOMM is to incorporate any per-user/per-session environment customizations
426 XCOMM and thereby propagate them to applications and desktop components.
428 XCOMM ##########################################################################
431 DTSYSPROFILE=sys.dtprofile
434 if [ ! -f $HOME/$DTPROFILE ]; then
435 for i in $DT_CONFIG_PATH
437 if [ -f $i/$DTSYSPROFILE ]; then
440 /SYSPROFILE COMMENT START/ {printit=0; next}
441 /SYSPROFILE COMMENT END/ {printit=1; next}
442 printit==1 {print}' <$i/$DTSYSPROFILE >$HOME/$DTPROFILE
443 /bin/chmod 755 $HOME/$DTPROFILE
450 HASH source the .dtprofile.
452 if [ -f $HOME/$DTPROFILE ]; then
453 dtprofile_errors=`KORNSHELL -n $HOME/$DTPROFILE 2>&1`
454 if [ "0" = "$?" ]; then
455 Log "sourcing $HOME/$DTPROFILE..."
458 Log "not sourcing $HOME/$DTPROFILE due to errors..."
459 Log "$dtprofile_errors"
464 XCOMM ##########################################################################
466 XCOMM External Xsession processing section
468 XCOMM This section searches the Xsession.d subdirectory and sources
469 XCOMM the files contained therein. The purpose is to set up any
470 XCOMM per-user/per-session environment customizations and thereby propagate
471 XCOMM them to applications and desktop components.
473 XCOMM ##########################################################################
475 DT_XSESSION_DIR=Xsession.d
477 for i in $DT_CONFIG_PATH
479 if [[ -d $i/$DT_XSESSION_DIR ]]; then
481 HASH Run custom Xsession scripts for this session.
483 for SCRIPT in $(ls $i/$DT_XSESSION_DIR); do
484 if [ -x $i/$DT_XSESSION_DIR/$SCRIPT -a \
485 \( ! -d $i/$DT_XSESSION_DIR/$SCRIPT \) ]; then
486 Log "sourcing $i/$DT_XSESSION_DIR/$SCRIPT..."
487 . $i/$DT_XSESSION_DIR/$SCRIPT
494 XCOMM ##########################################################################
496 XCOMM Startup section.
498 XCOMM Note: The ksh syntax ${parameter%% *} is used when appropriate to
499 XCOMM remove any command line options that may have been included
500 XCOMM in the definition of a DT executable below.
502 XCOMM ##########################################################################
505 XCOMM Return first command in array named by $1 that is executable
511 eval "cmd=\${$1[$i]}"
512 [ -z "$cmd" ] && break
513 [ -x "${cmd%% *}" ] && echo "$cmd" && break
514 Log "could not start $cmd"
520 XCOMM Start first command in array named by $1 that is executable. If
521 XCOMM $2 is 'eval', command result will be 'eval'ed.
526 if [ ! -z "$first" ]; then
527 Log "starting $first"
528 if [ "$2" = "eval" ]; then
529 eval `eval "PATH=$DT_BINPATH:$PATH $first"`
531 eval "PATH=$DT_BINPATH:$PATH $first"
537 HASH Prepare for session startup
540 if [ "$DTSOURCEPROFILE" = "true" ]
543 sh | ksh | ksh93 | dtksh) shellprofile="$HOME/.profile";;
544 bash) shellprofile="$HOME/.bash_profile";;
545 csh | tcsh) shellprofile="$HOME/.login";;
546 *) Log "non-standard shell $SHELL"
550 if [ "$shellprofile" -a ! -f "$shellprofile" ]
552 Log "could not read $shellprofile"
556 if [ "$SESSIONTYPE" = "xdm" ]; then
557 startup=$(GetFirst xdmstart_session) # get xdm session client
558 StartFirst xdmstart_hello # start xdm hello client
560 startup=$(GetFirst dtstart_session) # get desktop session client
561 StartFirst dtstart_hello # start desktop hello client
562 StartFirst dtstart_searchpath eval # setup desktop search paths
564 tooltalk=$(GetFirst dtstart_ttsession) # get tooltalk client
565 dtdbcache=$(GetFirst dtstart_dtdbcache) # get dtdbcache client
568 if [ -z "$SDT_NO_DSDM" ]; then
569 StartFirst dtstart_dsdm # start drag and drop proxy
572 StartFirst dtstart_appgather # setup session applications
576 HASH Start the session.
579 if [ $shellprofile ]; then
580 Log "execing $startup using $shellprofile..."
584 sh | bash | ksh | ksh93 | dtksh)
585 dotprofile_errors=`$SHELL -n $shellprofile 2>&1`
586 if [ "0" = "$?" ]; then
587 source_profile=". $shellprofile"
588 source_login="source $shellprofile"
590 Log "parse errors found in $shellprofile..."
591 Log "$dotprofile_errors"
592 source_profile="echo 'not execing $shellprofile due to errors'"
593 source_login="echo 'not execing $shellprofile due to errors'"
597 source_profile=". $shellprofile"
598 source_login="source $shellprofile";;
602 Log "execing $startup..."
604 source_profile="echo 'not execing $HOME/.profile (see $HOME/.dtprofile)'"
605 source_login="echo 'not execing $HOME/.login (see $HOME/.dtprofile)'"
608 if [ -z "$dtdbcache" ]; then
609 dtdbcache="echo could not start $dtstart_dtdbcache"
614 sh | bash) $SHELL -c "$source_profile; \
617 PATH=$DT_BINPATH:\$PATH $tooltalk; \
618 $startup > $dtstart_sessionlogfile 2>&1" ;;
620 ksh | ksh93 | dtksh) $SHELL -c "$source_profile; \
623 PATH=$DT_BINPATH:\$PATH $tooltalk;\
624 $startup >| $dtstart_sessionlogfile 2>&1" ;;
626 csh | tcsh) $SHELL -c "unsetenv _ PWD; \
630 (set path = ( $DT_BINPATH \$path ); $tooltalk ); \
631 $startup >&! $dtstart_sessionlogfile" ;;
635 StartFirst dtstart_ttsession
636 $startup >| $dtstart_sessionlogfile 2>&1 ;;
639 $dtdbcacherm # remove the actions/datatypes cachefile
641 XCOMM #################### eof #################################