#!/bin/sh
# (C) 2008 Canonical Ltd.
# Author: Martin Pitt <martin.pitt@ubuntu.com>
# License: GPL v2 or later
#
# Convenience wrapper to trigger a guest session
#

# process arguments
args_check() {
    lock=1
    if [ $# = 0 ] || [ $# = 1 -a $1 = '--lock' ]; then
        return
    elif [ $# = 1 -a $1 = '--no-lock' ]; then
        lock=''
        return
    fi

    usage() { cat <<EOT
Usage: guest-session [OPTION]
Options:
     --lock         lock the screen for the current session (default)
     --no-lock      launch a guest session without screen locking
 -h, --help         display this message and exit
EOT
    }

    if [ $# = 1 -a $1 = '-h' -o $1 = '--help' ]; then
        usage
        exit 0
    else
        echo "Error: Invalid option and/or too many (> one) options."
        usage
        exit 1
    fi
}
args_check $@

# prepare possible local guest session preferences
test -f /etc/guest-session/prepare.sh && . /etc/guest-session/prepare.sh

if [ -z "$GDMSESSION" ] ; then
    GDMSESSION="gnome"
fi

if [ -n "$lock" ]; then
    gnome-screensaver-command --lock || xscreensaver-command -lock || {
        zenity --error --title='Error: Could not lock screen' \
          --text='You need a lockable screensaver to launch a guest session without the --no-lock option.'
        exit 1
    }
fi
dbus-send --system --print-reply --dest=org.gnome.DisplayManager /org/gnome/DisplayManager/LocalDisplayFactory org.gnome.DisplayManager.LocalDisplayFactory.StartGuestSession string:"$GDMSESSION"
