Как ограничить время вычислений моих детей?

50

Доступ к нашему компьютеру (не только к Интернету) должен быть ограничен для учетных записей моих детей (7, 8), пока они не станут достаточно взрослыми, чтобы самостоятельно управлять ими. До этого мы должны иметь возможность определить следующее:

  • часы дня, когда вычисление - o.k. (например, 5 - 9 вечера).
  • дни недели, когда вычисления не o.k. (например, с понедельника по пятницу)
  • количество времени, разрешенного в день (например, 2 часа)

В 11.10 все, что использовалось для выполнения задания, больше не работает:

  • Timekpr : для & gt; 11.10 больше не доступно через ppa.
  • Timeoutd : альтернатива командной строки, но из 11.10 удалена из репозиториев .
  • Gnome няня : выглядит великолепно, но несколько раз сбой , чтобы перезапустить X-сервер. Поэтому мы не можем использовать или рекомендовать эту программу на данный момент.

Есть ли другие альтернативы?

    
задан Takkat 18.10.2011 в 22:50
источник

9 ответов

36

Ubuntu & lt; = 11.10. Следуйте этому руководству для Ubuntu User & gt; = 11.10, прочитайте уведомление нижней страницы:

Да, все эти программы устарели, и на все ваши вопросы ответили здесь, и хороший взгляд с вашим родительским контролем .....

Когда мы говорим о принуждении пользователя к выходу из системы, то, о чем мы говорим, это использование ограничений по времени для учетной записи для доступа к системе или служб. Самый простой способ, с помощью которого я нашел временные ограничения, - использовать подключаемый модуль под названием Linux-PAM .

Подключаемый модуль аутентификации (PAM) - это механизм аутентификации пользователей. В частности, мы собираемся использовать модуль pam_time для управления временем доступа пользователей к услугам.

Используя модуль pam_time , мы можем установить ограничения доступа к системе и / или конкретным приложениям в разное время дня, а также в определенные дни или через различные терминальные линии. В зависимости от конфигурации вы можете использовать этот модуль, чтобы запретить доступ к отдельным пользователям на основе их имени, времени суток, дня недели, услуги, к которой они обращаются, и своего терминала, с которого они делают запрос .

