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_MAIL "/var/mail/$USER"
65 # define cpp_MAIL "/usr/spool/mail/$USER"
68 #if defined (__hpux) && defined (BLS)
70 # define cpp_HELLO "$DT_BINPATH/dthello -file /etc/copyright -file $HOME/.dtlogininfo &"
74 # define cpp_MAIL "/var/spool/mail/$USER"
75 # define cpp_XDIR "/usr/bin"
76 # define cpp_XINITUSER "$HOME/.xinitrc"
77 # define cpp_XDMSYS "/etc/X11/Xsession"
79 # define cpp_HELLO "$DT_BINPATH/dthello -file /usr/dt/copyright &"
85 * Fallback definitions
89 #if !defined (cpp_XINITUSER)
90 # define cpp_XINITUSER "$HOME/.x11start"
93 #if !defined (cpp_MAIL)
94 # define cpp_MAIL "/usr/mail/$USER"
97 #if !defined (cpp_HELLO)
98 # define cpp_HELLO "$DT_BINPATH/dthello &"
101 #if !defined (cpp_XDMSYS)
102 # define cpp_XDMSYS "/usr/lib/X11/xdm/Xsession"
105 XCOMM ##########################################################################
108 XCOMM This script starts the user's session. It searches for one of three
109 XCOMM types of startup mechanisms, in the following order:
111 XCOMM DT existence of CDE DT Session Manager on the system
112 XCOMM XDM "$HOME/.xsession" (executable)
113 XCOMM xinit cpp_XINITUSER (executable)
115 XCOMM If none of these startup mechanisms exist, a default window manager
116 XCOMM and terminal emulator client are started.
118 XCOMM ##########################################################################
121 XCOMM Variables must be explicitly exported
125 XCOMM ##########################################################################
127 XCOMM Initialize session startup logging
129 XCOMM ##########################################################################
131 exec >/dev/null 2>/dev/null
134 LOGFILENAME=$LOGDIR/startlog
135 MSGLOGFILENAME=$LOGDIR/errorlog
137 if [ ! -d $LOGDIR ]; then
139 if [ -d $LOGDIR ]; then
144 [ -f $LOGFILENAME.older ] && rm -f $LOGFILENAME.older
145 [ -f $LOGFILENAME.old ] && mv -f $LOGFILENAME.old $LOGFILENAME.older
146 [ -f $LOGFILENAME ] && mv -f $LOGFILENAME $LOGFILENAME.old
148 [ ! -f $MSGLOGFILENAME ] && touch $MSGLOGFILENAME
150 if [ -w $LOGFILENAME ]; then
151 exec >>$LOGFILENAME 2>&1
157 echo "--- $1" >>$LOGFILENAME 2>&1
163 XCOMM ##########################################################################
165 XCOMM Global environment section
167 XCOMM DT pre-sets the following environment variables for each user.
171 XCOMM DISPLAY set to the value of the first field in the Xservers file.
172 XCOMM HOME set to the user's home directory (from /etc/passwd)
173 XCOMM LANG set to the display's current NLS language (if any)
174 XCOMM LC_ALL set to the value of $LANG
175 XCOMM LOGNAME set to the user name
176 XCOMM PATH set to the value of the Dtlogin "userPath" resource
177 XCOMM USER set to the user name
178 XCOMM SHELL set to the user's default shell (from /etc/passwd)
179 XCOMM TZ set to the value of the Dtlogin "timeZone" resource
184 XCOMM TERM set to xterm
185 XCOMM EDITOR set to the default editor
186 XCOMM KBD_LANG set to the value of $LANG for certain languages
187 XCOMM MAIL set to cpp_MAIL
190 XCOMM Three methods are available to modify or add to this list depending
191 XCOMM on the desired scope of the resulting environment variable.
193 XCOMM 1. X server and/or all users on a display (Xconfig file)
194 XCOMM 2. all users on a display (Xsession file)
195 XCOMM 3. individual users (.dtprofile file)
197 XCOMM See DT on-line help, the DT Users Guide, or the Dtlogin(1X) man
198 XCOMM page for details on setting environment variables.
201 XCOMM ##########################################################################
203 [ -z "$EDITOR" ] && EDITOR=CDE_INSTALLATION_TOP/bin/dtpad
204 [ -z "$MAIL" ] && MAIL=cpp_MAIL
205 [ -z "$LANG" ] && LANG="C"
207 SESSION_SVR=`hostname`
209 export PATH EDITOR MAIL TERM SESSION_SVR LANG
211 #if defined (_AIX) && defined (AIXV4)
213 XCOMM Clear the LFT message locale override if set
215 if [ "$LC_MESSAGES" = "C@lft" ]
221 #if defined (__osf__)
223 HASH Set XFILESEARCHPATH if necessary
225 if [ -z "$XFILESEARCHPATH" ]
227 export XFILESEARCHPATH="%D"
230 HASH check if network is configured. If not, set environment variable
231 HASH so that tooltalk will use localhost/loopback rather than system
233 RCMGR=/usr/sbin/rcmgr
234 NUM_NETCONFIG=`$RCMGR get NUM_NETCONFIG`
235 if [ "$NUM_NETCONFIG" = '' -o "$NUM_NETCONFIG" = 0 ]; then
236 export DTNONETWORK=true
242 HASH Set the keyboard language if necessary...
247 bulgarian | czech | hebrew | hungarian | \
248 japanese | korean | polish | rumanian | \
249 russian | serbocroatian)
253 chinese-t) KBD_LANG=t_chinese
255 chinese-s) KBD_LANG=s_chinese
264 HASH Locate configuration file directories
266 XDIR=XPROJECTROOT/bin
267 DT_BINPATH=CDE_INSTALLATION_TOP/bin
268 DT_INSTALL_CONFIG=CDE_INSTALLATION_TOP/config
269 DT_CONFIG=CDE_CONFIGURATION_TOP/config
270 DT_CONFIG_PATH="$DT_INSTALL_CONFIG $DT_CONFIG"
272 XCOMM ##########################################################################
274 XCOMM Default desktop component configuration variable settings
276 XCOMM This section sets the default value for variables controlling
277 XCOMM some desktop components.
279 XCOMM ##########################################################################
282 HASH Input method server startup
284 if [ -z "$DTSTARTIMS" ]; then
288 if [ "$DTSTARTIMS" = "False" ]; then
293 HASH Default desktop screen saver action list
295 export DTSCREENSAVERLIST="StartDtscreenSwarm StartDtscreenQix \
296 StartDtscreenFlame StartDtscreenHop StartDtscreenImage StartDtscreenLife \
297 StartDtscreenRotor StartDtscreenPyro StartDtscreenWorm StartDtscreenBlank"
300 HASH Session startup clients and args
302 if [ "$SESSIONTYPE" = "altDt" ]; then
303 dtstart_session[0]="$SDT_ALT_SESSION"
304 dtstart_hello[0]="$SDT_ALT_HELLO"
307 if [ $# -ge 2 ]; then
308 if [ "$1" = "-session" ]; then
309 DTSESSION_ARGS="$1 $2"
312 dtstart_session[0]="$DT_BINPATH/dtsession $DTSESSION_ARGS"
313 dtstart_hello[0]=cpp_HELLO
315 dtstart_session[1]="$HOME/.xsession"
316 dtstart_session[2]=cpp_XINITUSER
317 dtstart_session[3]="$XDIR/xterm -geometry 80x24+10+10"
318 dtstart_hello[1]="$XDIR/xsetroot -default &"
319 dtstart_searchpath="$DT_BINPATH/dtsearchpath -ksh"
320 dtstart_ttsession="$DT_BINPATH/ttsession -s"
321 dtstart_dtdbcache="$DT_BINPATH/dtdbcache -init"
323 HASH dtdbcache file's directory should match
324 HASH _DTDTSMMTEMPDIR in DtSvc/DtUtil1/DtsMM.h
327 dtdbcacherm="rm -f /var/tmp/dtdbcache_$DISPLAY"
329 dtdbcacherm="rm -f /tmp/dtdbcache_$DISPLAY"
331 dtstart_appgather="$DT_BINPATH/dtappgather &"
332 #if defined(USL) || defined(sun) || defined(__uxp__)
333 dtstart_dsdm="$DT_BINPATH/dsdm &"
336 xdmstart_session[0]="$HOME/.xsession"
337 xdmstart_session[1]=cpp_XDMSYS
338 xdmstart_session[2]="xterm -geometry 80x24+10+10 -ls"
339 xdmstart_hello="$XDIR/xsetroot -default &"
342 SESSIONLOGDIR=$LOGDIR/sessionlogs
343 SESSIONLOGFILENAME="$SESSIONLOGDIR/$SESSION_SVR"_DISPLAY=$DISPLAY
345 if [ ! -d $SESSIONLOGDIR ]; then
347 if [ -d $SESSIONLOGDIR ]; then
348 chmod 755 $SESSIONLOGDIR
352 touch $SESSIONLOGFILENAME
354 if [ -w $SESSIONLOGFILENAME ]; then
355 dtstart_sessionlogfile="$SESSIONLOGFILENAME"
357 dtstart_sessionlogfile="/dev/null"
360 rm -f $SESSIONLOGFILENAME
363 if [ "$DTXSERVERLOCATION" != "remote" ]
366 HASH Start fallback console
368 if [ -x $XDIR/fbconsole ]
376 #include "_common.ksh.src"
379 #if defined (__osf__)
381 XCOMM Bring up the sysman checklist if it hasn't been run before
383 if [ -f /usr/sbin/start_checklist ]
385 Log "Starting the checklist setup"
386 /usr/sbin/start_checklist&
390 XCOMM ##########################################################################
392 XCOMM Source user's desktop profile
394 XCOMM This section determines if the user has a desktop profile in their
395 XCOMM home directory. If not, the desktop default profile is copied to
396 XCOMM the home directory. The desktop profile is then sourced. The purpose
397 XCOMM is to incorporate any per-user/per-session environment customizations
398 XCOMM and thereby propagate them to applications and desktop components.
400 XCOMM ##########################################################################
403 DTSYSPROFILE=sys.dtprofile
406 if [ ! -f $HOME/$DTPROFILE ]; then
407 for i in $DT_CONFIG_PATH
409 if [ -f $i/$DTSYSPROFILE ]; then
412 /SYSPROFILE COMMENT START/ {printit=0; next}
413 /SYSPROFILE COMMENT END/ {printit=1; next}
414 printit==1 {print}' <$i/$DTSYSPROFILE >$HOME/$DTPROFILE
415 /bin/chmod 755 $HOME/$DTPROFILE
422 HASH source the .dtprofile.
424 if [ -f $HOME/$DTPROFILE ]; then
425 dtprofile_errors=`/bin/ksh -n $HOME/$DTPROFILE 2>&1`
426 if [ "0" = "$?" ]; then
427 Log "sourcing $HOME/$DTPROFILE..."
430 Log "not sourcing $HOME/$DTPROFILE due to errors..."
431 Log "$dtprofile_errors"
436 XCOMM ##########################################################################
438 XCOMM External Xsession processing section
440 XCOMM This section searches the Xsession.d subdirectory and sources
441 XCOMM the files contained therein. The purpose is to set up any
442 XCOMM per-user/per-session environment customizations and thereby propagate
443 XCOMM them to applications and desktop components.
445 XCOMM ##########################################################################
447 DT_XSESSION_DIR=Xsession.d
449 for i in $DT_CONFIG_PATH
451 if [[ -d $i/$DT_XSESSION_DIR ]]; then
453 HASH Run custom Xsession scripts for this session.
455 for SCRIPT in $(ls $i/$DT_XSESSION_DIR); do
456 if [ -x $i/$DT_XSESSION_DIR/$SCRIPT -a \
457 \( ! -d $i/$DT_XSESSION_DIR/$SCRIPT \) ]; then
458 Log "sourcing $i/$DT_XSESSION_DIR/$SCRIPT..."
459 . $i/$DT_XSESSION_DIR/$SCRIPT
466 XCOMM ##########################################################################
468 XCOMM Startup section.
470 XCOMM Note: The ksh syntax ${parameter%% *} is used when appropriate to
471 XCOMM remove any command line options that may have been included
472 XCOMM in the definition of a DT executable below.
474 XCOMM ##########################################################################
477 XCOMM Return first command in array named by $1 that is executable
483 eval "cmd=\${$1[$i]}"
484 [ -z "$cmd" ] && break
485 [ -x "${cmd%% *}" ] && echo "$cmd" && break
486 Log "could not start $cmd"
492 XCOMM Start first command in array named by $1 that is executable. If
493 XCOMM $2 is 'eval', command result will be 'eval'ed.
498 if [ ! -z "$first" ]; then
499 Log "starting $first"
500 if [ "$2" = "eval" ]; then
501 eval `eval "PATH=$DT_BINPATH:$PATH $first"`
503 eval "PATH=$DT_BINPATH:$PATH $first"
509 HASH Prepare for session startup
512 if [ "$DTSOURCEPROFILE" = "true" ]
515 sh | ksh | dtksh) shellprofile="$HOME/.profile";;
516 bash) shellprofile="$HOME/.bash_profile";;
517 csh | tcsh) shellprofile="$HOME/.login";;
518 *) Log "non-standard shell $SHELL"
522 if [ "$shellprofile" -a ! -f "$shellprofile" ]
524 Log "could not read $shellprofile"
528 if [ "$SESSIONTYPE" = "xdm" ]; then
529 startup=$(GetFirst xdmstart_session) # get xdm session client
530 StartFirst xdmstart_hello # start xdm hello client
532 startup=$(GetFirst dtstart_session) # get desktop session client
533 StartFirst dtstart_hello # start desktop hello client
534 StartFirst dtstart_searchpath eval # setup desktop search paths
536 tooltalk=$(GetFirst dtstart_ttsession) # get tooltalk client
537 dtdbcache=$(GetFirst dtstart_dtdbcache) # get dtdbcache client
539 #if defined(USL) || defined(sun) || defined(__uxp__)
540 if [ -z "$SDT_NO_DSDM" ]; then
541 StartFirst dtstart_dsdm # start drag and drop proxy
544 StartFirst dtstart_appgather # setup session applications
548 HASH Start the session.
551 if [ $shellprofile ]; then
552 Log "execing $startup using $shellprofile..."
556 sh | bash | ksh | dtksh)
557 dotprofile_errors=`$SHELL -n $shellprofile 2>&1`
558 if [ "0" = "$?" ]; then
559 source_profile=". $shellprofile"
560 source_login="source $shellprofile"
562 Log "parse errors found in $shellprofile..."
563 Log "$dotprofile_errors"
564 source_profile="echo 'not execing $shellprofile due to errors'"
565 source_login="echo 'not execing $shellprofile due to errors'"
569 source_profile=". $shellprofile"
570 source_login="source $shellprofile";;
574 Log "execing $startup..."
576 source_profile="echo 'not execing $HOME/.profile (see $HOME/.dtprofile)'"
577 source_login="echo 'not execing $HOME/.login (see $HOME/.dtprofile)'"
580 if [ -z "$dtdbcache" ]; then
581 dtdbcache="echo could not start $dtstart_dtdbcache"
586 sh | bash) $SHELL -c "$source_profile; \
589 PATH=/usr/dt/bin:\$PATH $tooltalk; \
590 $startup > $dtstart_sessionlogfile 2>&1" ;;
592 ksh | dtksh) $SHELL -c "$source_profile; \
595 PATH=/usr/dt/bin:\$PATH $tooltalk;\
596 $startup >| $dtstart_sessionlogfile 2>&1" ;;
598 csh | tcsh) $SHELL -c "unsetenv _ PWD; \
602 (set path = ( $DT_BINPATH \$path ); $tooltalk ); \
603 $startup >&! $dtstart_sessionlogfile" ;;
607 StartFirst dtstart_ttsession
608 $startup >| $dtstart_sessionlogfile 2>&1 ;;
611 $dtdbcacherm # remove the actions/datatypes cachefile
613 XCOMM #################### eof #################################