Вкратце: отслеживает активность юзера (мышь-клавиатура), если пользователь слишком засиживается, то блокируется именно клавиатура и мышь (не монитор!), перейти на другую виртуальную консоль- нельзя, Ctrl+Shift+Backspace вам тоже не поможет

Модератор: Модераторы разделов
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Код: Выделить всё
Section "Serverflags"
Option "DontZap" "yes"
# Disable Ctrl-Alt_backspace
EndSection
Код: Выделить всё
(defun my-break-timer (session idle)
"Simple typing break control module, screen (keyboard) locker not included,
as it is quite difficult to do correctly. Also requied utility 'xprintidle' (https://launchpad.net/ubuntu/+source/xprintidle)"
(defvar session-time nil)
(defvar idle-time nil)
;; Детектируемое время простоя, сек. Рекомендованное значение- от 10 секунд до ..
(defvar start-time nil)
(defvar n-staus nil)
(defvar main-timer nil)
(setq start-time (string-to-number (format-time-string "%s")))
(setq session-time (* session 60)) ;; min > sec
(setq idle-time idle)
(setq n-status 1)
(setq BREAK_TIMER_T session-time)
(defun break-timer-action ()
(async-shell-command "~/locker.sh"))
(defun printidle ()
(/ (string-to-number (shell-command-to-string "xprintidle")) 1000))
(defun main-loop ()
(let ((time0 (- session-time (- (string-to-number (format-time-string "%s")) start-time)))) ;; время сессии - (текущее время [Unix_time] - время старта [Unix_time]), секунды.
(when (> (printidle) idle-time)
(setq start-time (+ start-time idle-time))) ;; смещаем временное окно "вперед"
(when (and (< time0 60) (= n-status 1))
(async-shell-command "notify-send -u critical -i dialog-warning \"До перерыва меньше минуты.\"")
(setq n-status (+ 1 n-status))) ;; блокировка на одно оповещение, а то может задолбать))
(when (< time0 0)
(break-timer-action)
(setq start-time (string-to-number (format-time-string "%s")))
(setq n-status 1))
(when (< time0 BREAK_TIMER_T)
(setq BREAK_TIMER_T (*
(/ time0 (* 60 15)) ;; целочисленное (!) деление,
(* 60 15))) ;; результат с кратностью 15 (мин) для отображения в mode line
(force-mode-line-update))
))
(defun modeline-break-t ()
"Generate mode line text"
(let ((output nil))
(setq output (concat " [~ "(format "%s" (/ BREAK_TIMER_T 60)) " 2B] "))))
(defun my-break-timer-off ()
"Stop typing break timer!"
(interactive)
(cancel-timer main-timer))
(defun break-now ()
"Сделать перерыв СЕЙЧАС"
(interactive)
(setq start-time (- start-time session-time)))
(setq main-timer
(run-at-time 3 idle-time 'main-loop))
;; End module
)
Код: Выделить всё
#!/bin/sh
if [ -z "$1" ]
then b=15
echo "Error: no arg. Use default value."
else b="$1"
fi
if (("$1" > 20))
then echo "Error: very long timeout"
exit 1
fi
let time=$b*60 # min > sec
ti=0
i=2
# LOCK
physlock -lsd
(pyxtrlock &)
# WAIT
while (( ti <= time ))
do sleep $i
((ti += i))
echo $((ti * 100 / time - 1))
done | zenity --progress --title="Перерыв $b минут." --height=100 --cancel-label="" --ok-label="*" --text="ТЕКСТ\n" --percentage=0 --auto-close
# UNLOCK
physlock -L
killall pyxtrlock
exit 0