Use POSIX macros for linux
[oweals/cde.git] / cde / programs / dtlogin / config / Xsession.src
1 XCOMM! KORNSHELL
2 XCOMM ##########################################################################
3 XCOMM
4 XCOMM   Xsession
5 XCOMM
6 XCOMM   Common Desktop Environment (CDE)
7 XCOMM
8 XCOMM   Configuration script for the Login Manager
9 XCOMM
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.
17 XCOMM
18 XCOMM       ************** DO NOT EDIT THIS FILE **************
19 XCOMM
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.
23 XCOMM
24 XCOMM   $TOG: Xsession.src /main/19 1999/03/30 09:38:50 mgreess $
25 XCOMM
26 XCOMM   Usage: $0 [-session session_name]
27 XCOMM
28 XCOMM ##########################################################################
29
30 #define HASH #
31
32 #ifdef sun 
33   HASH 
34   HASH Set OPENWINHOME 
35   HASH 
36   if [ -z "$OPENWINHOME" ]
37   then
38       export OPENWINHOME="/usr/openwin"
39   fi
40 #endif
41
42
43 #if 0
44 /*
45  * Platform specific definitions
46  *
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
51  */
52 #endif
53
54 #if defined (_AIX)
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"
59 #elif defined (sun)
60 #  define cpp_XINITUSER "$HOME/.xinitrc"
61 #  define cpp_MAIL "/var/mail/$USER"
62 #  undef cpp_HELLO
63 #  define cpp_HELLO "$DT_BINPATH/dthello -file $DT_INSTALL/copyright &"
64 #endif
65
66 #if defined (__hpux) && defined (BLS)
67 #  undef cpp_HELLO
68 #  define cpp_HELLO "$DT_BINPATH/dthello -file /etc/copyright -file $HOME/.dtlogininfo &"
69 #endif
70
71 #ifdef linux
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"
76 #  undef cpp_HELLO
77 #  define cpp_HELLO "$DT_BINPATH/dthello -file $DT_INSTALL/copyright &"
78 #endif
79
80 #ifdef __FreeBSD__
81 #  define cpp_MAIL "/var/mail/$USER"
82 #  define cpp_XINITUSER "$HOME/.xinitrc"
83 #  define cpp_XDMSYS "/usr/local/lib/X11/xdm/Xsession"
84 #  undef cpp_HELLO
85 #  define cpp_HELLO "$DT_BINPATH/dthello -file $DT_INSTALL/copyright &"
86 #endif
87
88 #ifdef __OpenBSD__
89 #  define cpp_MAIL "/var/mail/$USER"
90 #  define cpp_XINITUSER "$HOME/.xinitrc"
91 #  define cpp_XDMSYS "/etc/X11/xdm/Xsession"
92 #  undef cpp_HELLO
93 #  define cpp_HELLO "$DT_BINPATH/dthello -file $DT_INSTALL/copyright &"
94 #endif
95
96 #ifdef __NetBSD__
97 #  define cpp_MAIL "/var/mail/$USER"
98 #  define cpp_XINITUSER "$HOME/.xinitrc"
99 #  define cpp_XDMSYS "/etc/X11/xdm/Xsession"
100 #  undef cpp_HELLO
101 #  define cpp_HELLO "$DT_BINPATH/dthello -file $DT_INSTALL/copyright &"
102 #endif
103
104
105 #if 0
106 /*
107  * Fallback definitions
108  */
109 #endif
110
111 #if !defined (cpp_XINITUSER)
112 #  define cpp_XINITUSER "$HOME/.x11start"
113 #endif
114
115 #if !defined (cpp_MAIL)
116 #  define cpp_MAIL "/var/mail/$USER"
117 #endif
118
119 #if !defined (cpp_HELLO)
120 #  define cpp_HELLO "$DT_BINPATH/dthello &"
121 #endif
122
123 #if !defined (cpp_XDMSYS)
124 #  define cpp_XDMSYS "/usr/lib/X11/xdm/Xsession"
125 #endif
126
127 XCOMM ##########################################################################
128 XCOMM 
129 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:
132 XCOMM 
133 XCOMM     DT     existence of CDE DT Session Manager on the system
134 XCOMM     XDM    "$HOME/.xsession" (executable)
135 XCOMM     xinit  cpp_XINITUSER  (executable)
136 XCOMM 
137 XCOMM   If none of these startup mechanisms exist, a default window manager
138 XCOMM   and terminal emulator client are started.
139 XCOMM 
140 XCOMM ##########################################################################
141
142 XCOMM
143 XCOMM Variables must be explicitly exported
144 XCOMM 
145 set +a
146
147 XCOMM ##########################################################################
148 XCOMM 
149 XCOMM   Initialize session startup logging
150 XCOMM 
151 XCOMM ##########################################################################
152
153   exec >/dev/null 2>/dev/null
154
155   LOGDIR=$HOME/.dt
156   LOGFILENAME=$LOGDIR/startlog
157   MSGLOGFILENAME=$LOGDIR/errorlog
158   
159   if [ ! -d $LOGDIR ]; then
160     mkdir $LOGDIR
161     if [ -d $LOGDIR ]; then
162       chmod 755 $LOGDIR
163     fi
164   fi
165
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
169   touch $LOGFILENAME
170   [ ! -f $MSGLOGFILENAME ] && touch $MSGLOGFILENAME
171
172   if [ -w $LOGFILENAME ]; then
173     exec >>$LOGFILENAME 2>&1
174   fi
175
176
177   Log()
178   {
179     echo "--- $1" >>$LOGFILENAME 2>&1
180   }
181
182   Log "$(date)"
183   Log "$0 starting..."
184
185 XCOMM ##########################################################################
186 XCOMM 
187 XCOMM   Global environment section
188 XCOMM 
189 XCOMM    DT pre-sets the following environment variables for each user.
190 XCOMM    
191 XCOMM     (internal)
192 XCOMM 
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
202 XCOMM 
203 XCOMM
204 XCOMM     (Xsession)
205 XCOMM 
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
210 XCOMM 
211 XCOMM 
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. 
214 XCOMM    
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)
218 XCOMM 
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.
221 XCOMM     
222 XCOMM     
223 XCOMM ##########################################################################
224
225   [ -z "$EDITOR" ] && EDITOR=CDE_INSTALLATION_TOP/bin/dtpad
226   [ -z "$MAIL" ] && MAIL=cpp_MAIL
227   [ -z "$LANG" ] && LANG="C"
228   TERM=dtterm
229   SESSION_SVR=`hostname`
230
231   export PATH EDITOR MAIL TERM SESSION_SVR LANG
232
233 #if defined (_AIX) && defined (AIXV4)
234 XCOMM
235 XCOMM Clear the LFT message locale override if set
236 XCOMM
237 if [ "$LC_MESSAGES" = "C@lft" ]
238 then
239   unset LC_MESSAGES
240 fi
241 #endif
242  
243 #if defined (__hpux)
244   HASH
245   HASH Set the keyboard language if necessary...
246   HASH
247   if [ ! -z "$LANG" ]
248   then
249       case $LANG in
250             bulgarian | czech   | hebrew | hungarian | \
251             japanese  | korean  | polish | rumanian  | \
252             russian   | serbocroatian) 
253                         KBD_LANG=$LANG
254                         export KBD_LANG;;
255            
256              chinese-t) KBD_LANG=t_chinese
257                         export KBD_LANG;;
258              chinese-s) KBD_LANG=s_chinese
259                         export KBD_LANG;;
260             
261              *);; 
262      esac
263   fi
264 #endif
265
266   HASH
267   HASH Locate configuration file directories
268   HASH
269   XDIR=XPROJECTROOT/bin
270   DT_BINPATH=CDE_INSTALLATION_TOP/bin
271   DT_INSTALL=CDE_INSTALLATION_TOP
272   DT_INSTALL_CONFIG=CDE_INSTALLATION_TOP/config
273   DT_CONFIG=CDE_CONFIGURATION_TOP/config
274   DT_CONFIG_PATH="$DT_INSTALL_CONFIG $DT_CONFIG"
275
276 XCOMM ##########################################################################
277 XCOMM
278 XCOMM  Default desktop component configuration variable settings
279 XCOMM
280 XCOMM  This section sets the default value for variables controlling
281 XCOMM  some desktop components.
282 XCOMM
283 XCOMM ##########################################################################
284
285   HASH 
286   HASH Input method server startup
287   HASH 
288   if [ -z "$DTSTARTIMS" ]; then
289      DTSTARTIMS=True
290   fi
291
292   if [ "$DTSTARTIMS" = "False" ]; then
293      unset DTSTARTIMS
294   fi
295
296   HASH 
297   HASH Default desktop screen saver action list 
298   HASH  
299   export DTSCREENSAVERLIST="StartDtscreenSwarm StartDtscreenQix \
300     StartDtscreenFlame StartDtscreenHop StartDtscreenImage StartDtscreenLife \
301     StartDtscreenRotor StartDtscreenPyro StartDtscreenWorm StartDtscreenBlank"
302
303   HASH 
304   HASH Session startup clients and args
305   HASH 
306   if [ "$SESSIONTYPE" = "altDt" ]; then
307       dtstart_session[0]="$SDT_ALT_SESSION"
308       dtstart_hello[0]="$SDT_ALT_HELLO"
309   else
310       DTSESSION_ARGS=""
311       if [ $# -ge 2 ]; then
312           if [ "$1" = "-session" ]; then
313               DTSESSION_ARGS="$1 $2"
314           fi
315       fi
316       dtstart_session[0]="$DT_BINPATH/dtsession $DTSESSION_ARGS"
317       dtstart_hello[0]=cpp_HELLO
318   fi
319   dtstart_session[1]="$HOME/.xsession"
320   dtstart_session[2]=cpp_XINITUSER
321   dtstart_session[3]="$XDIR/xterm -geometry 80x24+10+10"
322   dtstart_hello[1]="$XDIR/xsetroot -default &"
323   dtstart_searchpath="$DT_BINPATH/dtsearchpath -ksh"
324   dtstart_ttsession="$DT_BINPATH/ttsession -s"
325   dtstart_dtdbcache="$DT_BINPATH/dtdbcache -init"
326   HASH
327   HASH dtdbcache file's directory should match
328   HASH _DTDTSMMTEMPDIR in DtSvc/DtUtil1/DtsMM.h
329   HASH
330   dtdbcacherm="rm -f /tmp/dtdbcache_$DISPLAY"
331   dtstart_appgather="$DT_BINPATH/dtappgather &"
332 #if defined(sun)
333   dtstart_dsdm="$DT_BINPATH/dsdm &"
334 #endif
335
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 &"
340
341
342   SESSIONLOGDIR=$LOGDIR/sessionlogs
343   SESSIONLOGFILENAME="$SESSIONLOGDIR/$SESSION_SVR"_DISPLAY=$DISPLAY
344
345   if [ ! -d $SESSIONLOGDIR ]; then
346     mkdir $SESSIONLOGDIR
347     if [ -d $SESSIONLOGDIR ]; then
348       chmod 755 $SESSIONLOGDIR
349     fi
350   fi
351
352   touch $SESSIONLOGFILENAME
353
354   if [ -w $SESSIONLOGFILENAME ]; then
355       dtstart_sessionlogfile="$SESSIONLOGFILENAME"
356   else
357       dtstart_sessionlogfile="/dev/null"
358   fi
359
360   rm -f $SESSIONLOGFILENAME
361
362 #ifdef sun
363   if [ "$DTXSERVERLOCATION" != "remote" ]
364   then
365   HASH
366   HASH Start fallback console
367   HASH
368      if [ -x $XDIR/fbconsole ]
369      then
370         $XDIR/fbconsole &
371      fi
372   fi
373 #endif
374
375 #define cpp_Xsession
376 #include "_common.ksh.src"
377 #undef cpp_Xsession
378
379 XCOMM ##########################################################################
380 XCOMM 
381 XCOMM   Source user's desktop profile
382 XCOMM 
383 XCOMM   This section determines if the user has a desktop profile in their
384 XCOMM   home directory. If not, the desktop default profile is copied to
385 XCOMM   the home directory. The desktop profile is then sourced. The purpose
386 XCOMM   is to incorporate any per-user/per-session environment customizations
387 XCOMM   and thereby propagate them to applications and desktop components.
388 XCOMM 
389 XCOMM ##########################################################################
390
391
392   DTSYSPROFILE=sys.dtprofile
393   DTPROFILE=.dtprofile
394
395   if [ ! -f $HOME/$DTPROFILE ]; then
396     for i in $DT_CONFIG_PATH
397     do
398       if [ -f $i/$DTSYSPROFILE ]; then
399         /usr/bin/awk '
400           BEGIN {printit=1}
401           /SYSPROFILE COMMENT START/ {printit=0; next}
402           /SYSPROFILE COMMENT END/ {printit=1; next}
403           printit==1 {print}' <$i/$DTSYSPROFILE >$HOME/$DTPROFILE
404         /bin/chmod 755 $HOME/$DTPROFILE
405         break
406       fi
407     done
408   fi
409
410   HASH
411   HASH source the .dtprofile.
412   HASH
413   if [ -f $HOME/$DTPROFILE ]; then
414     dtprofile_errors=`KORNSHELL -n $HOME/$DTPROFILE 2>&1`
415     if [ "0" = "$?" ]; then
416       Log "sourcing $HOME/$DTPROFILE..."
417       . $HOME/$DTPROFILE
418     else
419       Log "not sourcing $HOME/$DTPROFILE due to errors..."
420       Log "$dtprofile_errors"
421     fi
422   fi
423
424
425 XCOMM ##########################################################################
426 XCOMM 
427 XCOMM  External Xsession processing section
428 XCOMM 
429 XCOMM  This section searches the Xsession.d subdirectory and sources
430 XCOMM  the files contained therein.  The purpose is to set up any
431 XCOMM  per-user/per-session environment customizations and thereby propagate
432 XCOMM  them to applications and desktop components.
433 XCOMM 
434 XCOMM ##########################################################################
435
436   DT_XSESSION_DIR=Xsession.d
437
438   for i in $DT_CONFIG_PATH
439   do
440     if [[ -d $i/$DT_XSESSION_DIR ]]; then
441       HASH 
442       HASH Run custom Xsession scripts for this session.
443       HASH 
444       for SCRIPT in $(ls $i/$DT_XSESSION_DIR); do
445         if [ -x $i/$DT_XSESSION_DIR/$SCRIPT -a \
446             \( ! -d $i/$DT_XSESSION_DIR/$SCRIPT \) ]; then
447                Log "sourcing $i/$DT_XSESSION_DIR/$SCRIPT..."
448                . $i/$DT_XSESSION_DIR/$SCRIPT
449           fi
450       done
451     fi
452   done
453
454
455 XCOMM ##########################################################################
456 XCOMM 
457 XCOMM   Startup section.
458 XCOMM      
459 XCOMM   Note: The ksh syntax ${parameter%% *} is used when appropriate to
460 XCOMM       remove any command line options that may have been included
461 XCOMM       in the definition of a DT executable below.
462 XCOMM      
463 XCOMM ##########################################################################
464
465 XCOMM 
466 XCOMM Return first command in array named by $1 that is executable
467 XCOMM 
468 GetFirst()
469 {
470   let i=0
471   while true; do
472     eval "cmd=\${$1[$i]}"
473     [ -z "$cmd" ] && break
474     [ -x "${cmd%% *}" ] && echo "$cmd" && break
475     Log "could not start $cmd"
476     let i=$i+1
477   done
478 }
479
480 XCOMM 
481 XCOMM Start first command in array named by $1 that is executable. If
482 XCOMM $2 is 'eval', command result will be 'eval'ed. 
483 XCOMM 
484 StartFirst()
485 {
486   first=$(GetFirst $1)
487   if [ ! -z "$first" ]; then
488     Log "starting $first"
489     if [ "$2" = "eval" ]; then
490       eval `eval "PATH=$DT_BINPATH:$PATH $first"`
491     else
492       eval "PATH=$DT_BINPATH:$PATH $first"
493     fi
494   fi
495 }
496
497   HASH 
498   HASH Prepare for session startup
499   HASH 
500
501   if [ "$DTSOURCEPROFILE" = "true" ]
502   then
503     case ${SHELL##*/} in
504        sh | ksh | ksh93 | dtksh) shellprofile="$HOME/.profile";;
505        bash) shellprofile="$HOME/.bash_profile";;
506        csh | tcsh) shellprofile="$HOME/.login";;
507        *) Log "non-standard shell $SHELL"
508     esac
509   fi
510
511   if [ "$shellprofile" -a ! -f "$shellprofile" ]
512   then
513     Log "could not read $shellprofile"
514     unset shellprofile
515   fi
516
517   if [ "$SESSIONTYPE" = "xdm" ]; then
518     startup=$(GetFirst xdmstart_session)    # get xdm session client
519     StartFirst xdmstart_hello               # start xdm hello client
520   else
521     startup=$(GetFirst dtstart_session)     # get desktop session client
522     StartFirst dtstart_hello                # start desktop hello client
523     StartFirst dtstart_searchpath eval      # setup desktop search paths
524
525     tooltalk=$(GetFirst dtstart_ttsession)  # get tooltalk client
526     dtdbcache=$(GetFirst dtstart_dtdbcache) # get dtdbcache client
527
528 #if defined(sun)
529     if [ -z "$SDT_NO_DSDM" ]; then
530         StartFirst dtstart_dsdm             # start drag and drop proxy
531     fi
532 #endif
533     StartFirst dtstart_appgather            # setup session applications
534   fi
535
536   HASH 
537   HASH Start the session.
538   HASH 
539
540   if [ $shellprofile ]; then
541     Log "execing $startup using $shellprofile..."
542
543     case ${SHELL##*/} in
544
545       sh | bash | ksh | ksh93 | dtksh)
546         dotprofile_errors=`$SHELL -n $shellprofile 2>&1`
547         if [ "0" = "$?" ]; then
548           source_profile=". $shellprofile"
549           source_login="source $shellprofile"
550         else
551           Log "parse errors found in $shellprofile..."
552           Log "$dotprofile_errors"
553           source_profile="echo 'not execing $shellprofile due to errors'"
554           source_login="echo 'not execing $shellprofile due to errors'"
555         fi;;
556            
557       *)
558         source_profile=". $shellprofile"
559         source_login="source $shellprofile";; 
560     esac
561
562   else
563     Log "execing $startup..."
564
565     source_profile="echo 'not execing $HOME/.profile (see $HOME/.dtprofile)'"
566     source_login="echo 'not execing $HOME/.login (see $HOME/.dtprofile)'"
567   fi
568
569   if [ -z "$dtdbcache" ]; then
570         dtdbcache="echo could not start $dtstart_dtdbcache"
571   fi
572
573   export DT=true;
574   case ${SHELL##*/} in
575       sh | bash) $SHELL -c "$source_profile; \
576                            unset DT; \
577                            $dtdbcache; \
578                            PATH=$DT_BINPATH:\$PATH $tooltalk;   \
579                            $startup > $dtstart_sessionlogfile 2>&1" ;;
580
581       ksh | ksh93 | dtksh) $SHELL -c "$source_profile; \
582                            unset DT; \
583                            $dtdbcache; \
584                            PATH=$DT_BINPATH:\$PATH $tooltalk;\
585                            $startup >| $dtstart_sessionlogfile 2>&1" ;;
586
587       csh | tcsh) $SHELL -c "unsetenv _ PWD;       \
588                            $source_login; \
589                            unsetenv DT;          \
590                            $dtdbcache; \
591                            (set path = ( $DT_BINPATH \$path ); $tooltalk ); \
592                            $startup  >&! $dtstart_sessionlogfile" ;;
593
594       *) unset DT
595          $dtdbcache
596          StartFirst dtstart_ttsession
597          $startup >| $dtstart_sessionlogfile 2>&1 ;;
598   esac
599
600 $dtdbcacherm            # remove the actions/datatypes cachefile
601
602 XCOMM ####################         eof      #################################