При использовании pam_time вы должны прервать синтаксис каждой строки (или правила) в файле /etc/security/time.conf с новой строкой. Вы можете прокомментировать каждую строку с значком фунта [#], и система будет игнорировать этот текст до новой строки.

Вот синтаксис правила:

  

услуги; TTYs; пользователей; раз

The first field —  services — is a logic list of PAM service names.
The second field — tty — is a logic list of terminal names.
The third field — users — is a logic list of users or a netgroup of users.
The fourth field — times — indicates the applicable times.

Вот пример типичного набора правил:

login ; * ; !bobby ; MoTuWeThFr0800-2000
login ; * ; !root ; !Al0000-2400
http ; * ; !bobby ; MoTuWeThFr0800-2000
http ; * ; !root; !Al0000-2400

Эти правила ограничивают пользователя bobby от входа в систему между часами 0800 и 2000 годов, а также ограничивают доступ в Интернет в течение этих часов. Root мог бы войти в систему в любое время и также просматривать Интернет в любое время.

Примечание. Система регистрирует ошибки с этими правилами как syslog (3).

С Ubuntu Linux можно назначить ограничения времени вашего компьютера, чтобы предотвратить подключение одного или нескольких пользователей к вашей системе. С ограничениями по времени вы можете, например, ограничить доступ к компьютеру для своих детей (тип родительского контроля, короче говоря) или даже защитить соединение с вашим сервером в течение определенных часов.

Конфигурация вручную

Поймите, что вы будете делать

В этом уроке мы будем использовать PAM (подключаемые модули аутентификации, английские подключаемые модули аутентификации). Он позволяет вам контролировать аутентификацию пользователей при их подключении. Затем мы будем использовать файлы конфигурации безопасности для определения разрешенных часов входа в систему. Эти манипуляции могут быть выполнены на любой версии Ubuntu и требуют только простого текстового редактора (vim, emacs, nano, gedit, kate, чтобы назвать несколько). Включить часы ограничения через модуль PAM

Прежде всего, сначала перейдите в /etc/pam.d/ , где все настраиваемые службы:

$ Ls /etc/pam.d/
atd common-account common-session gdm login ppp sudo
chfn common-auth cron gdm-autologin Other samba
chsh common-cupsys gnome-screensaver password passwd su

Если мы хотим заблокировать подключение к компьютеру, нам придется изменить службу gdm. Отредактируйте файл так gdm и добавьте эту строку кода (в конце файла):

account required pam_time.so

GDM - это дистрибутивы экрана входа Ubuntu, Edubuntu и Xubuntu. Для Kubuntu, который использует KDE, вызывается служба kdm, это будет файл, который он откроет. И вы закончили настройку PAM! Это позволит контролировать часы в этой службе.

Если у вас есть сервер, у вас, вероятно, нет графического интерфейса. В этом случае GDM / KDM не установлен и соединение не будет заблокировано. Чтобы предотвратить подключение к TTY, вы должны изменить логин того же файла и добавить ту же строку кода, что и ранее подтвержденная. Это действие также относится к людям, которые установили графический интерфейс и хотят заблокировать доступ к экрану входа и терминалам.

Настройка часов доступа

Теперь, когда служба PAM активирована, нам нужно настроить время доступа. Откройте /etc/security . Доступны несколько файлов конфигурации:

$ Ls /etc/security/
access.conf namespace.conf pam_env.conf
group.conf namespace.init time.conf
limits.conf opasswd time.conf.bak

Отредактируйте файл time.conf . Некоторые объяснения и примеры (на английском языке), представляющие. Чтобы установить графики доступа, скопируйте и вставьте следующую строку кода (в конце файла, как всегда):

*;*;user;scheduler

Вместо поля пользователя введите регистрационную учетную запись, которую вы хотите заблокировать.

Если вы хотите заблокировать несколько пользователей, введите их логин в строке, разделенный символом | оператор. Например, если я хочу заморозить счета Патрика, Джона и Эмили:

*;*;Patrick|jean|emilie;scheduler

По минусам, если вы хотите заблокировать доступ к системе для всех пользователей, но, в частности, используйте кнопку! перед заинтересованным лицом. Например, если я хочу, чтобы доступ к компьютеру был отклонен всем пользователям, кроме Николаса и Ксавьера:

Nicolas *;*;!|xavier;scheduler

Теперь перейдем к зонам поля. В этом поле будет разрешено подключение дней и часов.Сначала вы должны указать день недели, используя следующие сокращения:

Mo : Monday     Fr : Friday     Wd : Sa/Su
Tu : Tuesday    Sa : Saturday   wk : Mo/Tu/We/Th/Fr
We : Wenesday   Su : Sunday
Th : Thursday   Al : All Days

Будьте осторожны, чтобы не путать аббревиатуры Wk и Wd вводить в заблуждение! особенно плохо идентифицированные в Интернете: вы можете легко найти противоречивую информацию!

Затем мы укажем крайние сроки. Они должны быть отформатированы 24H, состоящие из 4 цифр. Например, чтобы ограничить 3:17 вечера. до 6:34 вечера, пишем: 1517-1834. Разрешить Мари связываться только во вторник, с 3:17 вечера. до 6:34, получаем результат:

*;*;marie;Tu1517-1834

Подключения за пределами этих часов будут запрещены. Что касается пользователей, то можно использовать операторов | а также! чтобы указать несколько раз (тогда укажите, что разрешены все входные часы, кроме тех, которые будут показаны).

Две звезды (подстановочные знаки) в начале строки кода являются соответственно и полями службы tty. Поскольку вы хотите заблокировать весь доступ к системе, нет необходимости указывать, какую услугу или какой tty вы хотите заблокировать. Однако, если вы хотите предотвратить использование конкретной службы, просто укажите ее как следующий пример:

login;tty1|tty4|tty5;marie;!Wd0000-2400

Таким образом, пользователь не может подключиться к TTY, 4 и 5 в выходные.

Некоторые примеры расписания ограничений

mathilde разрешено подключаться каждый день с 1:20 вечера. до 3:20 вечера. и с 4:00 вечера. до 8:30 вечера:

*;*;mathilde;Al1320-1520|Al1600-2030

Камень, Фрэнк и Флориан могут подключиться к 2:00 вечера. до 6:45 вечера. в будние дни и 2 часа ночи. до 10:15 вечера. на выходные:

*;*;Stone|franck|florian;Wk1400-1845|Wd1400-2215

Оливе никогда не разрешается подключаться. jessica может войти в среду с 1:00 вечера. до 4:00 вечера:

*;*;olivier;!Al0000-2400
*;*;jessica;We1300-1600

2 разных строки, для двух разных времен для каждого пользователя Срок действия сеанса

Когда сеанс истекает (он превышает время, когда пользователь уже подключен), PAM может достигать пользователя. В то время как mathilde соединяется в течение разрешенных часов, это совершенно бесплатно, чтобы превысить эти часы! Для этого мы будем использовать новую программу:'cron '. Это приложение выполняет команды с интервалами времени. В нашем случае мы будем использовать команду kkkill-KILL-u', чтобы отключить пользователя при истечении сеанса. Обработка очень проста. Просто отредактируйте файл «/ etc / crontab». Затем добавьте следующую строку кода:

Minute Hour Day * * (s) root skill -KILL -u User

Как и раньше, замените графики и время требуемого времени. Затем заполните (-ы) день (ы) днями (-ами) запрещенными (-ами) днями или просто введите звездочку (*), чтобы указать все дни недели. Наконец, измените поле, используемое учетной записью входа, которая будет заблокирована, и voila!

Дни не замечают то же самое с заданиями cron ! Ниже приведен список аббревиатур, которые будут использоваться с этой программой:

mon : monday    fri : friday
tue : tuesday   sat : saturday
wed : wednesady sun : sunday
thu : thursday   *  : all hours

Некоторые примеры cron заданий (с примерами раз в предыдущем разделе)

jessica может зарегистрироваться в среду с 1:00 вечера. до 4:00 вечера.

  

- & GT; Отключить: вторник в 4:00 вечера.

00 16 * root * wed skill -KILL -u jessica

mathilde разрешено подключаться каждый день с 1:20 вечера. до 3:20 вечера. и с 4:00 вечера. до 8:30 вечера ..

  

- & GT; Отключение: ежедневно, 8:30. до 3:20 вечера. ET.

20 15 * * * root skill -KILL -u mathilde
30 20 * * * root skill -KILL -u mathilde

Камень, Фрэнк и Флориан могут подключиться к 2:00 вечера. до 6:45 вечера. в будние дни и 2 часа ночи. до 10:15 вечера. на выходные

  

- & GT; Отключить (1): понедельник, вторник, среда, четверг и пятница, в 18:45.   - & GT; Отключить (2): субботу и воскресенье в 10:15 вечера.

45 18    * * mon,tue,wed,thu,fri   root    skill -KILL -u stone && skill -KILL -u franck && skill -KILL -u florian
15 22    * * sat,sun               root    skill -KILL -u stone && skill -KILL -u franck && skill -KILL -u florian

Команда skill-KILL-u отключает пользователя от GUI, а также от TTY. Он отлично подходит для администраторов сервера. Однако эта команда выполняется немедленно, и отключение будет производиться без предварительного уведомления. Поэтому было бы предпочтительно предотвратить установку этого устройства пользователями компьютера или сети, о которой идет речь!

Можно запретить пользователям с командой wall , запущенной cron за несколько минут до окончания таймфрейма , который будет отображаться на терминалах всех пользователей.

40 18 * * Mon,Tue,wed,thu,fri root echo "end of session in 5 minutes" | wall

Чтобы запретить пользователям использование графического интерфейса вместо команды на стене, notify-send находится в пакете libnotify-bin

40 18 * * Mon,Tue,wed,thu,fri stone DISPLAY=:0 notify-send "end of session in 5 minutes"

Ubuntu 11.10

Я видел вокруг пользователя проблемы с Pam, и я видел много ошибок об этом, поэтому почему причина ??? так просто Ubuntu 11.10 не поддерживает GDM больше нового диспетчера дисплея lightGDM проблема заключается в следующем, где хранить эту директиву account required pam_time.so Я думаю, что в /etc/pam.d/lightdm или /etc/pam.d/lightdm-autologin , но ошибка, как ???

, поэтому для всего этого вы можете проверить эти 2 файла журнала LightGdm:

  • /var/log/lightdm/lightdm.log
  • / вар / Журнал / LightDM / х-0.войти

или запустите LightGdm в режиме отладки:

  

LightDM --debug

или сообщите об ошибке:

  

ubuntu-bug lightdm

Сообщаю об ошибке здесь , чтобы переложить палец и подождать ....     

ответ дан hhlp 21.10.2011 в 17:32
10

TimeKpr

Я думаю, у него есть все, что вам нужно. Ограничьте время доступа в день для каждого пользователя, простое конфигурирование, abitlity для обхода в течение дня, добавьте «время вознаграждения», уведомление о оставшемся времени для пользователей и т. Д.

Страница проекта здесь . У них также есть PPA для ubuntu, который вы можете добавить в свои источники программного обеспечения: deb http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu lucid main . И установите через Центр программного обеспечения или через CLI: sudo apt-get install timekpr .     

ответ дан Decio Lira 21.08.2010 в 18:25
7

Timekpr

можно использовать в 11.10 для запуска LightDM для установки ограничений для пользователей, добавив следующую строку в /etc/pam.d/lightdm

account required pam_time.so

Нам может понадобиться удалить libpam-smbpass , чтобы включить переход пользователя до исправлена ​​ошибка # 835310 .

Все ограничители, определенные в окне приложения, работают так, как определено в GUI timekpr.

Чтобы отобразить значок timekpr-client в Unity, нам нужно whitelist 'timekpr' в настройках панели Unity, и, кроме того, нам нужно добавить Unity к следующей строке в /etc/xdg/autostart/timekpr-client.desktop :

OnlyShowIn=GNOME;XFCE;KDE;Unity;

Чтобы запустить обратный отсчет предоставленного времени, нам может понадобиться запустить демон timekpr с помощью

/etc/init.d/timekpr start

для 14.04:

Более новая версия / fork timekpr была опубликована для Ubuntu 14.04 Eduards Bezverhijs в его ppa:mjasnik/ppa .     

ответ дан Takkat 27.10.2011 в 20:30
6

У меня тоже была эта проблема. Поэтому я написал сценарий kidtimer, который позволяет вам определять время использования и итоговые значения. Проект можно найти в Github в следующем месте:

Вот как его установить и использовать:

  1. Скопируйте и вставьте код в файл с именем kidtimer.install .

    #!/bin/bash
    # Restrict kids computer access to specific hours and total time.
    # By: Michael Groves - grover66_at_gmail_dot_com
    
    #variables
    basedir="/usr/local/kidtimer"
    configdir="/etc/kidtimer"
    Cdate='/bin/date | awk '{ print " " }''
    TUI=0
    HOUR='/bin/date +%H'
    DOW='/bin/date +%u'
    WEEKEND="no"
    [ "$DOW" == "6" ] && WEEKEND="yes"
    [ "$DOW" == "7" ] && WEEKEND="yes"
    
    #arguments
    [ $# -eq 0 ] && TUI=1
    [ $# -eq 1 ] && COMMAND=
    [ $# -eq 2 ] && COMMAND= && KID=
    [ $# -eq 3 ] && COMMAND= && KID= && Time=
    
    ################# Subroutines ##################
    ################################################
    
    go_check_install () {
    if [ ! -e $basedir ]; then
        go_initialize
    fi
    }
    
    
    go_initialize () {
    /bin/mkdir -p $basedir/time
    /bin/mkdir -p $basedir/schedule
    /bin/cp 
    sudo ./kidtimer.install
    
    /usr/local/bin/kidtimer && chmod +x /usr/local/bin/kidtimer echo "0 * * * * root /usr/local/bin/kidtimer hourly" > /etc/cron.d/kidtimer echo "0 0 * * * root /usr/local/bin/kidtimer daily" >> /etc/cron.d/kidtimer echo "* * * * * root /usr/local/bin/kidtimer check" >> /etc/cron.d/kidtimer echo "@reboot root /usr/local/bin/kidtimer daily" >> /etc/cron.d/kidtimer echo "@reboot root /usr/local/bin/kidtimer hourly" >> /etc/cron.d/kidtimer /bin/mkdir $configdir /usr/bin/touch $configdir/kid.list go_create_message_files echo "Kidtimer is now installed. Run /usr/local/bin/kidtimer to configure." } go_create_message_files () { cat << EOF > $basedir/send5.sh #!/bin/bash Name=$1 /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \ /usr/share/pixmaps/gnome-set-time.png "ALERT" \ "You will be logged out in 5 minutes."' $Name EOF chmod +x $basedir/send5.sh cat << EOF > $basedir/send4.sh #!/bin/bash Name=$1 /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \ /usr/share/pixmaps/gnome-set-time.png "ALERT" \ "You will be logged out in 4 minutes."' $Name EOF chmod +x $basedir/send4.sh cat << EOF > $basedir/send3.sh #!/bin/bash Name=$1 /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \ /usr/share/pixmaps/gnome-set-time.png "ALERT" \ "You will be logged out in 3 minutes."' $Name EOF chmod +x $basedir/send3.sh cat << EOF > $basedir/send2.sh #!/bin/bash Name= /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \ /usr/share/pixmaps/gnome-set-time.png "ALERT" \ "You will be logged out in 2 minutes."' $Name EOF chmod +x $basedir/send2.sh cat << EOF > $basedir/send1.sh #!/bin/bash Name=$1 /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \ /usr/share/pixmaps/gnome-set-time.png "ALERT" \ "You will be logged out in 1 minute."' $Name EOF chmod +x $basedir/send1.sh cat << EOF > $basedir/logout.sh #!/bin/bash Name=$1 /usr/bin/pkill -KILL -u $Name rm -rf /tmp/kidtimer.shutdown.$Name EOF chmod +x $basedir/logout.sh cat << EOF > $basedir/schedule/blank #hour weekday weekend (y/n) 00 n n 01 n n 02 n n 03 n n 04 n n 05 n n 06 n n 07 n n 08 y y 09 y y 10 y y 11 y y 12 y y 13 y y 14 y y 15 y y 16 y y 17 y y 18 y y 19 y y 20 n n 21 n n 22 n n 23 n n #minutes weekday weekend MAX 120 240 EOF } go_check () { for I in 'cat $configdir/kid.list'; do /usr/bin/users | grep -q $I if [ $? -eq 0 ]; then if [ -e $basedir/time/$I.ttl ]; then C='cat $basedir/time/$I.ttl' C=$((C + 1)) echo $C > $basedir/time/$I.ttl else echo 1 > $basedir/time/$I.ttl C=1 fi else go_clean_jobs $I exit 0 fi # check total time. W="no" [ $DOW -eq 6 ] && W="yes" [ $DOW -eq 7 ] && W="yes" [ "$W" == "no" ] && TIME_LIMIT='cat $basedir/schedule/$I | grep ^MAX | awk '{ print }'' [ "$W" == "yes" ] && TIME_LIMIT='cat $basedir/schedule/$I | grep ^MAX | awk '{ print }'' if [ $C -ge $TIME_LIMIT ]; then if [ ! -e /tmp/kidtimer.shutdown.$I ]; then /usr/bin/passwd $I -l go_logout $I fi fi done } go_clean_jobs () { K= for I in '/usr/bin/atq | awk '{ print }' | sort'; do /usr/bin/at -c $I | grep kidtimer | grep -q $K [ $? -eq 0 ] && /usr/bin/at -d $I done [ -e /tmp/kidtimer.shutdown.$K ] && rm -rf /tmp/kidtimer.shutdown.$K } go_daily () { for I in 'cat $configdir/kid.list'; do ls -l $basedir/time/$I.ttl | grep -q "$Cdate" if [ ! $? -eq 0 ]; then echo "0" > $basedir/time/$I.ttl fi done } go_hourly () { if [ -s $configdir/kid.list ]; then for I in 'cat $configdir/kid.list'; do if [ -e $basedir/schedule/$I ]; then [ "$WEEKEND" == "no" ] && TL='cat $basedir/schedule/$I | grep ^MAX | awk '{ print }'' [ "$WEEKEND" == "yes" ] && TL='cat $basedir/schedule/$I | grep ^MAX | awk '{ print }'' [ -e $basedir/time/$I.ttl ] && C='cat $basedir/time/$I.ttl' [ $C -ge $TL ] && /usr/bin/passwd $I -l && exit 0 [ "$WEEKEND" == "no" ] && R='grep ^$HOUR $basedir/schedule/$I | awk '{ print }'' [ "$WEEKEND" == "yes" ] && R='grep ^$HOUR $basedir/schedule/$I | awk '{ print }'' if [ "$R" == "y" ]; then /usr/bin/passwd $I -u else /usr/bin/passwd $I -l /usr/bin/users | grep -q $I && /usr/local/bin/kidtimer shutdown $I fi fi done fi } go_logout () { K= echo "$basedir/send5.sh $K" | at now + 1 minutes echo "$basedir/send4.sh $K" | at now + 2 minutes echo "$basedir/send3.sh $K" | at now + 3 minutes echo "$basedir/send2.sh $K" | at now + 4 minutes echo "$basedir/send1.sh $K" | at now + 5 minutes echo "$basedir/logout.sh $K" | at now + 6 minutes touch /tmp/kidtimer.shutdown.$K } go_addtime () { U=$KID A=$Time if [ "$KID" == "reset" ]; then echo "0" > $basedir/time/$U.ttl echo "Done." exit 0 elif [ "$KID" == "" ]; then echo "Error." echo "Syntax: addtime <user> <minutes|reset>" exit 1 else C='cat $basedir/time/$KID.ttl' C=$((C - Time)) echo $C > $basedir/time/$KID.ttl echo "New total minutes is "$C"." echo "Done." fi /usr/bin/passwd $KID -u } go_tui () { go_command_list echo -n "Choose: "; read -e X case "$X" in 1) go_setup_user ;; 2) go_modify_user ;; 3) go_remove_user ;; 4) go_list_users ;; 5) exit 0 ;; esac go_tui } go_command_list () { echo echo "1) Setup user limits." echo "2) Modify user limits." echo "3) Remove user limits." echo "4) List configured users." echo "5) Quit." echo } go_list_users () { echo echo "Users configured for kidtimer:" if [ -s $configdir/kid.list ]; then cat $configdir/kid.list else echo "No configured users." fi } go_setup_user () { echo echo -n "Username: "; read -e U /usr/bin/id $U > /dev/null 2>&1 if [ $? -eq 0 ]; then /bin/cp $basedir/schedule/blank $basedir/schedule/$U echo "0" > $basedir/time/$U.ttl echo $U >> $configdir/kid.list echo "Done." echo echo -n "Modify limits now ?(y/n): "; read -e M if [ "$M" == "y" ]; then if [ -e /usr/bin/nano ]; then /usr/bin/nano $basedir/schedule/$U echo "Done." else /usr/bin/vi $basedir/schedule/$U echo "Done." fi fi else echo "Error. User does not exist. Please create user using the useradd command first." fi } go_modify_user () { echo echo -n "Username: "; read -e U grep -q ^$U $configdir/kid.list if [ $? -eq 0 ]; then if [ -e /usr/bin/nano ]; then /usr/bin/nano $basedir/schedule/$U echo "Done." else /usr/bin/vi $basedir/schedule/$U echo "Done." fi else echo "Error. User not setup. Please setup user first." fi } go_remove_user () { echo echo -n "Username: "; read -e U grep -q ^$U $configdir/kid.list if [ $? -eq 0 ]; then grep -v ^$U $configdir/kid.list > /tmp/kidtimer.tmp cat /tmp/kidtimer.tmp > $configdir/kid.list echo "Done." else echo "Error. User is not setup." fi } go_help () { echo echo "Commands:" echo "--------------------------------------------------------------------------------" echo "addtime <user> <minutes> ... Increases allowed time for the day." echo "logout <user> ... Starts logout sequence for user." echo "hourly ... Enables/disables user access based on the schedule." echo "daily ... Resets time for the new day." echo "help ... This list." echo "--------------------------------------------------------------------------------" } ###################### Code #################### ################################################ go_check_install [ $TUI -eq 1 ] && go_tui case "$COMMAND" in addtime) go_addtime ;; logout) go_logout $KID ;; initialize) go_initialize ;; hourly) go_hourly ;; daily) go_daily ;; check) go_check ;; -h) go_help ;; help) go_help ;; esac exit 0
  2. Выполните его:

    sudo kidtimer
    
  3. Запустите его:

    sudo kidtimer help
    
  4. Настройка существующей учетной записи пользователя.

  5. Готово.

Для справки:

sudo kidtimer addtime user minutes

Добавить время в учетную запись пользователя (только для этого дня):

/etc/kidtimer/kid.list
/etc/cron.d/kidtimer
/usr/local/kidtimer/schedule/<user>
/usr/local/kidtimer/time/<user>.ttl
/usr/local/bin/kidtimer

Особенности:

  • Позвольте вашему ребенку часами дня получить доступ к компьютеру, как в будние дни, так и в выходные дни.
  • Установите максимальное время, как в будние дни, так и в выходные дни.

Ключевые файлы:

%pre%

Cronjobs:

  • Проверяйте каждую минуту, чтобы узнать, зарегистрирован ли пользователь. Если да, увеличьте общее время. Если нажать максимальное время, отключите учетную запись и запустите последовательность выхода из системы (всего 5 минут).
  • Почасово проверяйте, разрешен ли пользователю вход в систему. Если это так, включите учетную запись.
  • В полночь, время сброса.

Примечание:

В приложении используется notify-send для предупреждения о том, что время пользователя заканчивается. Когда время истекает, все пользовательские процессы прекращаются, поэтому, пожалуйста, подготовьте пользователя.

    
ответ дан grover66 18.10.2013 в 04:48
5

Автовыход крайне расстраивает, если вы находитесь в середине чего-то. Это жестоко, это жестоко, это грубо. И не важно, сколько вам лет. Одно дело, когда вы просто зависимы от компьютера, и это совсем другое, когда вы отслеживаете время и выходите за 5 секунд, прежде чем вам удастся нажать кнопку отправки или сохранить документ. Я предлагаю вам использовать автоматическое напоминание вместо автоматического кикера. Это научит ваших детей уважать друг друга и позволить друг другу охотно пользоваться компьютером.

Есть еще более легкая альтернатива. Начните с отслеживания количества времени, которое каждый ребенок проводит с помощью компьютера, и сделайте собранные данные доступными для всех, чтобы они могли его видеть. Эта невероятно простая вещь (применительно к пропускной способности интернета) спасла мою жизнь, когда я был администратором сети в офисе, полном взрослых. Публичная статистика об использовании пропускной способности для каждого компьютера (просто количество байтов, а не информация о деанонимизации, например, списки посещенных сайтов и т. Д.) Превратили ситуацию из «меня - злого жадного админа против них - бедных злоупотребляющих офисных пользователей» на «человека, вы скачали в 5 раз больше меня, это плохо! » «Извините, я действительно скачал, я смотрел много youtube во время обеденных перерывов, больше не буду делать этого с такой скоростью» - меня просто исключили из сценария конфронтации.

    
ответ дан vh1 21.08.2010 в 13:41
5

timekpr . Эта программа будет отслеживать и контролировать использование компьютера учетными записями пользователей. Вы можете ограничить их ежедневное использование на основе временной продолжительности доступа и настроить периоды дня, когда они могут или не могут войти в систему. С помощью этого приложения администраторы могут ограничить время входа в логин или время доступа к учетной записи. Приложение работает в качестве родительского контроля времени и будет полезно для родителей, которые хотят ограничить время доступа к ребенку.

Even Nedberg proposed the following answer:
Just started copying into the 11.10 version for the PPA. Should finish
in a few minutes.

Вы можете обновить свою систему неподдерживаемыми пакетами из этого ненадежного PPA, добавив ppa:timekpr-maintainers/ppa в источники программного обеспечения вашей системы.

deb http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu oneiric main 
deb-src http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu oneiric main 

Этот пакет доступен в:

  • Oneiric Problem см. отчет об ошибке ....
  • нарядной
  • Maverick
  • осознанных
  • Кармическое
  • Бойкий
  • Intrepid
  • <р> Hardy

  • Что такое PPAs и как я могу использовать они?

ПРОБЛЕМА:

Сообщаю об ошибке Bug здесь , чтобы скрестить ваш палец и ждать ....

    
ответ дан hhlp 24.10.2011 в 23:01
2

Я пробовал timekpr , но не работал. Затем сделал вариант, который работает на моем Ubuntu. Это то, что нужно сделать для этого варианта:

  1. Добавьте лимит времени в файл /var/lib/timelimit/user_to_be_limited.limit только с правами root. например 1800 за 1800 секунд (30 минут).

  2. Создайте /usr/local/bin/timelimit.sh с правами root со следующими параметрами:

    #!/bin/bash
    
    pollTime=30
    export DISPLAY=:0
    
    while(true); do
        sleep $pollTime
        usersLogedIn=$( users|sed -e 's/\s\+/\n/g'|sort|uniq )
        for userName in $usersLogedIn; do
            if [[ -e "/var/lib/timelimit/$userName.limit" ]]
            then
                if [[ ! -e "/var/lib/timelimit/$userName.time" || '( stat -c '%z'  /var/lib/timelimit/$userName.time|cut -c9,10 )' != 'date +%d' ]]
                then 
                    echo $pollTime > /var/lib/timelimit/$userName.time
                else
                    timeUsed=$(( 'cat /var/lib/timelimit/$userName.time' + $pollTime ))
                    echo $timeUsed > /var/lib/timelimit/$userName.time
                fi
                if [[ 'cat /var/lib/timelimit/$userName.time' -gt 'cat /var/lib/timelimit/$userName.limit' ]]
                then
                    export XAUTHORITY=/home/$userName/.Xauthority
                    notify-send --icon=gtk-dialog-warning --urgency=critical -t 30000 "$userName" "You have 60 seconds left!"
                    sleep 60
                    pkill -u $userName
                fi
            fi
        done
    done
    
  3. Добавить в /etc/rc.local :

    sudo /usr/local/bin/timelimit.sh &
    
  4. Перезагрузите Ubuntu

ответ дан Csaba 18.04.2014 в 22:57
2

Введение

Мы можем проверить, зарегистрирован ли пользователь командой:

who -u

, который дает нам выход вроде:

$ who -u
jacob    :0           2016-03-17 20:48   ?          2557 (:0)
newuser  :1           2016-03-17 20:50   ?          4466 (:1)

На выходе мы получаем pid целевого пользователя, который должен быть остановлен, если время превышает предел.

Решение

Предполагая, что у вашего пользователя нет привилегий sudo :

Это решение представляет собой небольшой фоновый скрипт. Он ограничивает использование в день определенным количеством минут, чтобы установить его в начале скрипта. После настройки (что не слишком сложно) он работает очень легко, и после этого никаких дополнительных действий не требуется.

Чтобы предотвратить нежелательную потерю данных, возможно, открытые файлы, 60 секунд до истекает срок действия целевого пользователя, появится сообщение о его или ее DISPLAY :

Скрипт

#!/usr/bin/python3
import subprocess
import os
import sys
import time


#--- set the time limit below (minutes)
minutes = 120
#--- set the user name to limit below
user = "newuser"

uselog = "/opt/limit/uselog"
datefile = "/opt/limit/currdate"

def read(f):
    try:
        return int(open(f).read().strip())
    except FileNotFoundError:
        pass

def message(disp, user):
    return "DISPLAY="+disp+" su - "+user+" -c "+'"'+\
      "notify-send 'User "+user+\
      " will be logged off in 60 seconds'"+'"'


currday1 = read(datefile)

while True:
    time.sleep(10)
    currday2 = int(time.strftime("%d"))
    # check if the day has changed, to reset the used quantum
    if currday1 != currday2:
        open(datefile, "wt").write(str(currday2))
        try:
            os.remove(uselog)  
        except FileNotFoundError:
            pass
    # if the pid of the targeted process exists, add a "tick" to the used quantum
    check = subprocess.check_output(["who", "-u"]).decode("utf-8")
    pid = [l.split() for l in check.splitlines() if user in l]
    if pid:
        n = read(uselog)
        n = n + 1 if n != None else 0
        open(uselog, "wt").write(str(n))
        # when time exceeds the permitted amount, kill the process
        if n > minutes*6:
            disp = [d for d in [d[1] for d in pid] if all([":" in d, not "." in d])][0]
            subprocess.Popen(["/bin/bash", "-c", message(disp, user)])
            time.sleep(60)
            pids = [p[-2] for p in pid]
            for p in pids:
                subprocess.Popen(["kill", p])  

    currday1 = currday2

Как использовать

  1. На рабочем столе (или в другом месте) создайте папку с именем: limit
  2. Скопируйте сценарий в пустой файл, сохраните его как limit_use (без расширения) внутри папки и сделать его исполняемым
  3. Изменить в заголовке скрипта имя пользователя для ограничения и максимальное количество разрешенных минут. В примере:

    #--- set the time limit below (minutes)
    minutes = 1
    #--- set the user name to limit below
    user = "jacob"
    
  4. Скопируйте папку в каталог /opt :

    cp -r /path/to/limit /opt
    
  5. Теперь отредактируйте /etc/rc.local , чтобы заставить скрипт запускать его как root при запуске:

    sudo -i gedit /etc/rc.local
    

    Перед строкой

    exit 0
    

    другая строка:

    /opt/limit/limit_use &
    

Объяснение; как это работает

  • Один раз за 10 секунд скрипт смотрит, зарегистрирован ли целевой пользователь. Если это так, он «добавляет» одну «точку» к общему использованию для записи в файл ( /opt/limit/uselog ). Если дневной предел достигнут, скрипт больше не позволяет пользователю войти в систему, убивает его процесс, если он существует.
  • В день изменения (дата записывается в файл, поэтому перезагрузка не поможет), файл журнала удаляется, что позволяет увеличить время использования.
  • Поскольку сценарий работает под boot up , из rc.local только пользователь (ы) с привилегиями sudo может остановить скрипт, даже тогда, только если пользователь знает имя процесса.

Остановить скрипт

Если вы хотите остановить скрипт, используйте команду:

sudo kill "$(pgrep limit_use)"

Но для этого вам понадобится пароль sudo.

    
ответ дан Jacob Vlijm 17.03.2016 в 20:46
2

Я просто сделал ответ легко. Код объясняется в потоке Ссылка . Короче: ограничение, заданное в минутах в день, задание cron каждую минуту, сообщение пользователю, чтобы держать его в курсе и принудительный выход из системы.

Чтобы загрузить и установить это, откройте терминал и выполните следующие команды:

cd /tmp/
git clone https://github.com/Thomas-Baeckeroot/ParentalControl.git
cd ParentalControl/
./install.sh

В процессе установки будет запрашиваться пароль администратора (для установки задания cron, для копирования сценария ...). Оттуда вы будете руководствоваться за всех. На одном месте также есть ./uninstall.sh. Он построен для работы со всеми дистрибутивами на основе Ubuntu (Mint и т. Д.), Вероятно, и все debian). Если возникла какая-либо проблема, сообщите мне, включая системную версию и графическую среду, в комментариях:

uname -a
echo $XDG_CURRENT_DESKTOP

Томас Бакеркет

    
ответ дан Thomas Baeckeroot 10.09.2017 в 14:32