Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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 wrong
- echo "$0: Beginning session setup..."
- # First read /etc/profile and .profile
- test -f /etc/profile && . /etc/profile
- test -f "$HOME/.profile" && . "$HOME/.profile"
- # Second read /etc/xprofile and .xprofile for X specific setup
- test -f /etc/xprofile && . /etc/xprofile
- test -f "$HOME/.xprofile" && . "$HOME/.xprofile"
- # Translation stuff
- if [ -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 utf8
- gettextfunc () {
- if [ "x$gdmtranslate" != "x" ] ; then
- "$gdmtranslate" --utf8 "$1"
- else
- echo "$1"
- fi
- }
- OLD_IFS=$IFS
- gdmwhich () {
- 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 xbanner
- freetemp=`gdmwhich freetemp`
- if [ -n "$freetemp" ] ; then
- "$freetemp"
- fi
- userresources="$HOME/.Xresources"
- usermodmap="$HOME/.Xmodmap"
- userxkbmap="$HOME/.Xkbmap"
- sysresources=/etc/X11/Xresources
- sysmodmap=/etc/X11/Xmodmap
- sysxkbmap=/etc/X11/Xkbmap
- rh6sysresources=/etc/X11/xinit/Xresources
- rh6sysmodmap=/etc/X11/xinit/Xmodmap
- # merge in defaults
- if [ -f "$rh6sysresources" ]; then
- xrdb -nocpp -merge "$rh6sysresources"
- fi
- if [ -f "$sysresources" ]; then
- xrdb -nocpp -merge "$sysresources"
- fi
- if [ -f "$userresources" ]; then
- xrdb -nocpp -merge "$userresources"
- fi
- # merge in keymaps
- if [ -f "$sysxkbmap" ]; then
- setxkbmap `cat "$sysxkbmap"`
- XKB_IN_USE=yes
- fi
- if [ -f "$userxkbmap" ]; then
- setxkbmap `cat "$userxkbmap"`
- XKB_IN_USE=yes
- fi
- #
- # 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
- fi
- fi
- # xkb and xmodmap don't play nice together
- if [ -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"
- fi
- fi
- unset XKB_IN_USE
- xhost +si:localuser:`id -un` || :
- # 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
- done
- fi
- if [ "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"
- fi
- fi
- if [ "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
- fi
- fi
- # add ssh-agent if found
- sshagent="`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!"
- fi
- echo "$0: Setup done, will execute: $command"
- eval exec $command
- echo "$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"
- fi
- exec xterm -geometry 80x24+0+0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement