All pastes #1990893 Raw Edit

/etc/gdm/Xsession

public shellscript v1 · immutable
#1990893 ·published 2010-11-14 07:03 UTC
rendered paste body
#!/bin/sh## This is SORT OF LIKE an X session, but not quite.  You get a command as the# first argument (it could be multiple words, so run it with "eval").  As a# special case, the command can be:#  default - Run the appropriate Xclients startup (see the code below)#  custom - Run ~/.xsession and if that's not available run 'default'## (Note that other arguments could also follow, but only the command one is# right now relevant and supported)## The output is ALREADY redirected to .xsession-errors in GDM.  This way# .xsession-errors actually gets more output such as if the PreSession script# is failing.  This also prevents DoS attacks if some app in the users session# can be prodded to dump lots of stuff on the stdout/stderr.  We wish to be# robust don't we?  In case you wish to use an existing script for other DM's,# you can just not redirect when GDMSESSION is set.  GDMSESSION will always# be set from gdm.## Also note that this is not run as a login shell, this is just executed.# This is why we source the profile files below.## based on:# $XConsortium: Xsession /main/10 1995/12/18 18:21:28 gildea $command="$@"# this will go into the .xsession-errors along with all other echo's# good for debugging where things went wrongecho "$0: Beginning session setup..."# First read /etc/profile and .profiletest -f /etc/profile && . /etc/profiletest -f "$HOME/.profile" && . "$HOME/.profile"# Second read /etc/xprofile and .xprofile for X specific setuptest -f /etc/xprofile && . /etc/xprofiletest -f "$HOME/.xprofile" && . "$HOME/.xprofile"# Translation stuffif [ -x "/usr/lib/gdm/gdmtranslate" ] ; then  gdmtranslate="/usr/lib/gdm/gdmtranslate"else  gdmtranslate=fi# Note that this should only go to zenity dialogs which always expect utf8gettextfunc () {  if [ "x$gdmtranslate" != "x" ] ; then    "$gdmtranslate" --utf8 "$1"  else    echo "$1"  fi}OLD_IFS=$IFSgdmwhich () {  COMMAND="$1"  OUTPUT=  IFS=:  for dir in $PATH  do    if test -x "$dir/$COMMAND" ; then      if test "x$OUTPUT" = "x" ; then        OUTPUT="$dir/$COMMAND"      fi    fi  done  IFS=$OLD_IFS   echo "$OUTPUT"}zenity=`gdmwhich zenity`# Note: ~/.xsession-errors is now done in the daemon so that it# works for ALL sessions (except ones named 'Failsafe')# clean up after xbannerfreetemp=`gdmwhich freetemp`if [ -n "$freetemp" ] ; then	"$freetemp"fiuserresources="$HOME/.Xresources"usermodmap="$HOME/.Xmodmap"userxkbmap="$HOME/.Xkbmap"sysresources=/etc/X11/Xresources sysmodmap=/etc/X11/Xmodmap sysxkbmap=/etc/X11/Xkbmaprh6sysresources=/etc/X11/xinit/Xresources rh6sysmodmap=/etc/X11/xinit/Xmodmap # merge in defaultsif [ -f "$rh6sysresources" ]; then    xrdb -nocpp -merge "$rh6sysresources"fiif [ -f "$sysresources" ]; then    xrdb -nocpp -merge "$sysresources"fiif [ -f "$userresources" ]; then    xrdb -nocpp -merge "$userresources"fi# merge in keymapsif [ -f "$sysxkbmap" ]; then    setxkbmap `cat "$sysxkbmap"`    XKB_IN_USE=yesfiif [ -f "$userxkbmap" ]; then    setxkbmap `cat "$userxkbmap"`    XKB_IN_USE=yesfi## Eeek, this seems like too much magic here#if [ -z "$XKB_IN_USE" -a ! -L /etc/X11/X ]; then    if grep '^exec.*/Xsun' /etc/X11/X > /dev/null 2>&1 && [ -f /etc/X11/XF86Config ]; then       xkbsymbols=`sed -n -e 's/^[     ]*XkbSymbols[   ]*"\(.*\)".*$/\1/p' /etc/X11/XF86Config`       if [ -n "$xkbsymbols" ]; then           setxkbmap -symbols "$xkbsymbols"           XKB_IN_USE=yes       fi    fifi# xkb and xmodmap don't play nice togetherif [ -z "$XKB_IN_USE" ]; then    if [ -f "$rh6sysmodmap" ]; then       xmodmap "$rh6sysmodmap"    fi    if [ -f "$sysmodmap" ]; then       xmodmap "$sysmodmap"    fi    if [ -f "$usermodmap" ]; then       xmodmap "$usermodmap"    fifiunset XKB_IN_USE# Overwrite $LANG from /etc/profile (and friends) with the one picked in the# greeterif [ -n "$GDM_LANG" ]; then  LANG="$GDM_LANG"  export LANGfi# run all system xinitrc shell scripts.if [ -d /etc/X11/xinit/xinitrc.d ]; then    for i in /etc/X11/xinit/xinitrc.d/* ; do        if [ -x "$i" -a ! -d "$i" ]; then	    . "$i"        fi    donefi# run /etc/X11/Xsession.d/OPTIONFILE=/etc/X11/Xsession.optionsUSERXSESSION=$HOME/.xsessionUSERXSESSIONRC=$HOME/.xsessionrcALTUSERXSESSION=$HOME/.Xsessionif [ -d /etc/X11/Xsession.d ]; then    for i in `ls /etc/X11/Xsession.d/` ; do        if [ -r "/etc/X11/Xsession.d/$i" ] && expr "$i" : '^[[:alnum:]_-]\+$' > /dev/null; then	    . "/etc/X11/Xsession.d/$i"        fi    donefiif [ "x$command" = "xcustom" ] ; then  if [ -x "$HOME/.xsession" ]; then    command="$HOME/.xsession"  else    echo "$0: Cannot find ~/.xsession will try the default session"    command="default"  fifiif [ "x$command" = "xdefault" ] ; then  if [ -x "$HOME/.Xclients" ]; then    command="$HOME/.Xclients"  elif [ -x /etc/X11/xinit/Xclients ]; then    command="/etc/X11/xinit/Xclients"  elif [ -x /etc/X11/Xclients ]; then    command="/etc/X11/Xclients"  else    if [ -n "$zenity" ] ; then	disptext=`gettextfunc "System has no Xclients file, so starting a failsafe xterm session.  Windows will have focus only if the mouse pointer is above them.  To get out of this mode type 'exit' in the window."`      "$zenity" --info --text "$disptext"    else      echo "$0: Cannot find Xclients"    fi    exec xterm -geometry 80x24+0+0  fifi# add ssh-agent if foundsshagent="`gdmwhich ssh-agent`"if [ -n "$sshagent" ] && [ -x "$sshagent" ] && [ -z "$SSH_AUTH_SOCK" ]; then    command="$sshagent -- $command"elif [ -z "$sshagent" ] ; then    echo "$0: ssh-agent not found!"fiecho "$0: Setup done, will execute: $command"eval exec $commandecho "$0: Executing $command failed, will run xterm"if [ -n "$zenity" ] ; then	disptext=`gettextfunc "Failed to start the session, so starting a failsafe xterm session.  Windows will have focus only if the mouse pointer is above them.  To get out of this mode type 'exit' in the window."`	"$zenity" --info --text "$disptext"fiexec xterm -geometry 80x24+0+0