XCOMM! /bin/ksh XCOMM ########################################################################## XCOMM XCOMM Xsession XCOMM XCOMM Common Desktop Environment (CDE) XCOMM XCOMM Configuration script for the Login Manager XCOMM XCOMM (c) Copyright 1996 Digital Equipment Corporation. XCOMM (c) Copyright 1993,1994,1996 Hewlett-Packard Company. XCOMM (c) Copyright 1993,1994,1996 International Business Machines Corp. XCOMM (c) Copyright 1993,1994,1996 Sun Microsystems, Inc. XCOMM (c) Copyright 1993,1994,1996 Novell, Inc. XCOMM (c) Copyright 1996 FUJITSU LIMITED. XCOMM (c) Copyright 1996 Hitachi. XCOMM XCOMM ************** DO NOT EDIT THIS FILE ************** XCOMM XCOMM CDE_INSTALLATION_TOP/bin/Xsession is a factory-default file and will XCOMM be unconditionally overwritten upon subsequent installation. XCOMM Modification is discouraged. XCOMM XCOMM $TOG: Xsession.src /main/19 1999/03/30 09:38:50 mgreess $ XCOMM XCOMM Usage: $0 [-session session_name] XCOMM XCOMM ########################################################################## #define HASH # #ifdef sun HASH HASH Set OPENWINHOME HASH if [ -z "$OPENWINHOME" ] then export OPENWINHOME="/usr/openwin" fi #endif #if 0 /* * Platform specific definitions * * cpp_XINITUSER - user's xinit startup file * cpp_MAIL - system mail file * cpp_HELLO - dthello command line * cpp_XDMSYS - xdm system session file */ #endif #if defined (_AIX) # define cpp_XINITUSER "$HOME/.xinitrc" # define cpp_MAIL "/var/spool/mail/$USER" #elif defined (__hpux) # define cpp_XDMSYS "/usr/lib/X11/xdm/sys.xsession" #elif defined (sun) # define cpp_MAIL "/var/mail/$USER" #endif #ifdef __osf__ # undef cpp_MAIL # define cpp_MAIL "/usr/spool/mail/$USER" #endif #if defined (__hpux) && defined (BLS) # undef cpp_HELLO # define cpp_HELLO "$DT_BINPATH/dthello -file /etc/copyright -file $HOME/.dtlogininfo &" #endif #ifdef linux # define cpp_MAIL "/var/spool/mail/$USER" # define cpp_XDIR "/usr/bin" # define cpp_XINITUSER "$HOME/.xinitrc" # define cpp_XDMSYS "/etc/X11/Xsession" # undef cpp_HELLO # define cpp_HELLO "$DT_BINPATH/dthello -file /usr/dt/copyright &" #endif #if 0 /* * Fallback definitions */ #endif #if !defined (cpp_XINITUSER) # define cpp_XINITUSER "$HOME/.x11start" #endif #if !defined (cpp_MAIL) # define cpp_MAIL "/usr/mail/$USER" #endif #if !defined (cpp_HELLO) # define cpp_HELLO "$DT_BINPATH/dthello &" #endif #if !defined (cpp_XDMSYS) # define cpp_XDMSYS "/usr/lib/X11/xdm/Xsession" #endif XCOMM ########################################################################## XCOMM XCOMM XCOMM This script starts the user's session. It searches for one of three XCOMM types of startup mechanisms, in the following order: XCOMM XCOMM DT existence of CDE DT Session Manager on the system XCOMM XDM "$HOME/.xsession" (executable) XCOMM xinit cpp_XINITUSER (executable) XCOMM XCOMM If none of these startup mechanisms exist, a default window manager XCOMM and terminal emulator client are started. XCOMM XCOMM ########################################################################## XCOMM XCOMM Variables must be explicitly exported XCOMM set +a XCOMM ########################################################################## XCOMM XCOMM Initialize session startup logging XCOMM XCOMM ########################################################################## exec >/dev/null 2>/dev/null LOGDIR=$HOME/.dt LOGFILENAME=$LOGDIR/startlog MSGLOGFILENAME=$LOGDIR/errorlog if [ ! -d $LOGDIR ]; then mkdir $LOGDIR if [ -d $LOGDIR ]; then chmod 755 $LOGDIR fi fi [ -f $LOGFILENAME.older ] && rm -f $LOGFILENAME.older [ -f $LOGFILENAME.old ] && mv -f $LOGFILENAME.old $LOGFILENAME.older [ -f $LOGFILENAME ] && mv -f $LOGFILENAME $LOGFILENAME.old touch $LOGFILENAME [ ! -f $MSGLOGFILENAME ] && touch $MSGLOGFILENAME if [ -w $LOGFILENAME ]; then exec >>$LOGFILENAME 2>&1 fi Log() { echo "--- $1" >>$LOGFILENAME 2>&1 } Log "$(date)" Log "$0 starting..." XCOMM ########################################################################## XCOMM XCOMM Global environment section XCOMM XCOMM DT pre-sets the following environment variables for each user. XCOMM XCOMM (internal) XCOMM XCOMM DISPLAY set to the value of the first field in the Xservers file. XCOMM HOME set to the user's home directory (from /etc/passwd) XCOMM LANG set to the display's current NLS language (if any) XCOMM LC_ALL set to the value of $LANG XCOMM LOGNAME set to the user name XCOMM PATH set to the value of the Dtlogin "userPath" resource XCOMM USER set to the user name XCOMM SHELL set to the user's default shell (from /etc/passwd) XCOMM TZ set to the value of the Dtlogin "timeZone" resource XCOMM XCOMM XCOMM (Xsession) XCOMM XCOMM TERM set to xterm XCOMM EDITOR set to the default editor XCOMM KBD_LANG set to the value of $LANG for certain languages XCOMM MAIL set to cpp_MAIL XCOMM XCOMM XCOMM Three methods are available to modify or add to this list depending XCOMM on the desired scope of the resulting environment variable. XCOMM XCOMM 1. X server and/or all users on a display (Xconfig file) XCOMM 2. all users on a display (Xsession file) XCOMM 3. individual users (.dtprofile file) XCOMM XCOMM See DT on-line help, the DT Users Guide, or the Dtlogin(1X) man XCOMM page for details on setting environment variables. XCOMM XCOMM XCOMM ########################################################################## [ -z "$EDITOR" ] && EDITOR=CDE_INSTALLATION_TOP/bin/dtpad [ -z "$MAIL" ] && MAIL=cpp_MAIL [ -z "$LANG" ] && LANG="C" TERM=dtterm SESSION_SVR=`hostname` export PATH EDITOR MAIL TERM SESSION_SVR LANG #if defined (_AIX) && defined (AIXV4) XCOMM XCOMM Clear the LFT message locale override if set XCOMM if [ "$LC_MESSAGES" = "C@lft" ] then unset LC_MESSAGES fi #endif #if defined (__osf__) HASH HASH Set XFILESEARCHPATH if necessary HASH if [ -z "$XFILESEARCHPATH" ] then export XFILESEARCHPATH="%D" fi HASH HASH check if network is configured. If not, set environment variable HASH so that tooltalk will use localhost/loopback rather than system HASH name RCMGR=/usr/sbin/rcmgr NUM_NETCONFIG=`$RCMGR get NUM_NETCONFIG` if [ "$NUM_NETCONFIG" = '' -o "$NUM_NETCONFIG" = 0 ]; then export DTNONETWORK=true fi #endif #if defined (__hpux) HASH HASH Set the keyboard language if necessary... HASH if [ ! -z "$LANG" ] then case $LANG in bulgarian | czech | hebrew | hungarian | \ japanese | korean | polish | rumanian | \ russian | serbocroatian) KBD_LANG=$LANG export KBD_LANG;; chinese-t) KBD_LANG=t_chinese export KBD_LANG;; chinese-s) KBD_LANG=s_chinese export KBD_LANG;; *);; esac fi #endif HASH HASH Locate configuration file directories HASH XDIR=XPROJECTROOT/bin DT_BINPATH=CDE_INSTALLATION_TOP/bin DT_INSTALL_CONFIG=CDE_INSTALLATION_TOP/config DT_CONFIG=CDE_CONFIGURATION_TOP/config DT_CONFIG_PATH="$DT_INSTALL_CONFIG $DT_CONFIG" XCOMM ########################################################################## XCOMM XCOMM Default desktop component configuration variable settings XCOMM XCOMM This section sets the default value for variables controlling XCOMM some desktop components. XCOMM XCOMM ########################################################################## HASH HASH Input method server startup HASH if [ -z "$DTSTARTIMS" ]; then DTSTARTIMS=True fi if [ "$DTSTARTIMS" = "False" ]; then unset DTSTARTIMS fi HASH HASH Default desktop screen saver action list HASH export DTSCREENSAVERLIST="StartDtscreenSwarm StartDtscreenQix \ StartDtscreenFlame StartDtscreenHop StartDtscreenImage StartDtscreenLife \ StartDtscreenRotor StartDtscreenPyro StartDtscreenWorm StartDtscreenBlank" HASH HASH Session startup clients and args HASH if [ "$SESSIONTYPE" = "altDt" ]; then dtstart_session[0]="$SDT_ALT_SESSION" dtstart_hello[0]="$SDT_ALT_HELLO" else DTSESSION_ARGS="" if [ $# -ge 2 ]; then if [ "$1" = "-session" ]; then DTSESSION_ARGS="$1 $2" fi fi dtstart_session[0]="$DT_BINPATH/dtsession $DTSESSION_ARGS" dtstart_hello[0]=cpp_HELLO fi dtstart_session[1]="$HOME/.xsession" dtstart_session[2]=cpp_XINITUSER dtstart_session[3]="$XDIR/xterm -geometry 80x24+10+10" dtstart_hello[1]="$XDIR/xsetroot -default &" dtstart_searchpath="$DT_BINPATH/dtsearchpath -ksh" dtstart_ttsession="$DT_BINPATH/ttsession -s" dtstart_dtdbcache="$DT_BINPATH/dtdbcache -init" HASH HASH dtdbcache file's directory should match HASH _DTDTSMMTEMPDIR in DtSvc/DtUtil1/DtsMM.h HASH #ifdef __osf__ dtdbcacherm="rm -f /var/tmp/dtdbcache_$DISPLAY" #else dtdbcacherm="rm -f /tmp/dtdbcache_$DISPLAY" #endif dtstart_appgather="$DT_BINPATH/dtappgather &" #if defined(USL) || defined(sun) || defined(__uxp__) dtstart_dsdm="$DT_BINPATH/dsdm &" #endif xdmstart_session[0]="$HOME/.xsession" xdmstart_session[1]=cpp_XDMSYS xdmstart_session[2]="xterm -geometry 80x24+10+10 -ls" xdmstart_hello="$XDIR/xsetroot -default &" SESSIONLOGDIR=$LOGDIR/sessionlogs SESSIONLOGFILENAME="$SESSIONLOGDIR/$SESSION_SVR"_DISPLAY=$DISPLAY if [ ! -d $SESSIONLOGDIR ]; then mkdir $SESSIONLOGDIR if [ -d $SESSIONLOGDIR ]; then chmod 755 $SESSIONLOGDIR fi fi touch $SESSIONLOGFILENAME if [ -w $SESSIONLOGFILENAME ]; then dtstart_sessionlogfile="$SESSIONLOGFILENAME" else dtstart_sessionlogfile="/dev/null" fi rm -f $SESSIONLOGFILENAME #ifdef sun if [ "$DTXSERVERLOCATION" != "remote" ] then HASH HASH Start fallback console HASH if [ -x $XDIR/fbconsole ] then $XDIR/fbconsole & fi fi #endif #define cpp_Xsession #include "_common.ksh.src" #undef cpp_Xsession #if defined (__osf__) XCOMM XCOMM Bring up the sysman checklist if it hasn't been run before XCOMM if [ -f /usr/sbin/start_checklist ] then Log "Starting the checklist setup" /usr/sbin/start_checklist& fi #endif XCOMM ########################################################################## XCOMM XCOMM Source user's desktop profile XCOMM XCOMM This section determines if the user has a desktop profile in their XCOMM home directory. If not, the desktop default profile is copied to XCOMM the home directory. The desktop profile is then sourced. The purpose XCOMM is to incorporate any per-user/per-session environment customizations XCOMM and thereby propagate them to applications and desktop components. XCOMM XCOMM ########################################################################## DTSYSPROFILE=sys.dtprofile DTPROFILE=.dtprofile if [ ! -f $HOME/$DTPROFILE ]; then for i in $DT_CONFIG_PATH do if [ -f $i/$DTSYSPROFILE ]; then /usr/bin/awk ' BEGIN {printit=1} /SYSPROFILE COMMENT START/ {printit=0; next} /SYSPROFILE COMMENT END/ {printit=1; next} printit==1 {print}' <$i/$DTSYSPROFILE >$HOME/$DTPROFILE /bin/chmod 755 $HOME/$DTPROFILE break fi done fi HASH HASH source the .dtprofile. HASH if [ -f $HOME/$DTPROFILE ]; then dtprofile_errors=`/bin/ksh -n $HOME/$DTPROFILE 2>&1` if [ "0" = "$?" ]; then Log "sourcing $HOME/$DTPROFILE..." . $HOME/$DTPROFILE else Log "not sourcing $HOME/$DTPROFILE due to errors..." Log "$dtprofile_errors" fi fi XCOMM ########################################################################## XCOMM XCOMM External Xsession processing section XCOMM XCOMM This section searches the Xsession.d subdirectory and sources XCOMM the files contained therein. The purpose is to set up any XCOMM per-user/per-session environment customizations and thereby propagate XCOMM them to applications and desktop components. XCOMM XCOMM ########################################################################## DT_XSESSION_DIR=Xsession.d for i in $DT_CONFIG_PATH do if [[ -d $i/$DT_XSESSION_DIR ]]; then HASH HASH Run custom Xsession scripts for this session. HASH for SCRIPT in $(ls $i/$DT_XSESSION_DIR); do if [ -x $i/$DT_XSESSION_DIR/$SCRIPT -a \ \( ! -d $i/$DT_XSESSION_DIR/$SCRIPT \) ]; then Log "sourcing $i/$DT_XSESSION_DIR/$SCRIPT..." . $i/$DT_XSESSION_DIR/$SCRIPT fi done fi done XCOMM ########################################################################## XCOMM XCOMM Startup section. XCOMM XCOMM Note: The ksh syntax ${parameter%% *} is used when appropriate to XCOMM remove any command line options that may have been included XCOMM in the definition of a DT executable below. XCOMM XCOMM ########################################################################## XCOMM XCOMM Return first command in array named by $1 that is executable XCOMM GetFirst() { let i=0 while true; do eval "cmd=\${$1[$i]}" [ -z "$cmd" ] && break [ -x "${cmd%% *}" ] && echo "$cmd" && break Log "could not start $cmd" let i=$i+1 done } XCOMM XCOMM Start first command in array named by $1 that is executable. If XCOMM $2 is 'eval', command result will be 'eval'ed. XCOMM StartFirst() { first=$(GetFirst $1) if [ ! -z "$first" ]; then Log "starting $first" if [ "$2" = "eval" ]; then eval `eval "PATH=$DT_BINPATH:$PATH $first"` else eval "PATH=$DT_BINPATH:$PATH $first" fi fi } HASH HASH Prepare for session startup HASH if [ "$DTSOURCEPROFILE" = "true" ] then case ${SHELL##*/} in sh | ksh | dtksh) shellprofile="$HOME/.profile";; bash) shellprofile="$HOME/.bash_profile";; csh | tcsh) shellprofile="$HOME/.login";; *) Log "non-standard shell $SHELL" esac fi if [ "$shellprofile" -a ! -f "$shellprofile" ] then Log "could not read $shellprofile" unset shellprofile fi if [ "$SESSIONTYPE" = "xdm" ]; then startup=$(GetFirst xdmstart_session) # get xdm session client StartFirst xdmstart_hello # start xdm hello client else startup=$(GetFirst dtstart_session) # get desktop session client StartFirst dtstart_hello # start desktop hello client StartFirst dtstart_searchpath eval # setup desktop search paths tooltalk=$(GetFirst dtstart_ttsession) # get tooltalk client dtdbcache=$(GetFirst dtstart_dtdbcache) # get dtdbcache client #if defined(USL) || defined(sun) || defined(__uxp__) if [ -z "$SDT_NO_DSDM" ]; then StartFirst dtstart_dsdm # start drag and drop proxy fi #endif StartFirst dtstart_appgather # setup session applications fi HASH HASH Start the session. HASH if [ $shellprofile ]; then Log "execing $startup using $shellprofile..." case ${SHELL##*/} in sh | bash | ksh | dtksh) dotprofile_errors=`$SHELL -n $shellprofile 2>&1` if [ "0" = "$?" ]; then source_profile=". $shellprofile" source_login="source $shellprofile" else Log "parse errors found in $shellprofile..." Log "$dotprofile_errors" source_profile="echo 'not execing $shellprofile due to errors'" source_login="echo 'not execing $shellprofile due to errors'" fi;; *) source_profile=". $shellprofile" source_login="source $shellprofile";; esac else Log "execing $startup..." source_profile="echo 'not execing $HOME/.profile (see $HOME/.dtprofile)'" source_login="echo 'not execing $HOME/.login (see $HOME/.dtprofile)'" fi if [ -z "$dtdbcache" ]; then dtdbcache="echo could not start $dtstart_dtdbcache" fi export DT=true; case ${SHELL##*/} in sh | bash) $SHELL -c "$source_profile; \ unset DT; \ $dtdbcache; \ PATH=/usr/dt/bin:\$PATH $tooltalk; \ $startup > $dtstart_sessionlogfile 2>&1" ;; ksh | dtksh) $SHELL -c "$source_profile; \ unset DT; \ $dtdbcache; \ PATH=/usr/dt/bin:\$PATH $tooltalk;\ $startup >| $dtstart_sessionlogfile 2>&1" ;; csh | tcsh) $SHELL -c "unsetenv _ PWD; \ $source_login; \ unsetenv DT; \ $dtdbcache; \ (set path = ( $DT_BINPATH \$path ); $tooltalk ); \ $startup >&! $dtstart_sessionlogfile" ;; *) unset DT $dtdbcache StartFirst dtstart_ttsession $startup >| $dtstart_sessionlogfile 2>&1 ;; esac $dtdbcacherm # remove the actions/datatypes cachefile XCOMM #################### eof #################################