#!/usr/bin/bash

#----------------------------------#

TIMEOUT=600000 # 10min = 10 * 60 * 1000 # Время жизни сессии

NOTIFY_TIMEOUT=60000                    # 1min = 1 * 60 * 1000 # Время отображения уведомления
NOTIFY_LEVEL="critical"                 # low, normal, critical # Тип уведомления
NOTIFY_ICON="emblem-important"  # Иконка уведомления
NOTIFY_TILE="ВНИМАНИЕ!"                 # Заголовок уведомления
NOTIFY_WARNING_MESSAGE="Сеанс завершится автоматически через 60 секунд. Подвигайте мышью, чтобы продолжить работу!"  # Сообщение за TIMEOUT до завершениия сессии
NOTIFY_KILL_MESSAGE="Сессия завершена!" # Сообщение после завершения сессии

#----------------------------------#

notify_send_all () {

  for NT_USER in $USER_LIST
    do
        NT_USERNAME=${NT_USER%@*}
        NT_USER_DISPLAY=${NT_USER#*@}
        NT_USER_ID=$(id -u $NT_USERNAME)
        sudo -u $NT_USERNAME DISPLAY=${NT_USER_DISPLAY:1:-1} DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$NT_USER_ID/bus \
                             notify-send "$@"
    done
}

#----------------------------------#

USER_LIST=$(who | grep -E "\(:[0-9](\.[0-9])*\)" | awk '{print $1 "@" $NF}' | sort -u)

for USER in $USER_LIST
    do
        USERNAME=${USER%@*}
        USER_DISPLAY=${USER#*@}
        PID_X=$(lsof -w -F '' /tmp/.X11-unix/X${USER_DISPLAY:2:-1} | cut -c 2- | tr -d ' ')
        PID_XDM=$(ps -o ppid -p $PID_X | tail -n1 | tr -d ' ')
        XDM=$(ps -p $PID_XDM | tail -n1 | awk '{print $4}' | tr -d ' ')
        IDLE=$(su - $USERNAME -c "DISPLAY=${USER_DISPLAY:1:-1} xprintidle")
        SESSION_KDE=$(su - $USERNAME -c "w | grep -c startplasma-x11")
        if [ $SESSION_KDE -gt 0 ]; then 
            XSESSION_COUNT=$(w | grep -c startplasma-x11)
        else
            XSESSION_COUNT=$(w | grep -c xdm)
        fi
        if [ $XSESSION_COUNT -gt 0 ]; then
            let TIMEOUT_WARNING=$TIMEOUT-60000
            if [ $IDLE -ge $TIMEOUT_WARNING ]; then
                if [ $IDLE -lt $TIMEOUT ]; then
                    notify_send_all -t $NOTIFY_TIMEOUT \
                                    -i $NOTIFY_ICON \
                                    -u $NOTIFY_LEVEL \
                                       "$NOTIFY_TILE" "<b>$USERNAME</b>\n$NOTIFY_WARNING_MESSAGE"
                fi
                if [ $IDLE -gt $TIMEOUT ]; then
                    kill -9 $PID_X
                    notify_send_all -t $NOTIFY_TIMEOUT \
                                    -i $NOTIFY_ICON \
                                    -u $NOTIFY_LEVEL \
                                       "$NOTIFY_TILE" "<b>$USERNAME</b>\n$NOTIFY_KILL_MESSAGE"
                fi
            fi
        fi
    done

exit 0;

