From e3b4202b45f3a52dbb61632a9133f2dd0c1da343 Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Mon, 12 Jun 2017 10:44:00 +0200 Subject: Make guest account support functional. Port various items from Ubuntu's LightDM package. --- Makefile.am | 8 + arctica-guest-account-script | 229 -------------------------- arctica-guest-account-script.in | 229 ++++++++++++++++++++++++++ arctica-guest-session-auto | 64 +++++++ arctica-guest-session-setup | 33 ++++ data/50-arctica-greeter.conf.in | 3 + data/50-arctica-guest-wrapper.conf.in | 2 + data/Makefile.am | 20 +++ data/arctica-guest-session-startup.desktop.in | 5 + debian/50-arctica-greeter.conf | 2 - debian/91-arctica-greeter-guest-session.conf | 2 +- debian/arctica-greeter-guest-session.install | 6 +- debian/arctica-greeter.install | 11 +- debian/rules | 2 - lightdm-arctica-greeter-session | 36 ++++ 15 files changed, 416 insertions(+), 236 deletions(-) delete mode 100755 arctica-guest-account-script create mode 100755 arctica-guest-account-script.in create mode 100755 arctica-guest-session-auto create mode 100755 arctica-guest-session-setup create mode 100644 data/50-arctica-greeter.conf.in create mode 100644 data/50-arctica-guest-wrapper.conf.in create mode 100644 data/arctica-guest-session-startup.desktop.in delete mode 100644 debian/50-arctica-greeter.conf create mode 100755 lightdm-arctica-greeter-session diff --git a/Makefile.am b/Makefile.am index 8035bf3..deac942 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2,8 +2,15 @@ SUBDIRS = src data po tests +arctica-guest-account-script: arctica-guest-account-script.in + $(AM_V_GEN) sed -e "s|\@pkglibexecdir\@|$(pkglibexecdir)|" $< > $@ + sbin_SCRIPTS = arctica-guest-account-script +pkglibexec_SCRIPTS = lightdm-arctica-greeter-session \ + arctica-guest-session-auto \ + arctica-guest-session-setup + EXTRA_DIST = \ autogen.sh \ arctica-greeter.doap @@ -11,6 +18,7 @@ EXTRA_DIST = \ DISTCLEANFILES = \ Makefile.in \ aclocal.m4 \ + arctica-guest-account-script \ configure \ config.h.in \ config.h \ diff --git a/arctica-guest-account-script b/arctica-guest-account-script deleted file mode 100755 index f618390..0000000 --- a/arctica-guest-account-script +++ /dev/null @@ -1,229 +0,0 @@ -#!/bin/sh -e -# (C) 2008 Canonical Ltd. -# Author: Martin Pitt -# License: GPL v2 or later -# modified by David D Lowe and Thomas Detoux -# -# Setup user and temporary home directory for guest session. -# If this succeeds, this script needs to print the username as the last line to -# stdout. - -export TEXTDOMAINDIR=/usr/share/locale-langpack -export TEXTDOMAIN=lightdm - -# set the system wide locale for gettext calls -if [ -f /etc/default/locale ]; then - . /etc/default/locale - LANGUAGE= - export LANG LANGUAGE -fi - -is_system_user () -{ - UID_MIN=$(cat /etc/login.defs | grep UID_MIN | awk '{print $2}') - SYS_UID_MIN=$(cat /etc/login.defs | grep SYS_UID_MIN | awk '{print $2}') - SYS_UID_MAX=$(cat /etc/login.defs | grep SYS_UID_MAX | awk '{print $2}') - - SYS_UID_MIN=${SYS_UID_MIN:-101} - SYS_UID_MAX=${SYS_UID_MAX:-$(( UID_MIN - 1 ))} - - [ ${1} -ge ${SYS_UID_MIN} ] && [ ${1} -le ${SYS_UID_MAX} ] -} - -add_account () -{ - temp_home=$(mktemp -td guest-XXXXXX) - GUEST_HOME=$(echo ${temp_home} | tr '[:upper:]' '[:lower:]') - GUEST_USER=${GUEST_HOME#/tmp/} - if [ "${GUEST_HOME}" != "${temp_home}" ]; then - mkdir "${GUEST_HOME}" || { - echo "Failed to create ${GUEST_USER}'s home directory (${GUEST_HOME})" - exit 1 - } - rmdir "${temp_home}" - fi - - # if ${GUEST_USER} already exists, it must be a locked system account with no existing - # home directory - if PWSTAT=$(passwd -S ${GUEST_USER}) 2>/dev/null; then - if [ $(echo ${PWSTAT} | cut -f2 -d' ') != L ]; then - echo "User account ${GUEST_USER} already exists and is not locked" - exit 1 - fi - - PWENT=$(getent passwd ${GUEST_USER}) || { - echo "getent passwd ${GUEST_USER} failed" - exit 1 - } - - GUEST_UID=$(echo ${PWENT} | cut -f3 -d:) - - if ! is_system_user ${GUEST_UID}; then - echo "Account ${GUEST_USER} is not a system user" - exit 1 - fi - - GUEST_HOME=$(echo ${PWENT} | cut -f6 -d:) - - if [ ${GUEST_HOME} != / ] && [ ${GUEST_HOME#/tmp} = ${GUEST_HOME} ] && [ -d ${GUEST_HOME} ]; then - echo "Home directory of ${GUEST_USER} already exists" - exit 1 - fi - else - # does not exist, so create it - useradd --system --home-dir ${GUEST_HOME} --comment $(gettext "Guest") --user-group --shell /bin/bash ${GUEST_USER} || { - rm -rf ${GUEST_HOME} - exit 1 - } - fi - - dist_gs=/usr/share/lightdm/guest-session - site_gs=/etc/guest-session - - # create temporary home directory - mount -t tmpfs -o mode=700,uid=${GUEST_USER} none ${GUEST_HOME} || { - rm -rf ${GUEST_HOME} - exit 1 - } - - if [ -d ${site_gs}/skel ] && [ "$(ls -A ${site_gs}/skel)" ]; then - # Only perform union-mounting if BindFS is available - if [ -x /usr/bin/bindfs ]; then - bindfs_mount=true - - # Try OverlayFS first - if modinfo -n overlay >/dev/null 2>&1; then - mkdir ${GUEST_HOME}/upper ${GUEST_HOME}/work - chown ${GUEST_USER}:${GUEST_USER} ${GUEST_HOME}/upper ${GUEST_HOME}/work - - mount -t overlay -o lowerdir=${dist_gs}/skel:${site_gs}/skel,upperdir=${GUEST_HOME}/upper,workdir=${GUEST_HOME}/work overlay ${GUEST_HOME} || { - umount ${GUEST_HOME} - rm -rf ${GUEST_HOME} - exit 1 - } - # If OverlayFS is not available, try AuFS - elif [ -x /sbin/mount.aufs ]; then - mount -t aufs -o br=${GUEST_HOME}:${dist_gs}/skel:${site_gs}/skel none ${GUEST_HOME} || { - umount ${GUEST_HOME} - rm -rf ${GUEST_HOME} - exit 1 - } - # If none of them is available, fall back to copy over - else - cp -rT ${site_gs}/skel/ ${GUEST_HOME} - cp -rT ${dist_gs}/skel/ ${GUEST_HOME} - chown -R ${GUEST_USER}:${GUEST_USER} ${GUEST_HOME} - bindfs_mount=false - fi - - if ${bindfs_mount}; then - # Wrap ${GUEST_HOME} in a BindFS mount, so that - # ${GUEST_USER} will be seen as the owner of ${GUEST_HOME}'s contents. - bindfs -u ${GUEST_USER} -g ${GUEST_USER} ${GUEST_HOME} ${GUEST_HOME} || { - umount ${GUEST_HOME} # union mount - umount ${GUEST_HOME} # tmpfs mount - rm -rf ${GUEST_HOME} - exit 1 - } - fi - # If BindFS is not available, just fall back to copy over - else - cp -rT ${site_gs}/skel/ ${GUEST_HOME} - cp -rT ${dist_gs}/skel/ ${GUEST_HOME} - chown -R ${GUEST_USER}:${GUEST_USER} ${GUEST_HOME} - fi - else - cp -rT /etc/skel/ ${GUEST_HOME} - cp -rT ${dist_gs}/skel/ ${GUEST_HOME} - chown -R ${GUEST_USER}:${GUEST_USER} ${GUEST_HOME} - fi - - # setup session - su ${GUEST_USER} -c "env HOME=${GUEST_HOME} site_gs=${site_gs} ${dist_gs}/setup.sh" - - # set possible local guest session preferences - source_local_prefs() { - local USER=${GUEST_USER} - local HOME=${GUEST_HOME} - . ${site_gs}/prefs.sh - chown -R ${USER}:${USER} ${HOME} - } - if [ -f ${site_gs}/prefs.sh ]; then - source_local_prefs - fi - - echo ${GUEST_USER} -} - -remove_account () -{ - GUEST_USER=${1} - - PWENT=$(getent passwd ${GUEST_USER}) || { - echo "Error: invalid user ${GUEST_USER}" - exit 1 - } - - GUEST_UID=$(echo ${PWENT} | cut -f3 -d:) - - if ! is_system_user ${GUEST_UID}; then - echo "Error: user ${GUEST_USER} is not a system user." - exit 1 - fi - - GUEST_HOME=$(echo ${PWENT} | cut -f6 -d:) - - # kill all remaining processes - if [ -x /bin/loginctl ] || [ -x /usr/bin/loginctl ]; then - loginctl --signal=9 kill-user ${GUEST_USER} >/dev/null || true - else - while ps h -u ${GUEST_USER} >/dev/null - do - killall -9 -u ${GUEST_USER} || true - sleep 0.2; - done - fi - - if [ ${GUEST_HOME} = ${GUEST_HOME#/tmp/} ]; then - echo "Warning: home directory ${GUEST_HOME} is not in /tmp/. It won't be removed." - else - umount ${GUEST_HOME} || umount -l ${GUEST_HOME} || true # BindFS mount - umount ${GUEST_HOME} || umount -l ${GUEST_HOME} || true # union mount - umount ${GUEST_HOME} || umount -l ${GUEST_HOME} || true # tmpfs mount - rm -rf ${GUEST_HOME} - fi - - # remove leftovers in /tmp - find /tmp -mindepth 1 -maxdepth 1 -uid ${GUEST_UID} -print0 | xargs -0 rm -rf || true - - # remove possible {/run,}/media/guest-XXXXXX folder - for media_dir in /run/media/${GUEST_USER} /media/${GUEST_USER}; do - if [ -d ${media_dir} ]; then - for dir in $(find ${media_dir} -mindepth 1 -maxdepth 1); do - umount ${dir} || true - done - - rmdir ${media_dir} || true - fi - done - - userdel --force ${GUEST_USER} -} - -case ${1} in - add) - add_account - ;; - remove) - if [ -z ${2} ] ; then - echo "Usage: ${0} remove [account]" - exit 1 - fi - - remove_account ${2} - ;; - *) - echo "Usage: ${0} add" - echo " ${0} remove [account]" - exit 1 -esac diff --git a/arctica-guest-account-script.in b/arctica-guest-account-script.in new file mode 100755 index 0000000..577c4b6 --- /dev/null +++ b/arctica-guest-account-script.in @@ -0,0 +1,229 @@ +#!/bin/sh -e +# (C) 2008 Canonical Ltd. +# Author: Martin Pitt +# License: GPL v2 or later +# modified by David D Lowe and Thomas Detoux +# +# Setup user and temporary home directory for guest session. +# If this succeeds, this script needs to print the username as the last line to +# stdout. + +export TEXTDOMAINDIR=/usr/share/locale-langpack +export TEXTDOMAIN=lightdm + +# set the system wide locale for gettext calls +if [ -f /etc/default/locale ]; then + . /etc/default/locale + LANGUAGE= + export LANG LANGUAGE +fi + +is_system_user () +{ + UID_MIN=$(cat /etc/login.defs | grep UID_MIN | awk '{print $2}') + SYS_UID_MIN=$(cat /etc/login.defs | grep SYS_UID_MIN | awk '{print $2}') + SYS_UID_MAX=$(cat /etc/login.defs | grep SYS_UID_MAX | awk '{print $2}') + + SYS_UID_MIN=${SYS_UID_MIN:-101} + SYS_UID_MAX=${SYS_UID_MAX:-$(( UID_MIN - 1 ))} + + [ ${1} -ge ${SYS_UID_MIN} ] && [ ${1} -le ${SYS_UID_MAX} ] +} + +add_account () +{ + temp_home=$(mktemp -td guest-XXXXXX) + GUEST_HOME=$(echo ${temp_home} | tr '[:upper:]' '[:lower:]') + GUEST_USER=${GUEST_HOME#/tmp/} + if [ "${GUEST_HOME}" != "${temp_home}" ]; then + mkdir "${GUEST_HOME}" || { + echo "Failed to create ${GUEST_USER}'s home directory (${GUEST_HOME})" + exit 1 + } + rmdir "${temp_home}" + fi + + # if ${GUEST_USER} already exists, it must be a locked system account with no existing + # home directory + if PWSTAT=$(passwd -S ${GUEST_USER}) 2>/dev/null; then + if [ $(echo ${PWSTAT} | cut -f2 -d' ') != L ]; then + echo "User account ${GUEST_USER} already exists and is not locked" + exit 1 + fi + + PWENT=$(getent passwd ${GUEST_USER}) || { + echo "getent passwd ${GUEST_USER} failed" + exit 1 + } + + GUEST_UID=$(echo ${PWENT} | cut -f3 -d:) + + if ! is_system_user ${GUEST_UID}; then + echo "Account ${GUEST_USER} is not a system user" + exit 1 + fi + + GUEST_HOME=$(echo ${PWENT} | cut -f6 -d:) + + if [ ${GUEST_HOME} != / ] && [ ${GUEST_HOME#/tmp} = ${GUEST_HOME} ] && [ -d ${GUEST_HOME} ]; then + echo "Home directory of ${GUEST_USER} already exists" + exit 1 + fi + else + # does not exist, so create it + useradd --system --home-dir ${GUEST_HOME} --comment $(gettext "Guest") --user-group --shell /bin/bash ${GUEST_USER} || { + rm -rf ${GUEST_HOME} + exit 1 + } + fi + + dist_gs=/usr/share/arctica-greeter/guest-session + site_gs=/etc/arctica-greeter/guest-session + + # create temporary home directory + mount -t tmpfs -o mode=700,uid=${GUEST_USER} none ${GUEST_HOME} || { + rm -rf ${GUEST_HOME} + exit 1 + } + + if [ -d ${site_gs}/skel ] && [ "$(ls -A ${site_gs}/skel)" ]; then + # Only perform union-mounting if BindFS is available + if [ -x /usr/bin/bindfs ]; then + bindfs_mount=true + + # Try OverlayFS first + if modinfo -n overlay >/dev/null 2>&1; then + mkdir ${GUEST_HOME}/upper ${GUEST_HOME}/work + chown ${GUEST_USER}:${GUEST_USER} ${GUEST_HOME}/upper ${GUEST_HOME}/work + + mount -t overlay -o lowerdir=${dist_gs}/skel:${site_gs}/skel,upperdir=${GUEST_HOME}/upper,workdir=${GUEST_HOME}/work overlay ${GUEST_HOME} || { + umount ${GUEST_HOME} + rm -rf ${GUEST_HOME} + exit 1 + } + # If OverlayFS is not available, try AuFS + elif [ -x /sbin/mount.aufs ]; then + mount -t aufs -o br=${GUEST_HOME}:${dist_gs}/skel:${site_gs}/skel none ${GUEST_HOME} || { + umount ${GUEST_HOME} + rm -rf ${GUEST_HOME} + exit 1 + } + # If none of them is available, fall back to copy over + else + cp -rT ${site_gs}/skel/ ${GUEST_HOME} + cp -rT ${dist_gs}/skel/ ${GUEST_HOME} + chown -R ${GUEST_USER}:${GUEST_USER} ${GUEST_HOME} + bindfs_mount=false + fi + + if ${bindfs_mount}; then + # Wrap ${GUEST_HOME} in a BindFS mount, so that + # ${GUEST_USER} will be seen as the owner of ${GUEST_HOME}'s contents. + bindfs -u ${GUEST_USER} -g ${GUEST_USER} ${GUEST_HOME} ${GUEST_HOME} || { + umount ${GUEST_HOME} # union mount + umount ${GUEST_HOME} # tmpfs mount + rm -rf ${GUEST_HOME} + exit 1 + } + fi + # If BindFS is not available, just fall back to copy over + else + cp -rT ${site_gs}/skel/ ${GUEST_HOME} + cp -rT ${dist_gs}/skel/ ${GUEST_HOME} + chown -R ${GUEST_USER}:${GUEST_USER} ${GUEST_HOME} + fi + else + cp -rT /etc/skel/ ${GUEST_HOME} + cp -rT ${dist_gs}/skel/ ${GUEST_HOME} + chown -R ${GUEST_USER}:${GUEST_USER} ${GUEST_HOME} + fi + + # setup session + su ${GUEST_USER} -c "env HOME=${GUEST_HOME} site_gs=${site_gs} @pkglibexecdir@/arctica-guest-session-setup" + + # set possible local guest session preferences + source_local_prefs() { + local USER=${GUEST_USER} + local HOME=${GUEST_HOME} + . ${site_gs}/prefs.sh + chown -R ${USER}:${USER} ${HOME} + } + if [ -f ${site_gs}/prefs.sh ]; then + source_local_prefs + fi + + echo ${GUEST_USER} +} + +remove_account () +{ + GUEST_USER=${1} + + PWENT=$(getent passwd ${GUEST_USER}) || { + echo "Error: invalid user ${GUEST_USER}" + exit 1 + } + + GUEST_UID=$(echo ${PWENT} | cut -f3 -d:) + + if ! is_system_user ${GUEST_UID}; then + echo "Error: user ${GUEST_USER} is not a system user." + exit 1 + fi + + GUEST_HOME=$(echo ${PWENT} | cut -f6 -d:) + + # kill all remaining processes + if [ -x /bin/loginctl ] || [ -x /usr/bin/loginctl ]; then + loginctl --signal=9 kill-user ${GUEST_USER} >/dev/null || true + else + while ps h -u ${GUEST_USER} >/dev/null + do + killall -9 -u ${GUEST_USER} || true + sleep 0.2; + done + fi + + if [ ${GUEST_HOME} = ${GUEST_HOME#/tmp/} ]; then + echo "Warning: home directory ${GUEST_HOME} is not in /tmp/. It won't be removed." + else + umount ${GUEST_HOME} || umount -l ${GUEST_HOME} || true # BindFS mount + umount ${GUEST_HOME} || umount -l ${GUEST_HOME} || true # union mount + umount ${GUEST_HOME} || umount -l ${GUEST_HOME} || true # tmpfs mount + rm -rf ${GUEST_HOME} + fi + + # remove leftovers in /tmp + find /tmp -mindepth 1 -maxdepth 1 -uid ${GUEST_UID} -print0 | xargs -0 rm -rf || true + + # remove possible {/run,}/media/guest-XXXXXX folder + for media_dir in /run/media/${GUEST_USER} /media/${GUEST_USER}; do + if [ -d ${media_dir} ]; then + for dir in $(find ${media_dir} -mindepth 1 -maxdepth 1); do + umount ${dir} || true + done + + rmdir ${media_dir} || true + fi + done + + userdel --force ${GUEST_USER} +} + +case ${1} in + add) + add_account + ;; + remove) + if [ -z ${2} ] ; then + echo "Usage: ${0} remove [account]" + exit 1 + fi + + remove_account ${2} + ;; + *) + echo "Usage: ${0} add" + echo " ${0} remove [account]" + exit 1 +esac diff --git a/arctica-guest-session-auto b/arctica-guest-session-auto new file mode 100755 index 0000000..8377528 --- /dev/null +++ b/arctica-guest-session-auto @@ -0,0 +1,64 @@ +#!/bin/sh +# +# Copyright (C) 2013 Canonical Ltd +# Author: Gunnar Hjalmarsson +# +# This program is free software: you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation, version 3 of the License. +# +# See http://www.gnu.org/copyleft/gpl.html the full text of the license. + +# This script is run via autostart at the launch of a guest session. + +export TEXTDOMAINDIR=/usr/share/locale-langpack +export TEXTDOMAIN=lightdm + +# disable screen locking (GNOME, Unity) +gsettings set org.gnome.desktop.lockdown disable-lock-screen true + +# disable screen locking (MATE) +gsettings set org.mate.screensaver lock-enabled false + +# disable screenlocking (XFCE, Pantheon) +gsettings set apps.light-locker light-locker-enabled false +gsettings set apps.light-locker late-locking false +gsettings set apps.light-locker lock-on-lid false +gsettings set apps.light-locker lock-on-suspend false + +# info dialog about the temporary nature of a guest session +dialog_content () { + TITLE=$(gettext 'Temporary Guest Session') + TEXT=$(gettext 'All data created during this guest session will be deleted +when you log out, and settings will be reset to defaults. +Please save files on some external device, for instance a +USB stick, if you would like to access them again later.') + para2=$(gettext 'Another alternative is to save files in the +/var/guest-data folder.') + test -w /var/guest-data && TEXT="$TEXT\n\n$para2" +} +test -f "$HOME"/.skip-guest-warning-dialog || { + if [ "$KDE_FULL_SESSION" = true ] && [ -x /usr/bin/kdialog ]; then + dialog_content + TEXT_FILE="$HOME"/.guest-session-kdialog + echo -n "$TEXT" > $TEXT_FILE + { + # Sleep to wait for the the info dialog to start. + # This way the window will likely become focused. + sleep $DIALOG_SLEEP + kdialog --title "$TITLE" --textbox $TEXT_FILE 450 250 + rm -f $TEXT_FILE + } & + elif [ -x /usr/bin/zenity ]; then + dialog_content + { + # Sleep to wait for the the info dialog to start. + # This way the window will likely become focused. + sleep $DIALOG_SLEEP + zenity --warning --no-wrap --title="$TITLE" --text="$TEXT" + } & + fi +} + +# run possible local startup commands +test -f /etc/guest-session/auto.sh && . /etc/guest-session/auto.sh diff --git a/arctica-guest-session-setup b/arctica-guest-session-setup new file mode 100755 index 0000000..595d0bc --- /dev/null +++ b/arctica-guest-session-setup @@ -0,0 +1,33 @@ +#!/bin/sh + +HOME=${HOME:-$(getent passwd $(whoami) | cut -f6 -d:)} + +# disable some services that are unnecessary for the guest session +services="jockey-kde.desktop jockey-gtk.desktop update-notifier.desktop user-dirs-update-gtk.desktop" + +for service in ${services}; do + if [ -e /etc/xdg/autostart/${service} ]; then + [ -f ${HOME}/.config/autostart/${service} ] || cp /etc/xdg/autostart/${service} ${HOME}/.config/autostart + echo "X-GNOME-Autostart-enabled=false" >> ${HOME}/.config/autostart/${service} + fi +done + +# disable Unity shortcut hint +[ -d ${HOME}/.cache/unity ] || mkdir -p ${HOME}/.cache/unity +touch ${HOME}/.cache/unity/first_run.stamp + +[ -d ${HOME}/.kde/share/config ] || mkdir -p ${HOME}/.kde/share/config +echo "[Basic Settings]" >> ${HOME}/.kde/share/config/nepomukserverrc +echo "Start Nepomuk=false" >> ${HOME}/.kde/share/config/nepomukserverrc + +echo "[Event]" >> ${HOME}/.kde/share/config/notificationhelper +echo "hideHookNotifier=true" >> ${HOME}/.kde/share/config/notificationhelper +echo "hideInstallNotifier=true" >> ${HOME}/.kde/share/config/notificationhelper +echo "hideRestartNotifier=true" >> ${HOME}/.kde/share/config/notificationhelper + +# Load restricted session +#dmrc='[Desktop]\nSession=guest-restricted' +#/bin/echo -e ${dmrc} > ${HOME}/.dmrc + +# delay the launch of info dialog +echo "export DIALOG_SLEEP=4" >> ${HOME}/.profile diff --git a/data/50-arctica-greeter.conf.in b/data/50-arctica-greeter.conf.in new file mode 100644 index 0000000..cac4c59 --- /dev/null +++ b/data/50-arctica-greeter.conf.in @@ -0,0 +1,3 @@ +[Seat:*] +greeter-session=arctica-greeter +greeter-wrapper=@pkglibexecdir@/lightdm-arctica-greeter-session diff --git a/data/50-arctica-guest-wrapper.conf.in b/data/50-arctica-guest-wrapper.conf.in new file mode 100644 index 0000000..1ccd04d --- /dev/null +++ b/data/50-arctica-guest-wrapper.conf.in @@ -0,0 +1,2 @@ +[Seat:*] +guest-wrapper=@libexecdir@/lightdm/lightdm-guest-session diff --git a/data/Makefile.am b/data/Makefile.am index 81f0ea6..af80b2a 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -1,5 +1,22 @@ # -*- Mode: Automake; indent-tabs-mode: t; tab-width: 4 -*- +50-arctica-greeter.conf: 50-arctica-greeter.conf.in + $(AM_V_GEN) sed -e "s|\@pkglibexecdir\@|$(pkglibexecdir)|" $< > $@ + +50-arctica-guest-wrapper.conf: 50-arctica-guest-wrapper.conf.in + $(AM_V_GEN) sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@ + +lightdm_confdir = $(datadir)/lightdm/lightdm.conf.d +lightdm_conf_DATA = \ + 50-arctica-greeter.conf \ + 50-arctica-guest-wrapper.conf + +arctica-guest-session-startup.desktop: arctica-guest-session-startup.desktop.in + $(AM_V_GEN) sed -e "s|\@pkglibexecdir\@|$(pkglibexecdir)|" $< > $@ + +guestsession_autostartdir = $(datadir)/arctica-greeter/guest-session/skel/.config/autostart +guestsession_autostart_DATA = arctica-guest-session-startup.desktop + xgreeterdir = $(datarootdir)/xgreeters dist_xgreeter_DATA = arctica-greeter.desktop @@ -64,5 +81,8 @@ EXTRA_DIST = \ $(gsettings_SCHEMAS) DISTCLEANFILES = \ + 50-arctica-greeter.conf \ + 50-arctica-guest-wrapper.conf \ + arctica-guest-session-startup.desktop \ Makefile.in \ logo.png diff --git a/data/arctica-guest-session-startup.desktop.in b/data/arctica-guest-session-startup.desktop.in new file mode 100644 index 0000000..c4d6d8d --- /dev/null +++ b/data/arctica-guest-session-startup.desktop.in @@ -0,0 +1,5 @@ +[Desktop Entry] +Name=Custom startup command for Arctica Greeter's guest session +Type=Application +NoDisplay=true +Exec=@pkglibexecdir@//arctica-guest-session-auto diff --git a/debian/50-arctica-greeter.conf b/debian/50-arctica-greeter.conf deleted file mode 100644 index d19ed15..0000000 --- a/debian/50-arctica-greeter.conf +++ /dev/null @@ -1,2 +0,0 @@ -[Seat:*] -greeter-session=arctica-greeter diff --git a/debian/91-arctica-greeter-guest-session.conf b/debian/91-arctica-greeter-guest-session.conf index 1c95904..54a3588 100644 --- a/debian/91-arctica-greeter-guest-session.conf +++ b/debian/91-arctica-greeter-guest-session.conf @@ -13,4 +13,4 @@ greeter-allow-guest=true # if on Ubuntu and Unity is not installed, this is a minimal user session type for # default (guest) sessions (sudo apt-get install openbox) -user-session=openbox +#user-session=openbox diff --git a/debian/arctica-greeter-guest-session.install b/debian/arctica-greeter-guest-session.install index d09fd2b..1cb5317 100644 --- a/debian/arctica-greeter-guest-session.install +++ b/debian/arctica-greeter-guest-session.install @@ -1,2 +1,6 @@ +etc/lightdm/lightdm.conf.d/91* usr/sbin/arctica-guest-account-script -etc/lightdm/lightdm.conf.d/91* \ No newline at end of file +usr/lib/*/arctica-greeter/arctica-guest-session-auto +usr/lib/*/arctica-greeter/arctica-guest-session-setup +usr/share/lightdm/lightdm.conf.d/50-arctica-guest-wrapper.conf +usr/share/arctica-greeter/guest-session/skel/.config/autostart/arctica-guest-session-startup.desktop \ No newline at end of file diff --git a/debian/arctica-greeter.install b/debian/arctica-greeter.install index 2dcf03c..1bbb38a 100644 --- a/debian/arctica-greeter.install +++ b/debian/arctica-greeter.install @@ -1,4 +1,13 @@ etc/lightdm/lightdm.conf.d/90-arctica-greeter.conf usr/sbin/arctica-greeter -usr/share/ +usr/share/arctica-greeter/*.png +usr/share/arctica-greeter/*.svg +usr/share/backgrounds/ +usr/share/glib-2.0/ +usr/share/lightdm/lightdm.conf.d/50-arctica-greeter.conf +usr/share/locale/ +usr/share/man/ +usr/share/sounds/ +usr/share/xgreeters/ +usr/lib/*/arctica-greeter/lightdm-arctica-greeter-session var/lib/polkit-1/localauthority/10-vendor.d/arctica-greeter.pkla diff --git a/debian/rules b/debian/rules index 6d90b03..4c0ff8f 100755 --- a/debian/rules +++ b/debian/rules @@ -18,8 +18,6 @@ override_dh_auto_install: dh_auto_install mkdir -p debian/tmp/var/lib/polkit-1/localauthority/10-vendor.d/ cp debian/arctica-greeter.pkla debian/tmp/var/lib/polkit-1/localauthority/10-vendor.d/ - mkdir -p debian/tmp/usr/share/lightdm/lightdm.conf.d/ - cp debian/50-arctica-greeter.conf debian/tmp/usr/share/lightdm/lightdm.conf.d/ mkdir -p debian/tmp/etc/lightdm/lightdm.conf.d/ cp debian/90-arctica-greeter.conf debian/tmp/etc/lightdm/lightdm.conf.d/ cp debian/91-arctica-greeter-guest-session.conf debian/tmp/etc/lightdm/lightdm.conf.d/ diff --git a/lightdm-arctica-greeter-session b/lightdm-arctica-greeter-session new file mode 100755 index 0000000..536e0ae --- /dev/null +++ b/lightdm-arctica-greeter-session @@ -0,0 +1,36 @@ +#!/bin/sh +# -*- Mode: sh; indent-tabs-mode: nil; tab-width: 4 -*- +# +# Copyright (C) 2011 Canonical Ltd +# Author: Michael Terry +# +# This program is free software: you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation, version 3 of the License. +# +# See http://www.gnu.org/copyleft/gpl.html the full text of the license. + +# This wrapper merely ensures that dbus-daemon lives only as long as this +# script does. Otherwise, it's very easy for dbus-daemon to be autolaunched +# and detached from the greeter. + +trap cleanup TERM EXIT + +cleanup() +{ + trap - TERM EXIT + if [ -n "$DBUS_SESSION_BUS_PID" ]; then + kill "$DBUS_SESSION_BUS_PID" + fi + if [ -n "$CMD_PID" ]; then + kill "$CMD_PID" + fi + exit 0 +} + +eval `dbus-launch --sh-syntax` + +exec $@ & +CMD_PID=$! +wait $CMD_PID +CMD_PID= -- cgit v1.2.3