346c5a85beb75755df96ed06b23c6613495cede0vboxsync# Oracle VM VirtualBox
346c5a85beb75755df96ed06b23c6613495cede0vboxsync# VirtualBox Linux Guest Additions installer - autologon module
346c5a85beb75755df96ed06b23c6613495cede0vboxsync#
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync# Copyright (C) 2012 Oracle Corporation
346c5a85beb75755df96ed06b23c6613495cede0vboxsync#
346c5a85beb75755df96ed06b23c6613495cede0vboxsync# This file is part of VirtualBox Open Source Edition (OSE), as
346c5a85beb75755df96ed06b23c6613495cede0vboxsync# available from http://www.virtualbox.org. This file is free software;
346c5a85beb75755df96ed06b23c6613495cede0vboxsync# you can redistribute it and/or modify it under the terms of the GNU
346c5a85beb75755df96ed06b23c6613495cede0vboxsync# General Public License (GPL) as published by the Free Software
346c5a85beb75755df96ed06b23c6613495cede0vboxsync# Foundation, in version 2 as it comes in the "COPYING" file of the
346c5a85beb75755df96ed06b23c6613495cede0vboxsync# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
346c5a85beb75755df96ed06b23c6613495cede0vboxsync# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
346c5a85beb75755df96ed06b23c6613495cede0vboxsync#
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync# @todo Document functions and their usage!
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsyncMOD_AUTOLOGON_DEFAULT_LIGHTDM_CONFIG="/etc/lightdm/lightdm.conf"
346c5a85beb75755df96ed06b23c6613495cede0vboxsyncMOD_AUTOLOGON_DEFAULT_LIGHTDM_GREETER_DIR="/usr/share/xgreeters"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsyncmod_autologon_init()
346c5a85beb75755df96ed06b23c6613495cede0vboxsync{
346c5a85beb75755df96ed06b23c6613495cede0vboxsync echo "Initializing auto-logon support ..."
346c5a85beb75755df96ed06b23c6613495cede0vboxsync return 0
346c5a85beb75755df96ed06b23c6613495cede0vboxsync}
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsyncmod_autologon_install_ex()
346c5a85beb75755df96ed06b23c6613495cede0vboxsync{
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Installing auto-logon support ..."
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync ## Parameters:
346c5a85beb75755df96ed06b23c6613495cede0vboxsync # Greeter directory. Defaults to /usr/share/xgreeters.
346c5a85beb75755df96ed06b23c6613495cede0vboxsync greeter_dir="$1"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync # LightDM config. Defaults to /etc/lightdm/lightdm.conf.
346c5a85beb75755df96ed06b23c6613495cede0vboxsync lightdm_config="$2"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync # Whether to force installation if non-compatible distribution
346c5a85beb75755df96ed06b23c6613495cede0vboxsync # is detected.
346c5a85beb75755df96ed06b23c6613495cede0vboxsync force="$3"
d3e0466e19699ab16033a59cd252b173e568abd1vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync # Check for Ubuntu and derivates. @todo Debian?
346c5a85beb75755df96ed06b23c6613495cede0vboxsync distros="Ubuntu UbuntuStudio Edubuntu Kubuntu Lubuntu Mythbuntu Xubuntu"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync ## @todo Map Linux Mint versions to Ubuntu ones.
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync ## @todo Move the distro check to a routine / globals as soon as
346c5a85beb75755df96ed06b23c6613495cede0vboxsync ## we have other distribution-dependent stuff.
346c5a85beb75755df96ed06b23c6613495cede0vboxsync which lsb_release &>/dev/null
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if test "$?" -ne "0"; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Error: lsb_release not found (path set?), skipping auto-logon installation"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync return 1
346c5a85beb75755df96ed06b23c6613495cede0vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync distro_name=$(lsb_release -si)
346c5a85beb75755df96ed06b23c6613495cede0vboxsync distro_ver=$(lsb_release -sr)
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync for distro_cur in ${distros}; do
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if test "$distro_name" = "$distro_cur"; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync distro_found="true"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync break
346c5a85beb75755df96ed06b23c6613495cede0vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync done
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if test -z "$distro_found"; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if ! test "$force" = "force"; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Error: Unsupported distribution \"$distro_name\" found, skipping auto-logon installation"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync return 1
346c5a85beb75755df96ed06b23c6613495cede0vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Warning: Unsupported distribution \"$distro_name\" found"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync else
346c5a85beb75755df96ed06b23c6613495cede0vboxsync # Do we have Ubuntu 11.10 or greater?
346c5a85beb75755df96ed06b23c6613495cede0vboxsync # Use AWK for comparison since we run on plan sh.
346c5a85beb75755df96ed06b23c6613495cede0vboxsync echo | awk 'END { exit ( !('"$distro_ver >= 11.10"') ); }'
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if test "$?" -ne "0"; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if ! test "$force" = "force"; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Error: Version $distro_ver of \"$distro_name\" not supported, skipping auto-logon installation"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync return 1
346c5a85beb75755df96ed06b23c6613495cede0vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Warning: Unsupported \"$distro_name\" version $distro_ver found"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync # Install dependencies (lightdm and FLTK 1.3+) using apt-get.
346c5a85beb75755df96ed06b23c6613495cede0vboxsync which apt-get &>/dev/null
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if test "$?" -ne "0"; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Error: apt-get not found (path set?), skipping auto-logon installation"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync return 1
346c5a85beb75755df96ed06b23c6613495cede0vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Checking and installing necessary dependencies ..."
346c5a85beb75755df96ed06b23c6613495cede0vboxsync apt-get -qqq -y install libfltk1.3 libfltk-images1.3 || return 1
346c5a85beb75755df96ed06b23c6613495cede0vboxsync apt-get -qqq -y install lightdm || return 1
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync # Check for LightDM config.
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if ! test -f "$lightdm_config"; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Error: LightDM config \"$lightdm_config\" not found (LightDM installed?), skipping auto-logon installation"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync return 1
d3e0466e19699ab16033a59cd252b173e568abd1vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync # Check for /usr/share/xgreeters.
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if ! test -d "$greeter_dir"; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if ! test "$force" = "force"; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Error: Directory \"$greeter_dir\" does not exist, skipping auto-logon installation"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync return 1
346c5a85beb75755df96ed06b23c6613495cede0vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Warning: Directory \"$greeter_dir\" does not exist, creating it"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync mkdir -p -m 755 "$greeter_dir" || return 1
346c5a85beb75755df96ed06b23c6613495cede0vboxsync fi
d3e0466e19699ab16033a59cd252b173e568abd1vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync # Link to required greeter files into $greeter_dir.
346c5a85beb75755df96ed06b23c6613495cede0vboxsync add_symlink "$INSTALLATION_DIR/share/VBoxGuestAdditions/vbox-greeter.desktop" "$greeter_dir/vbox-greeter.desktop"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync # Backup and activate greeter config.
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if ! test -f "$lightdm_config.vbox-backup"; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Backing up LightDM configuration file ..."
346c5a85beb75755df96ed06b23c6613495cede0vboxsync cp "$lightdm_config" "$lightdm_config.vbox-backup" || return 1
346c5a85beb75755df96ed06b23c6613495cede0vboxsync chmod 644 "$lightdm_config.vbox-backup" || return 1
346c5a85beb75755df96ed06b23c6613495cede0vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync sed -i -e 's/^\s*greeter-session\s*=.*/greeter-session=vbox-greeter/g' "$lightdm_config" || return 1
346c5a85beb75755df96ed06b23c6613495cede0vboxsync chmod 644 "$lightdm_config" || return 1
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Auto-logon installation successful"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync return 0
346c5a85beb75755df96ed06b23c6613495cede0vboxsync}
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsyncmod_autologon_install()
346c5a85beb75755df96ed06b23c6613495cede0vboxsync{
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if [ -z "$MOD_AUTOLOGON_LIGHTDM_GREETER_DIR" ]; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync MOD_AUTOLOGON_LIGHTDM_GREETER_DIR=$MOD_AUTOLOGON_DEFAULT_LIGHTDM_GREETER_DIR
346c5a85beb75755df96ed06b23c6613495cede0vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if [ -z "$MOD_AUTOLOGON_LIGHTDM_CONFIG" ]; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync MOD_AUTOLOGON_LIGHTDM_CONFIG=$MOD_AUTOLOGON_DEFAULT_LIGHTDM_CONFIG
346c5a85beb75755df96ed06b23c6613495cede0vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync mod_autologon_install_ex "$MOD_AUTOLOGON_LIGHTDM_GREETER_DIR" "$MOD_AUTOLOGON_LIGHTDM_CONFIG" "$MOD_AUTOLOGON_FORCE"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync return $?
346c5a85beb75755df96ed06b23c6613495cede0vboxsync}
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsyncmod_autologon_pre_uninstall()
346c5a85beb75755df96ed06b23c6613495cede0vboxsync{
346c5a85beb75755df96ed06b23c6613495cede0vboxsync echo "Preparing to uninstall auto-logon support ..."
346c5a85beb75755df96ed06b23c6613495cede0vboxsync return 0
346c5a85beb75755df96ed06b23c6613495cede0vboxsync}
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsyncmod_autologon_uninstall()
346c5a85beb75755df96ed06b23c6613495cede0vboxsync{
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if test -z "$MOD_AUTOLOGON_LIGHTDM_CONFIG"; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync return 0
346c5a85beb75755df96ed06b23c6613495cede0vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Un-installing auto-logon support ..."
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync # Switch back to original greeter.
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if test -f "$MOD_AUTOLOGON_LIGHTDM_CONFIG.vbox-backup"; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync mv "$MOD_AUTOLOGON_LIGHTDM_CONFIG.vbox-backup" "$MOD_AUTOLOGON_LIGHTDM_CONFIG"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync if test "$?" -ne "0"; then
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Warning: Could not restore original LightDM config \"$MOD_AUTOLOGON_LIGHTDM_CONFIG\""
d3e0466e19699ab16033a59cd252b173e568abd1vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync fi
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync # Remove greeter directory (if not empty).
346c5a85beb75755df96ed06b23c6613495cede0vboxsync rm "$MOD_AUTOLOGON_LIGHTDM_GREETER_DIR" 2>/dev/null
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsync info "Auto-logon uninstallation successful"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync return 0
346c5a85beb75755df96ed06b23c6613495cede0vboxsync}
346c5a85beb75755df96ed06b23c6613495cede0vboxsync
346c5a85beb75755df96ed06b23c6613495cede0vboxsyncmod_autologon_config_save()
346c5a85beb75755df96ed06b23c6613495cede0vboxsync{
346c5a85beb75755df96ed06b23c6613495cede0vboxsync echo "
346c5a85beb75755df96ed06b23c6613495cede0vboxsyncMOD_AUTOLOGON_LIGHTDM_CONFIG='$MOD_AUTOLOGON_LIGHTDM_CONFIG'
346c5a85beb75755df96ed06b23c6613495cede0vboxsyncMOD_AUTOLOGON_LIGHTDM_GREETER_DIR='$MOD_AUTOLOGON_LIGHTDM_GREETER_DIR'"
346c5a85beb75755df96ed06b23c6613495cede0vboxsync}
346c5a85beb75755df96ed06b23c6613495cede0vboxsync