Linux ограничение времени работы пользователя
У меня появилась необходимость ограничить техническим средствами время «работу» семилетнего чада за компьютером с GNU / Linux.
Проблему с великим и ужасным интернетом я легко решил с помощью детского браузера «Гогуль». А вот с ограничением времени работы пользователя возникли трудности. Начал поиск имеющихся программ для Ubuntu 12.04 и обнаружил, что с этим дела обстоят не лучшим образом.
Что-то у меня не работает, как Gnome nanny (у некоторых, судя по отзывам, она еще и портит систему), для чего-то даже нет готовых пакетов для установленной версии Ubuntu, в том числе и в сторонних хранилищах.
Нашел замечательную программу Workrave. Но она подходит только для сознательных граждан, а ребенок ее просто отключит и труда это ему не составит.
Не пускаясь в дальнейшие поиски, решил написать свою простенькую программку. Как это водится слегка недооценил необходимое время, но приемлемое решение для исходной задачи было сделано.
Исходный код доступен по ссылке — time-control
Приложение нужно прописать в автозапуске пользователя и инициализировать запуском из командной строки, передав в качестве параметра количество разрешенных за день минут. В дальнейшем редактировать этот параметр можно в файле /home/patient/.parcon/config, где patient следует заменить на имя пользователя, разумеется.
Когда время, отведенное для пользователя завершается, программа вызывает функции завершения сеансов работы Unity/(Gnome ?) и XFCE. Вариант для KDE был добавлен наугад и не тестировался, так что наверняка он работает кое-как.
Недостатком решения является то, что по завершении сеанса до завершения времени, программа продолжает работать и отсчитывать минуты. Я обошел это добавлением специальной кнопки завершения сеанса, заодно завершающей программу командой «pkill -9 parcon».
Решение наивное, но для контроля маленького ребенка подойдет. Полагаю, у меня в запасе есть пару лет на то, чтобы дождаться готовых работающих решений, либо написать что-то более серьезное.
Ограничиваем время проведенное за ПК в Linux с помощью Timekpr
Timekpr Revived — это программа, позволяющая отслеживать и ограничивать проведенное за компьютером время в Linux. С помощью Timekpr можно ограничить время в которое пользователю позволено заходить в систему, и количество проведенного времени. Эту небольшую программу ни в коем случае нельзя назвать полноценным родительским контролем, но во всяком случае, она позволяет ограничивать время проведенное чадом за компьютером. Это уже становится актуальным даже для Linux, т.к. количество игр с поддержкой Linux в Steam неумолимо растет.
Разработчик оригинальной программы Timekpr забросил проект довольно давно, но позже нашлись те, кому проект так же показался нужным, сделали форк и продолжили развитие проекта только под немного измененным названием — Timekpr Revived. Форк не сильно отличается от оригинала, но в отличии от него прекрасно работает в последних версиях Ubuntu, и есть индикатор для панели.
Возможности
Основные возможности Timekpr-Revived:
- Ограничение количества времени работы для определенной учетной записи пользователя;
- Ограничение по времени суток, в которое разрешено пользоваться учетной записью;
- Возможность сразу заблокировать аккаунт;
- Возможность снять ограничения на один, сегодняшний день;
- Поддержка индикаторов панели и системных уведомлений;
Вот так выглядит окно, в котором настраиваются ограничения:
Timekpr — настройка ограничений
Через апплет можно получить доступ к основному окну приложения, посмотреть сколько осталось времени:
Как работает
Timekpr загружается когда пользователь заходит в систему, и проверяет сколько осталось у него времени для работы. Если не осталось совсем, то без лишних предупреждений через минуту Timekpr выйдет из учетной записи. При повторном входе timekpr сделает тоже самое — т.е. разлогинит через минуту, если не осталось времени. Таймаут нужен для того, чтобы была возможность добавить времени использования аккаунта.
Для изменения настроек и добавлении времени, Timekpr требует пароль пользователя:
Когда останется несколько минут, Timekpr покажет всплывающее уведомление:
Установка
Для установки необходимо добавить ppa:
sudo add-apt-repository ppa:mjasnik/ppa sudo apt-get update sudo apt-get install timekpr
Если у вас Debian, то здесь можно скачать готовый Deb пакет. В других дистрибутивах Linux придется собирать руками, из исходного кода. Скачать их можно тут.
Индикатор на панели в Unity появится после следующего входа в систему.
Комментарии на этом сайте требуют включенного Javascript в вашем браузере. Вероятно, ваш браузер не поддерживает Javascript, или он был отключен по каким-то причинам. Если вы хотите прокомментировать пост, или просто почитать комментарии, то пожалуйста, включите Javascript или попробуйте открыть эту страницу другим браузером.
Ограничения времени работы пользователя.
Нужно чтобы пользователь мог работать только в определенное время (скажем с 15:00 до 21:00). При этом компьютер должен автоматически выключаться/переводится в спящий режим — не суть важно, и при попытках залогиниться пользователем в неподходящее время компьютер должен опять таки выключаться. То есть в данном случае, если компьютер включается в 1:00, то тут же он и выключается, если наступает 21:00, то компьютер выключается. Ну а если в данный момент от 15:00 до 21:00 пользователь может спокойно работать.
p.s. Мне все равно на изящность/убогость решения. Главное — чтобы работало, чем скорее — тем лучше. И просьба, если вы знаете куда копать надо, то не надо кидать пару умных фраз от которых все становится только запутанней. Пара ссылок на материал поможет куда больше.
емнип это можно с PAM организовать.
Нужно чтобы пользователь мог работать только в определенное время (скажем с 15:00 до 21:00). При этом компьютер должен автоматически выключаться/переводится в спящий режим — не суть важно, и при попытках залогиниться пользователем в неподходящее время компьютер должен опять таки выключаться. То есть в данном случае, если компьютер включается в 1:00, то тут же он и выключается, если наступает 21:00, то компьютер выключается. Ну а если в данный момент от 15:00 до 21:00 пользователь может спокойно работать.
скрипт напиши и повесь на crond.
В гноме раньше было такое, настраивалось в апплете отдыха для глаз или полувручную, не знаю, как оно с гномощелью сейчас.
Вот какое решение я нашел узнав про PAM
Задача: пользователь myuser. Время, когда можно пользоваться компьютером вышеуказанным пользователем: Понедельник, вторник, четверг в 08:00-10:00 и 20:00-21:30 (из промежутка 08:00-21:30 исключается время 10:00-20:00. Именно так прописывается в time.conf) — пояснение ниже Среда, пятница в 20:00-21:30 Суббота в 18:00-22:00 Воскресенье в 09:00-20:00
Решение. С правами админа вписываем в /etc/security/time.conf следующую строку
*;*;myuser;WeFr2000-2130|Sa1800-2200|Su0900-2000|MoTuTh0800-1000|MoTuTh2000-2130
Я не стал замарачиваться ограничением по login, gdm, а сразу обрубаю всю активность на компе (звездочки). В вышеуказанной статье Scott’а Kindley дается пример с использованием символа &. Я не стал его использовать, т.к. неправильно отрабатывают правила. Поясню:
login|gdm;*;jordan;Wk1630-2000 | Wd0800-2230&!1200-1500
cовсем не одно и то же, что
login|gdm;*;jordan;Wd0800-2230&!1200-1500 | Wk1630-2000
Потому указал два диапазона времени для MoTuTh вместо MoTuTh0800-2130&!1000-2000. Далее вписываем ниже последней строки, начинающейся с auth в файлах /etc/pam.d/login, /etc/pam.d/gdm, /etc/pam.d/sshd
account required pam_time.so
Замечательно, ограничения вступают в силу немедля. Но есть один ньюанс. Наступает время, когда сеанс залогиненного пользователя должен закончится. Но он продолжает и далее работать. Непорядок! Надо принудительно завершить его сеанс, предварительно выдав пользователю сообщение. Выполняем это средствами штатного планировщика cron. Редактируем планировщик:
где вписываем такие строки:
#m - минуты, h - часы, dom - день месяца, mom - месяц, dow - день недели, command - выполняемая команда #m h dom mon dow command 00 10 * * 1-2 /usr/bin/zenity --text-info --title="Время вышло" --width=474 -height=400 --display=:0 --filename=/etc/myuser.zenity & 10 10 * * 1-2 /usr/bin/skill -KILL -u myuser 00 10 * * 4 /usr/bin/zenity --text-info --title="Время вышло" --width=474 -height=400 --display=:0 --filename=/etc/myuser.zenity & 10 10 * * 4 /usr/bin/skill -KILL -u myuser 30 21 * * 1-5 /usr/bin/zenity --text-info --title="Время вышло" --width=474 -height=400 --display=:0 --filename=/etc/myuser.zenity & 40 21 * * 1-5 /usr/bin/skill -KILL -u myuser 00 22 * * 6 /usr/bin/zenity --text-info --title="Время вышло" --width=474 -height=400 --display=:0 --filename=/etc/myuser.zenity & 10 22 * * 6 /usr/bin/skill -KILL -u myuser 00 20 * * 0 /usr/bin/zenity --text-info --title="Время вышло" --width=474 -height=400 --display=:0 --filename=/etc/myuser.zenity & 10 20 * * 0 /usr/bin/skill -KILL -u myuser
В указанное время на рабочем столе пользователя myuser будет появляться всплывающее окно размером 474×400 пикселей с заголовком «Время вышло». Текст сообщения будет браться из файла /etc/myuser.zenity, который предварительно надо создать. Строки «/usr/bin/skill -KILL -u myuser» выполняют принудительное завершение сеанса пользователя, если он сам не захотел отключаться.