diff options
Diffstat (limited to 'debian/Xsession')
-rw-r--r-- | debian/Xsession | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/debian/Xsession b/debian/Xsession new file mode 100644 index 0000000..ff30f64 --- /dev/null +++ b/debian/Xsession @@ -0,0 +1,198 @@ +#!/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: +# failsafe - Run an xterm only +# 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. +# +# based on: +# $XConsortium: Xsession /main/10 1995/12/18 18:21:28 gildea $ + +PROGNAME=Xsession + +message () { + # pretty-print messages of arbitrary length; use xmessage if it + # is available and $DISPLAY is set + MESSAGE="$PROGNAME: $*" + echo "$MESSAGE" | fold -s -w ${COLUMNS:-80} >&2 + if [ -n "$DISPLAY" ]; then + if [ -n "$zenity" ]; then + "$zenity" --info --text "$MESSAGE" + elif [ -n "$xmessage" ]; then + echo "$MESSAGE" | fold -s -w ${COLUMNS:-80} | $xmessage -center -file - + fi + fi +} + +message_nonl () { + # pretty-print messages of arbitrary length (no trailing newline); use + # xmessage if it is available and $DISPLAY is set + MESSAGE="$PROGNAME: $*" + echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} >&2; + if [ -n "$DISPLAY" ]; then + if [ -n "$zenity" ]; then + "$zenity" --info --text "$MESSAGE" + elif [ -n "$xmessage" ]; then + echo -n "$MESSAGE" | fold -s -w ${COLUMNS:-80} | $xmessage -center -file - + fi + fi +} + +errormsg () { + # exit script with error + message "$*" + exit 1 +} + +internal_errormsg () { + # exit script with error; essentially a "THIS SHOULD NEVER HAPPEN" message + # One big call to message() for the sake of xmessage; if we had two then + # the user would have dismissed the error we want reported before seeing the + # request to report it. + errormsg "$*" \ + "Please report the installed version of the \"x11-common\"" \ + "package and the complete text of this error message to" \ + "<debian-x@lists.debian.org>." +} + +# initialize variables for use by all session scripts + +OPTIONFILE=/etc/X11/Xsession.options + +SYSRESOURCES=/etc/X11/Xresources +USRRESOURCES=$HOME/.Xresources + +SYSSESSIONDIR=/etc/X11/Xsession.d +USERXSESSION=$HOME/.xsession +USERXSESSIONRC=$HOME/.xsessionrc +ALTUSERXSESSION=$HOME/.Xsession + +# 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" + +zenity=`which zenity 2>/dev/null` +xmessage=`which xmessage 2>/dev/null` + +command="$1" + +if [ -z "$command" ] ; then + command=failsafe +fi + +if [ x"$command" = xfailsafe ] ; then + if [ -n "$zenity" ] ; then + "$zenity" --info --text "This is the failsafe xterm session. Windows now have focus only if you have your cursor above them. To get out of this mode type 'exit' in the window in the upper left corner" + else + echo "$0: Starting the failsafe xterm session." + fi + exec xterm -geometry 80x24+0+0 +fi + +# clean up after xbanner +freetemp=`which freetemp 2>/dev/null` +if [ -n "$freetemp" ] ; then + "$freetemp" +fi + +usermodmap="$HOME/.Xmodmap" +userxkbmap="$HOME/.Xkbmap" + +if [ -f "$userxkbmap" ]; then + setxkbmap `cat "$userxkbmap"` + XKB_IN_USE=yes +fi + +# xkb and xmodmap don't play nice together +if [ -z "$XKB_IN_USE" ]; then + if [ -f "$usermodmap" ]; then + xmodmap "$usermodmap" + fi +fi + +unset XKB_IN_USE + +if [ -n "$GDM_LANG" ]; then + # Set the locale to that, it’s the language selected in GDM. + LANG="$GDM_LANG" + export LANG + + if [ -n "$LC_ALL" ] && [ "$LC_ALL" != "$LANG" ]; then + LC_ALL="$LANG" + fi + + # if GDM_LANG isn't first in LANGUAGE, then unset it. + if [ -n "$LANGUAGE" ]; then + if echo "$LANGUAGE" | grep -q -- "^$GDM_LANG"; then + : + else + unset LANGUAGE + fi + fi +fi + +# The default Debian session runs xsession first, so we just do that for +# "custom" +if [ "x$command" = "xcustom" ] ; then + shift + set default $* +fi + +OPTIONS="$( + if [ -r "$OPTIONFILE" ]; then + cat "$OPTIONFILE" + fi + if [ -d /etc/X11/Xsession.options.d ]; then + run-parts --list --regex '\.conf$' /etc/X11/Xsession.options.d + fi +)" + +has_option() { + # Ensure that a later no-foo overrides an earlier foo + if [ "$(echo "$OPTIONS" | grep -Eo "^(no-)?$1\>" | tail -n 1)" = "$1" ]; then + return 0 + else + return 1 + fi +} + +# use run-parts to source every file in the session directory; we source +# instead of executing so that the variables and functions defined above +# are available to the scripts, and so that they can pass variables to each +# other +SESSIONFILES=$(run-parts --list $SYSSESSIONDIR) +if [ -n "$SESSIONFILES" ]; then + for SESSIONFILE in $SESSIONFILES; do + . $SESSIONFILE + done +fi + +echo "$0: Executing $command failed, will try to run x-terminal-emulator" + +if [ -n "$zenity" ] ; then + "$zenity" --info --text "I could not start your session and so I have started the failsafe xterm session. Windows now have focus only if you have your cursor above them. To get out of this mode type 'exit' in the window in the upper left corner" +fi + +exec x-terminal-emulator -geometry 80x24+0+0 |