# -*-eselect-*- vim: ft=eselect # Copyright 1999-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 or later # $Id: $ DESCRIPTION="Switch between LightDM greeters" MAINTAINER="lxnay@gentoo.org" VERSION="0.1" # Module variables GREETERS_DIR="${EROOT}/usr/share/xgreeters" GREETER_SYM="${GREETERS_DIR}/default.desktop" find_targets() { local f fname for f in "${GREETERS_DIR}/"*; do [[ "${f}" == "${GREETER_SYM}" ]] && continue # skip dirs [[ -d "${f}" ]] && continue # skip broken syms etc [[ ! -e "${f}" ]] && continue # skip non reg files [[ ! -f "${f}" ]] && continue fname=$(basename "${f}") [[ "${fname}" == *.desktop ]] || continue echo "${fname%%.desktop}" done } remove_symlink() { rm "${GREETER_SYM}" } set_symlink() { local target="${1}" if is_number "${target}"; then local targets=( $(find_targets) ) target=${targets[target-1]} fi [[ -z "${target}" || ! -f "${GREETERS_DIR}/${target}.desktop" ]] \ && die -q "Target \"${target}\" doesn't appear to be valid!" echo "Setting LightDM greeter to ${target}" ln -sf "${target}.desktop" "${GREETER_SYM}" || die "Cannot create symlink" } ### show action ### describe_show() { echo "Show the current LightDM greeter" } describe_show_options() { echo "--quiet : only print the actual symlink value" echo "--silent : same as --quiet" } do_show() { local quiet="" while [[ $# -gt 0 ]]; do case ${1##--} in quiet|silent) quiet="1" ;; esac shift done [[ -z "${quiet}" ]] && write_list_start "Current greeter:" if [[ -L "${GREETER_SYM}" ]] && [[ -e "${GREETER_SYM}" ]]; then local greeter=$(canonicalise "${GREETER_SYM}") local greeter_bn=$(basename "${greeter%.desktop}") if [[ -n "${quiet}" ]]; then echo "${greeter_bn}" else write_kv_list_entry "${greeter_bn}" "" fi else if [[ -z "${quiet}" ]]; then write_kv_list_entry "(unset)" "" fi fi } ### list action ### describe_list() { echo "List available LightDM greeters" } describe_list_options() { echo "--quiet : only print the actual symlink value" echo "--silent : same as --quiet" } do_list() { local quiet while [[ $# -gt 0 ]]; do case ${1##--} in quiet|silent) quiet="1" ;; esac shift done local i targets=( $(find_targets) ) [[ -z "${quiet}" ]] && write_list_start "Available LightDM greeters:" for (( i = 0; i < ${#targets[@]}; i++ )); do if [[ -z "${quiet}" ]]; then # highlight the target where the symlink is pointing to [[ ${targets[i]} = \ $(basename "$(canonicalise "${GREETER_SYM}")") ]] \ && targets[i]=$(highlight_marker "${targets[i]}") else echo "${targets[i]}" fi done [[ -z "${quiet}" ]] && \ write_numbered_list -m "(none found)" "${targets[@]}" } ### set action ### describe_set() { echo "Set a new LightDM greeter" } describe_set_parameters() { echo "" } describe_set_options() { echo "target : Target name or number (from 'list' action)" echo "--use-old : use the old value if target is already set" } do_set() { local use_old local target="${1}" while [[ $# -gt 0 ]]; do case ${1##--} in use-old) use_old="1" ;; esac shift done [[ -z "${target}" ]] && \ die -q "You didn't tell me what to set the symlink to" [[ ${#} -gt 1 ]] && die -q "Too many parameters" if [[ "${use_old}" = "1" ]]; then old_target=$(do_show --quiet) target="${old_target:-${target}}" fi if [[ -L "${GREETER_SYM}" ]]; then # existing symlink remove_symlink || die -q "Couldn't remove existing symlink" set_symlink "${target}" || die -q "Couldn't set a new symlink" elif [[ -e "${GREETER_SYM}" ]]; then # we have something strange die -q "${GREETER_SYM} exists but is not a symlink" else set_symlink "${target}" || die -q "Couldn't set a new symlink" fi }