Не пускайте ребенка в интернет — он от этого тупеет! (bash.org.ru)
Здесь речь пойдет о технических средствах ограничения времени, проводимого ребенком за компьютером. (Тема родительского контроля доступа в интернет на предмет порнухи, социальных сетей (или чего там еще боятся) здесь не затрагивается. Да и вынесенная в качестве эпиграфа фраза — не про то.) Я пока не предлагаю готового решения, а хотел бы обсудить некоторое вопросы его реализации. Или, быть может, меня убедят отказаться от изобретения велосипеда, поскольку кто-то всё уже давно реализовал.
Расскажу, как это делается у нас в семье. Дети засекают время внешним будильником (телефоном), а я на досуге просматриваю логи и по мере надобности раздаю SIGSTOP, SIGKILL и прочих люлей, в том числе IRL. Понятно, что такая система не очень удобна, поскольку требует дополнительного контроля и не учитывает способов использования компьютера ребенком. Я смотрю только last — кто когда зашел/вышел из системы, поэтому не различаю, кто играл, а кто слушал аудиокнигу. (Только тсс! — дети пока полагают, что папа видит всё.)
Меня это перестало устраивать, и я захотел внести немного автоматизации. Прежде всего необходимо сформулировать требования к такой системе контроля. Какими именно должны быть требования, не вполне очевидно; я составил лишь следующий набросок.
- Разделение видов взаимодействия ребенка с компьютером на несколько классов (игры, фильмы, аудиокниги, самообразование (чтение википедии и прочей документации), ...). Классификация должна производиться по двум факторам: степень нагрузки на глаза и нервную систему и, скажем так, польза для развития. Большинство игр скорее развлекают, чем развивают, и хочется простимулировать ребенка заниматься более полезным нежели приятным.
- Гибкое задание системы ограничений времени с учетом классификации. Например, такой класс как аудиокниги можно считать безвредным для организма, и поэтому вообще не ограничивать. Еще было бы удобно (для ребенка) переносить неиспользованный остаток времени на завтра или даже брать в долг (хе-хе, с процентами), но все эти махинации должны вкладываться в жесткие ограничения (за сутки, за сеанс и т.п.).
- Удобная и наглядная индикация оставшегося времени и цепочка предупреждений (вплоть до последнего китайского с последующим убийством всех процессов и баном учетной записи пользователя).
- Журналирование: кто сколько времени провел и каким образом.
- Учесть наличие нескольких компьютеров. Если дети захотят зарубиться по сети, нет причин им в этом отказывать.
Что касается взломоустойчивости, то достаточно лишь, чтобы не срабатывали совсем уж наивные способы обойти ограничения. Всё равно надежно сделать вряд ли удастся, ведь при наличии физического доступа к железу получить рута не составляет проблем. И если ребенок умеет это делать, то наверно вам не следует пытаться его контролировать.
Основные идеи реализации (для линукса) таковы.
- Сбор статистики по процессам (кажется atop из этого обзора должен подойти).
- Демон (в крайнем случае скрипт, вызываемый через хрон), который просматривает эту статистику и принимает решения.
- Система уведомления: наверно всплывающее изредка окно и таймер где-то в статус-баре (хотя я, например, не использую таких излишеств как статус-бар); также в запущенных случаях посылка SIGSTOP и через несколько секунд SIGCONT (правда, не все процессы могут это пережить).
- Ну а репрессивные механизмы (блокировка экрана скринсейвером и далее sudo -u luser kill -9 -1) — это совсем просто.
Пока не очень ясно, как классифицировать процессы. Придется либо вручную, либо применять эвристику типа «всё, что из /usr/games — это игры».
В общем, я сам еще толком не продумал, чего именно хочется и каким образом. Поэтому приветствуются содержательные комментарии технического, медицинского, методического и педагогического характера.
Автор: janatem