#!/bin/bash source /usr/share/calculate/xdm/functions progname=$0 SHORTOPTS="h" LONGOPTS="login,logout,help" PATH_LOG='/var/log/calculate' FILE_LOG="${PATH_LOG}/cl_login-error.log" print_help() { cat <<'EOF' Usage: xdm --login|--logout Execute scripts in /usr/share/calculate/xdm/login.d or /usr/share/calculate/xdm/logout.d . Options: --login Execute all scripts in /usr/share/calculate/xdm/login.d --logout Execute all scripts in /usr/share/calculate/xdm/logout.d -h, --help Print this help message EOF } warning() { echo "Warning: "$1 1>&2 } writelog() { local ERROR_MESSAGE="${1}" if [[ ! -e $PATH_LOG && -w /var/log ]]; then # Создадим директорию логов mkdir $PATH_LOG fi # если права на файл не 755 if [[ "`stat ${PATH_LOG} | sed -n -r '/Access: \(/ {s/.*\([0-9]([^/]+).*/\1/;p}'`" != "755" && -w $PATH_LOG ]]; then chmod 755 $PATH_LOG fi if [[ -n $ERROR_MESSAGE && -w $FILE_LOG ]]; then # Запишем ошибку в файл echo "$ERROR_MESSAGE" >> $FILE_LOG fi } die() { [[ -n $BG_PID ]] && kill $BG_PID echo "Error: "$1 1>&2 writelog "${1}" umount_user_res exit 1 } die_xmes() { xmes "${1}" die "${1}" } gtk_background(){ if [[ -n $(env | grep RUNNING_UNDER_GDM=true) ]] && ls /var/db/pkg/gnome-base/gdm-2* &>/dev/null; then /usr/bin/env python2 /usr/share/calculate/xdm/gtkbg BG_PID=$(ps ax | sed -nr "s/^\s*([0-9]+)\s.*gtkbg$/\1/p") fi } umount_user_res(){ if [[ -n $USER && -z `who | awk '{ print $1, $2 }' | grep -P ":\d+" | awk '{ print $1}' | grep $USER` ]]; then HOME_DIR=`getent passwd $USER | awk -F: '{ print( $6 ); }'` PROFILE_DIR=`dirname $HOME_DIR`/.`basename $HOME_DIR` REMOTE_PROFILE_DIR=`dirname $HOME_DIR`/.`basename $HOME_DIR`.remote ALL_MOUNT_DIRS=`cat /proc/mounts | grep -e $HOME_DIR -e $PROFILE_DIR -e $REMOTE_PROFILE_DIR | awk '{ print $2 }'` ALL_MOUNT_DIRS=`echo $ALL_MOUNT_DIRS | awk '{ for (i = NF; i > 0; --i) print $i }'` for MOUNT_DIR in $ALL_MOUNT_DIRS; do KILL_PIDS=`fuser ${MOUNT_DIR} 2>/dev/null` if [[ -n $KILL_PIDS ]]; then kill -9 KILL_PIDS fi umount "${MOUNT_DIR}" done fi } OPTS=$(getopt -o $SHORTOPTS --long $LONGOPTS -n "$progname" -- "$@") if [ $? -ne 0 ]; then echo "'$progname --help' for more information" 1>&2 exit 1 fi eval set -- "$OPTS" EXECDIR=/usr/share/calculate/xdm if [[ -w $FILE_LOG ]]; then # Очистим лог ошибок echo -n "" > $FILE_LOG fi while [ $# -gt 0 ]; do case $1 in -h|--help) print_help exit 0 ;; --login) [[ $EXECDIR == /usr/share/calculate/xdm ]] || die "only one of --login or --logout must be specified" EXECDIR=${EXECDIR}/login.d shift 1 ;; --logout) [[ $EXECDIR == /usr/share/calculate/xdm ]] || die "only one of --login or --logout must be specified" EXECDIR=${EXECDIR}/logout.d shift 1 ;; --) shift ;; auto) shift ;; *) die "unrecognized option: $1" ;; esac done if [[ $EXECDIR == /usr/share/calculate/xdm ]]; then die "must specify option" fi [[ -e ${EXECDIR} ]] || die "${EXECDIR} is not exists" FILELIST=$(find ${EXECDIR} -type f | sort) [[ $FILELIST ]] || warning "${EXECDIR} hasn't scripts" gtk_background DOMAIN_USER="`desktop_variable_value ur_domain_set`" for script in $FILELIST do FILE_LOG=$FILE_LOG DOMAIN_USER=$DOMAIN_USER /bin/bash $script || die_xmes "failed on execute $script" done [[ -n $BG_PID ]] && kill $BG_PID exit 0