Как установить ограничения по времени использования компьютера? [дубликат]

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

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

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

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

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

66
задан 13 April 2017 в 15:24

11 ответов

Таймер блокировки экрана

systray.gif

Создайте свой собственный таймер блокировки экрана вместо сторонних приложений

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

  • Используйте gedit для создания скрипта lock-screen-timer
  • Скопируйте и вставьте код из этого окна в lock-screen-timer
  • Отметьте lock-screen-timer как исполняемый файл
  • Протестируйте!
  • Настройте Nautilus для выполнения сценариев bash
  • Создайте ссылку на ярлык на рабочем столе
  • Отслеживайте оставшееся время

Используйте gedit для создания сценария таймера блокировки экрана

Откройте Терминал , используя Ctrl + Alt + T и введите:

gedit lock-screen-timer

Скопируйте и вставьте код из окна ниже в lock-screen-timer

Вернитесь на этот экран и скопируйте следующий код, выделив его и нажав Ctrl + C :

#!/bin/bash

# NAME: lock-screen-timer
# PATH: $HOME/bin
# DESC: Lock screen in x minutes
# CALL: Place on Desktop or call from Terminal with "lock-screen-timer 99"
# DATE: Created Nov 19, 2016. Last revision Mar 22, 2018.
# UPDT: Updated to support WSL (Windows Subsystem for Linux)
#       Remove hotplugtv. Replace ogg with paplay.

# NOTE: Time defaults to 30 minutes.
#       If previous version is sleeping it is killed.
#       Zenity is used to pop up entry box to get number of minutes.
#       If zenity is closed with X or Cancel, no screen lock timer is launched.
#       Pending lock warning displayed on-screen at set intervals.
#       Write time remaining to ~/.lock-screen-timer-remaining

MINUTES="$1" # Optional parameter 1 when invoked from terminal.

# if no parameters set default MINUTES to 30
if [ $# == 0 ]; then
    MINUTES=30
fi

DEFAULT="$MINUTES" # When looping, minutes count down to zero. Save deafult for subsequent timers.

# Check if lock screen timer already running
pID=$(pgrep -f "${0##*/}") # All PIDs matching lock-screen-timer name
PREVIOUS=$(echo "$pID" | grep -v ^"$$") # Strip out this running copy ($$$)
if [ "$PREVIOUS" != "" ]; then
    kill "$PREVIOUS"
    rm ~/.lock-screen-timer-remaining
    zenity --info --title="Lock screen timer already running" --text="Previous lock screen timer has been terminated."
fi

# Running under WSL (Windows Subsystem for Linux)?
if cat /proc/version | grep Microsoft; then
    WSL_running=true
else
    WSL_running=false
fi


while true ; do # loop until cancel

    # Get number of minutes until lock from user
    MINUTES=$(zenity --entry --title="Lock screen timer" --text="Set number of minutes until lock" --entry-text="$DEFAULT")

    RESULT=$? # Zenity return code
    if [ $RESULT != 0 ]; then
        break ; # break out of timer lock screen loop and end this script.
    fi

    DEFAULT="$MINUTES" # Save deafult for subsequent timers.
    if [[ $MINUTES == 0 ]] || [[ $MINUTES == "" ]]; then
        break ; # zero minutes considered cancel.
    fi

    # Loop for X minutes, testing each minute for alert message.
    (( ++MINUTES )) 
    while (( --MINUTES > 0 )); do
        case $MINUTES in 1|2|3|5|10|15|30|45|60|120|480|960|1920)
            notify-send --urgency=critical --icon=/usr/share/icons/gnome/256x256/status/appointment-soon.png "Locking screen in ""$MINUTES"" minute(s)." ;
            if [[ $WSL_running == true ]]; then  
                powershell.exe -c '(New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").PlaySync();'
            else
               paplay /usr/share/sounds/freedesktop/stereo/complete.oga ;
            fi
           ;;
        esac;

        # Record number of minutes remaining to file other processes can read.
        echo "$MINUTES Minutes" > ~/.lock-screen-timer-remaining

        sleep 60

    done

    rm ~/.lock-screen-timer-remaining # Remove work file others can see our progress with

    if [[ $WSL_running == true ]]; then  
        # Call lock screen for Windows 10
        rundll32.exe user32.dll,LockWorkStation
    else
        # Call screen saver lock for Ubuntu versions > 14.04.
        dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
    fi

done # End of while loop getting minutes to next lock screen

exit 0 # Closed dialog box or "Cancel" selected.

Затем вернитесь в пустое окно gedit и вставьте код, используя Ctrl + V . Сохраните файл и выйдите из редактора обратно в командную строку.

Отметьте lock-screen-timer как исполняемый файл

Теперь нам нужно сделать скрипт исполняемым, набрав:

chmod +x lock-screen-timer

Test It !

Перед вызовом скрипта из графического интерфейса мы вызовем его из терминала, чтобы увидеть, отображаются ли какие-либо сообщения об ошибках:

~/lock-screen-timer

Вам будет предложено указать количество минут:

Lock Screen Timer

Установите желаемое число минут и нажмите ОК, чтобы запустить таймер. Когда осталось 15, 10, 5, 3, 2 и 1 минута (ы), раздастся системный звук и появится всплывающее сообщение с подсказкой, когда экран будет заблокирован. После блокировки экрана вам необходимо ввести пароль, чтобы разблокировать экран.

Настройка Nautilus для выполнения сценариев bash

Nautilus определяет, что происходит, когда мы дважды щелкаем исполняемый сценарий, когда это окно отображения файлов или ссылка на рабочем столе. Нормальным поведением является редактирование сценария с помощью gedit . Мы хотим изменить это поведение так, чтобы оно выполнялось.

Запустите Nautilus и перейдите в каталог, содержащий lock-screen-timer . Щелкните левой кнопкой мыши по нему один раз, чтобы сфокусироваться. Наведите указатель мыши на верхнюю строку меню, пока не появится меню «Редактировать файл ...», используйте:

  1. Щелкните раскрывающееся меню Правка
  2. Щелкните Свойства параметр
  3. Щелкните Поведение Вкладка
  4. Обратите внимание на переключатели под Исполняемые текстовые файлы
  5. Установите переключатель Запускать исполняемые текстовые файлы при их открытии

Создать ссылку на рабочий стол

Из предыдущего раздела таймер экрана блокировки по-прежнему имеет фокус. Если нет, перейдите к сценарию и щелкните по нему один раз левой кнопкой мыши, чтобы сфокусироваться. Затем используйте:

  • Щелкните правой кнопкой мыши файл, и появятся параметры контекстного меню.
  • В меню выберите Сделать ссылку .
  • Появится новый значок под названием Ссылка для блокировки- screen-timer .
  • Щелкните левой кнопкой мыши новый значок и перетащите его из Nautilus на рабочий стол.

Теперь вы можете дважды щелкнуть ссылку на рабочем столе, и сценарий будет запущен. Появится диалоговое окно для ввода количества минут. Представлены две кнопки Отмена и ОК . Если щелкнуть X , чтобы закрыть окно, это будет то же самое, что выбрать Отмена .

После того, как таймер запустится, и вы дважды щелкните по нему еще раз, первая запущенная копия будет " убит ". Теперь вы можете запустить новый обратный отсчет экрана блокировки или щелкнуть Отменить , чтобы отсчет времени не выполнялся.

Отображение оставшегося времени в панели задач / области уведомлений

Пока таймер экрана блокировки работает, он записывает, сколько минут осталось до файл ~ / .lock-screen-timer-Осталось . Вы можете просмотреть этот файл с помощью команды watch или отобразить его на панели индикаторов панели задач / приложений Ubuntu, как показано в верхней части этого ответа. Чтобы отобразить оставшееся время в области уведомлений, следуйте инструкциям в этом разделе вопросов и ответов: ( Может ли BASH отображаться на панели задач как индикатор приложения? ).

1
ответ дан 5 January 2021 в 23:59

Я только что выпустил бета-версию своего нового приложения LittleBrother , которое может отслеживать время воспроизведения на машинах Linux. Тестовые пользователи могут попробовать пакет Debian. Инструкции о том, как его загрузить и использовать, можно найти здесь: https://github.com/marcus67/little_brother . Однако установка может быть немного грубой. Это особенности приложения:

  • Любое количество пользователей может отслеживаться.
  • Каждый пользователь может иметь определенный набор правил, определяющих разрешенное время воспроизведения.
  • Правила могут быть адаптированы к «контекстам», например день недели и / или расписание отпусков (в настоящее время поддерживаются только расписания на немецком языке).
  • Время воспроизведения может быть ограничено временным окном (от, до).
  • Максимальное время воспроизведения в день может быть
  • Пользователи могут быть вынуждены сделать перерыв после определенного максимального времени сеанса.
  • Пользователи могут быть вынуждены ждать минимального времени перерыва после их активности.
  • Любое количество клиентских хостов Linux может отслеживаться (в настоящее время для этого требуется, чтобы пользователи имели одинаковый логин на всех машинах.)
  • Существует главный хост с историей действий всех пользователей. Этот главный хост проверяет наборы правил и предлагает клиентским хостам завершить процессы, если это необходимо.
  • Главный хост предлагает простой веб-интерфейс для просмотра активности пользователя в течение заданной длины истории (например, 7 дней) и страницу администрирования для динамического определить исключения из правил на заданное количество дней в будущем.
  • Веб-приложение может запускаться за прокси-сервером, чтобы оно было доступно издалека, позволяя удаленное администрирование после получения звонков от молодых пользователей, просящих больше времени для игры.
  • ] Приложение имеет международную языковую поддержку. В настоящее время доступны переводы на английский и немецкий языки. Пользователям предлагается предоставить переводы на другие языки.
  • Приложение использует голосовую генерацию, чтобы информировать пользователя о предстоящем принудительном выходе из системы. Кроме того, эти голосовые сообщения интернационализированы.
  • Помимо времени, затрачиваемого на хосты Linux, приложение также может отслеживать время активности на других устройствах, таких как смартфоны или столы. Он использует тот факт, что большинство современных операционных систем переводят устройства в какой-либо режим энергосбережения, когда они не используются. Таким образом, ответ сети (пингом) можно использовать для определения активности на этих устройствах. В отличие от хостов Linux, приложение не сможет завершить работу. Однако время воспроизведения будет добавлено к общему времени воспроизведения и, следовательно, будет влиять на разрешенное время, а также на правила времени перерыва на хостах Linux.

Некоторые снимки экрана:

Status Page Administration Page

2
ответ дан 5 January 2021 в 23:59

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

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

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

     #! / bin / bash
     # Ограничьте доступ детей к компьютеру определенными часами и общим временем.
     # Автор: Майкл Гроувс - grover66_at_gmail_dot_com
    
     # переменные
    basedir = "/ usr / local / kidtimer"
    configdir = "/ etc / kidtimer"
    Cdate = `/ bin / date |  awk '{print $ 2 "" $ 3}' `
    TUI = 0
    ЧАС = `/ bin / date +% H`
    DOW = `/ bin / date +% u`
    WEEKEND = "нет"
     ["$ DOW" == "6"] && WEEKEND = "да"
     ["$ DOW" == "7"] && WEEKEND = "да"
    
     # аргументы
     [$ # -eq 0] && TUI = 1
     [$ # -eq 1] && КОМАНДА = $ 1
     [$ # -eq 2] && КОМАНДА = $ 1 && KID = $ 2
     [$ # -eq 3] && КОМАНДА = $ 1 && KID = $ 2 && Время = 3 $
    
     ################# Подпрограммы #################
     #############################################
    
    go_check_install () {
    если [ !  -e $ basedir];  тогда
      go_initialize
    фи
     }
    
    
    go_initialize () {
     / bin / mkdir -p $ basedir / время
     / bin / mkdir -p $ basedir / расписание
     / bin / cp $ 0 / usr / local / bin / kidtimer && chmod + x / usr / local / bin / kidtimer
    echo "0 * * * * root / usr / local / bin / kidtimer ежечасно"> /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 ежечасно" >> /etc/cron.d/kidtimer
     / bin / mkdir $ configdir
     / usr / bin / touch $ configdir / kid.list
    go_create_message_files
    echo "Kidtimer установлен. Для настройки запустите / usr / local / bin / kidtimer."
     }
    
    
    go_create_message_files () {
    cat << EOF> $ basedir / send5.sh
     #! / bin / bash
    Имя = \ $ 1
     / bin / su -s / bin / bash -c 'ДИСПЛЕЙ =: 0 / usr / bin / notify-send -i \
      /usr/share/pixmaps/gnome-set-time.png "ПРЕДУПРЕЖДЕНИЕ" \
      "Вы выйдете из системы через 5 минут." '\ $ Name
    EOF
    chmod + x $ на основеir / send5.sh
    cat << EOF> $ basedir / send4.sh
     #! / bin / bash
    Имя = \ $ 1
     / bin / su -s / bin / bash -c 'ДИСПЛЕЙ =: 0 / usr / bin / notify-send -i \
      /usr/share/pixmaps/gnome-set-time.png "ПРЕДУПРЕЖДЕНИЕ" \
      "Вы выйдете из системы через 4 минуты." '\ $ Name
    EOF
    chmod + x $ на основеir / send4.sh
    cat << EOF> $ basedir / send3.sh
     #! / bin / bash
    Имя = \ $ 1
     / bin / su -s / bin / bash -c 'ДИСПЛЕЙ =: 0 / usr / bin / notify-send -i \
      /usr/share/pixmaps/gnome-set-time.png "ПРЕДУПРЕЖДЕНИЕ" \
      "Вы выйдете из системы через 3 минуты." '\ $ Name
    EOF
    chmod + x $ на основеir / send3.sh
    cat << EOF> $ basedir / send2.sh
     #! / bin / bash
    Имя = $ 1
     / bin / su -s / bin / bash -c 'ДИСПЛЕЙ =: 0 / usr / bin / notify-send -i \
      /usr/share/pixmaps/gnome-set-time.png "ПРЕДУПРЕЖДЕНИЕ" \
      "Вы выйдете из системы через 2 минуты." '\ $ Name
    EOF
    chmod + x $ на основеir / send2.sh
    cat << EOF> $ basedir / send1.sh
     #! / bin / bash
    Имя = \ $ 1
     / bin / su -s / bin / bash -c 'ДИСПЛЕЙ =: 0 / usr / bin / notify-send -i \
      /usr/share/pixmaps/gnome-set-time.png "ПРЕДУПРЕЖДЕНИЕ" \
      "Вы выйдете из системы через 1 минуту." '\ $ Name
    EOF
    chmod + x $ на основеir / send1.sh
    cat << EOF> $ basedir / logout.sh
     #! / bin / bash
    Имя = \ $ 1
     / usr / bin / pkill -KILL -u \ $ Имя
    rm -rf /tmp/kidtimer.shutdown.\$ Имя
    EOF
    chmod + x $ на основеir / logout.sh
    cat << EOF> $ basedir / schedule / blank
     # час будний выходной (да / нет)
    00 п п
    01 п п
    02 н н
    03 н н
    04 н н
    05 н н
    06 н н
    07 н н
    08 г г
    09 г г
    10 лет г
    11 лет г
    12 лет г
    13 лет
    14 лет
    15 лет
    16 лет
    17 лет
    18 лет
    19 лет
    20 п п
    21 п п
    22 н н
    23 п п
     # минуты будний день выходные
    МАКС 120 240
    EOF
     }
    
    
    go_check () {
    для I в `cat $ configdir / kid.list`;  делать
      / usr / bin / users |  grep -q $ I
      если [$?  -экв 0];  тогда
      если [-e $ basedir / time / $ I.ttl];  тогда
      C = `cat $ basedir / time / $ I.ttl`
      С = $ ((С + 1))
      echo $ C> $ basedir / time / $ I.ttl
      еще
      эхо 1> $ basedir / time / $ I.ttl
      С = 1
      фи
      еще
      go_clean_jobs $ I
      выход 0
      фи
      # проверить общее время.
      W = "нет"
      [$ DOW -eq 6] && W = "да"
      [$ DOW -ур. 7] && W = "да"
      ["$ W" == "нет"] && TIME_LIMIT = `cat $ basedir / schedule / $ I |  grep ^ MAX |  awk '{print $ 2}' `
      ["$ W" == "да"] && TIME_LIMIT = `cat $ basedir / schedule / $ I |  grep ^ MAX |  awk '{print $ 3}' `
      если [$ C -ge $ TIME_LIMIT];  тогда
      если [ !  -e /tmp/kidtimer.shutdown.$I];  тогда
      / usr / bin / passwd $ I -l
      go_logout $ I
      фи
      фи
    сделанный
     }
    
    
    go_clean_jobs () {
    К = 1 доллар
    для I в `/ usr / bin / atq |  awk '{print $ 1}' |  sort`;  делать
      / usr / bin / at -c $ I |  grep kidtimer |  grep -q $ K
      [$?  -eq 0] && / usr / bin / at -d $ I
    сделанный
     [-e /tmp/kidtimer.shutdown.$K] && rm -rf /tmp/kidtimer.shutdown.$K
     }
    
    
    go_daily () {
    для I в `cat $ configdir / kid.list`;  делать
      ls -l $ basedir / time / $ I.ttl |  grep -q "$ Cdate"
      если [ !  $?  -экв 0];  тогда
      echo "0"> $ basedir / time / $ I.ttl
      фи
    сделанный
     }
    
    
    go_hourly () {
    если [-s $ configdir / kid.list];  тогда
      для I в `cat $ configdir / kid.list`;  делать
      если [-e $ basedir / schedule / $ I];  тогда
      ["$ WEEKEND" == "нет"] && TL = `cat $ basedir / schedule / $ I |  grep ^ MAX |  awk '{print $ 2}' `
      ["$ WEEKEND" == "да"] && TL = `cat $ basedir / schedule / $ I |  grep ^ MAX |  awk '{print $ 3}' `
      [-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 $ 2}' `
      ["$ WEEKEND" == "да"] && R = `grep ^ $ HOUR $ basedir / schedule / $ I |  awk '{print $ 3}' `
      если ["$ R" == "y"];  тогда
      / usr / bin / passwd $ I -u
      еще
      / usr / bin / passwd $ I -l
      / usr / bin / users |  grep -q $ I && / usr / local / bin / kidtimer shutdown $ I
      фи
      фи
      сделанный
    фи
     }
    
    
    go_logout () {
    К = 1 доллар
    echo "$ basedir / send5.sh $ K" |  сейчас +1 минута
    echo "$ basedir / send4.sh $ K" |  сейчас + 2 минуты
    echo "$ basedir / send3.sh $ K" |  сейчас + 3 минуты
    echo "$ basedir / send2.sh $ K" |  сейчас + 4 минуты
    echo "$ basedir / send1.sh $ K" |  сейчас + 5 минут
    echo "$ basedir / logout.sh $ K" |  сейчас + 6 минут
    коснитесь /tmp/kidtimer.shutdown.$K
     }
    
    
    go_addtime () {
    U = $ KID
    A = $ Время
    если ["$ KID" == "сбросить"];  тогда
      echo "0"> $ basedir / time / $ U.ttl
      эхо "Готово".
      выход 0
    elif ["$ KID" == ""];  тогда
      echo "Ошибка."
      echo "Синтаксис: addtime <пользователь> <минуты | сброс>"
      выход 1
    еще
      C = `cat $ basedir / time / $ KID.ttl`
      C = $ ((C - Время))
      echo $ C> $ basedir / time / $ KID.ttl
      echo "Новое общее количество минут -" $ C "."
      эхо "Готово".
    фи
    
     / usr / bin / passwd $ KID -u
     }
    
    
    go_tui () {
    go_command_list
    echo -n «Выбрать:»;  читать -e X
    case "$ X" в
    1) go_setup_user
      ;;
    2) go_modify_user
      ;;
    3) go_remove_user
      ;;
    4) go_list_users
      ;;
    5) выход 0
      ;;
    esac
    go_tui
     }
    
    
    go_command_list () {
    эхо
    echo "1) Установить лимиты пользователей."
    echo "2) Изменить ограничения для пользователей."
    echo "3) Снять ограничения пользователей."
    echo "4) Список настроенных пользователей."
    echo «5) Выйти».
    эхо
     }
    
    
    go_list_users () {
    эхо
    echo "Пользователи, настроенные на детство:"
    если [-s $ configdir / kid.list];  тогда
      кошка $ configdir / kid.list
    еще
      echo «Нет настроенных пользователей».
    фи
     }
    
    go_setup_user () {
    эхо
    echo -n "Имя пользователя:";  читать -e U
     / usr / bin / id $ U> / dev / null 2> & 1
    если [$?  -экв 0];  тогда
      / bin / cp $ basedir / schedule / blank $ basedir / schedule / $ U
      echo "0"> $ basedir / time / $ U.ttl
      эхо $ U >> $ configdir / kid.list
      эхо "Готово".
      эхо
      echo -n "Изменить лимиты сейчас? (да / нет):";  читать -e M
      если ["$ M" == "y"];  тогда
      если [-e / usr / bin / nano];  тогда
      / usr / bin / nano $ basedir / schedule / $ U
      эхо "Готово".
      еще
      / usr / bin / vi $ basedir / schedule / $ U
      эхо "Готово".
      фи
      фи
    еще
      echo "Ошибка. Пользователь не существует. Сначала создайте пользователя с помощью команды useradd."
    фи
     }
    
    
    go_modify_user () {
    эхо
    echo -n "Имя пользователя:";  читать -e U
    grep -q ^ $ U $ configdir / kid.list
    если [$?  -экв 0];  тогда
      если [-e / usr / bin / nano];  тогда
      / usr / bin / nano $ basedir / schedule / $ U
      эхо "Готово".
      еще
      / usr / bin / vi $ basedir / schedule / $ U
      эхо "Готово".
      фи
    еще
      echo "Ошибка. Пользователь не настроен. Сначала настройте пользователя."
    фи
     }
    
    
    go_remove_user () {
    эхо
    echo -n "Имя пользователя:";  читать -e U
    grep -q ^ $ U $ configdir / kid.list
    если [$?  -экв 0];  тогда
      grep -v ^ $ U $ configdir / kid.list> /tmp/kidtimer.tmp
      кошка /tmp/kidtimer.tmp> $ configdir / kid.list
      эхо "Готово".
    еще
      echo "Ошибка. Пользователь не настроен."
    фи
     }
    
    
    go_help () {
    эхо
    echo "Команды:"
    эхо "------------------------------------------------  -------------------------------- "
    echo "addtime <пользователь> <минуты> ... Увеличивает допустимое время в течение дня."
    echo "logout  ... Запускает последовательность выхода пользователя."
    echo "ежечасно ... Разрешает / запрещает доступ пользователей по расписанию."
    echo "ежедневно ... Сбрасывает время для нового дня".
    echo "Помощь ... Этот список".
    эхо "------------------------------------------------  -------------------------------- "
     }
    
     ##################### Код ####################
     #############################################
    
    go_check_install
     [$ TUI -eq 1] && go_tui
    
    case "$ COMMAND" в
    addtime) go_addtime
      ;;
    logout) go_logout $ KID
      ;;
    инициализировать) go_initialize
      ;;
    ежечасно) go_hourly
      ;;
    ежедневно) go_daily
      ;;
    чек) go_check
      ;;
     -h) go_help
      ;;
    помощь) go_help
      ;;
    esac
    выход 0
     
  2. Выполнить:

     sudo ./kidtimer.install
     
  3. Запустите:

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

  5. Готово.

Для справки:

sudo kidtimer help

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

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

Cronjobs:

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

Примечание:

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

6
ответ дан 5 January 2021 в 23:59

Я просто сделал доступным ответ. Код объясняется в потоке http://forums.linuxmint.com/viewtopic.php?f=213&t=77687 . Вкратце: ограничение в минутах в день, задание 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

2
ответ дан 5 January 2021 в 23:59

Введение

Мы можем проверить, есть ли у пользователя вошли в систему с помощью команды:

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 секунд до установленного пользователем лимита времени. истекает, сообщение появится на его ДИСПЛЕЕ :

enter image description here

Сценарий

#!/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. Редактировать в заголовке сценарий имя пользователя для ограничения и максимальное количество разрешенных минут. В примере:

     # --- установите лимит времени ниже (минуты)
    минут = 1
     # --- установим ограничение для имени пользователя ниже
    user = "jacob"
     
  4. Скопируйте папку в каталог / opt :

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

     sudo -i gedit /etc/rc.local
     

    Непосредственно перед строкой

     выход 0
     

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

     / opt / limit / limit_use &
     

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

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

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

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

sudo kill "$(pgrep limit_use)"

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

3
ответ дан 5 January 2021 в 23:59

Timekpr

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

account required pam_time.so

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

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

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

OnlyShowIn=GNOME;XFCE;KDE;Unity;

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

/etc/init.d/timekpr start

для 14. 04:

Для Ubuntu 14.04 был опубликован новый релиз/вкладыш таймекпра Эдуардом Безверхием в его ppa:mjasnik/ppa.

8
ответ дан 5 January 2021 в 23:59

Я попробовал 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
    экспорт DISPLAY =: 0
    
    пока (правда);  делать
      sleep $ pollTime
      usersLogedIn = $ (пользователи | sed -e 's / \ s \ + / \ n / g' | sort | uniq)
      для userName в $ usersLogedIn;  делать
      если [[-e "/var/lib/timelimit/$userName.limit"]]
      тогда
      если [[ !  -e "/var/lib/timelimit/$userName.time" ||  `(stat -c '% z' /var/lib/timelimit/$userName.time|cut -c9,10)`! = `date +% d`]]
      тогда
      echo $ pollTime> /var/lib/timelimit/$userName.time
      еще
      timeUsed = $ ((`cat / var / lib / timelimit / $ userName.time` + $ pollTime))
      echo $ timeUsed> /var/lib/timelimit/$userName.time
      фи
      если [[`cat / var / lib / timelimit / $ userName.time` -gt` cat / var / lib / timelimit / $ userName.limit`]]
      тогда
      экспорт XAUTHORITY = / home / $ userName / .Xauthority
      notify-send --icon = gtk-dialog-warning --urgency = critical -t 30000 "$ userName" "У вас осталось 60 секунд!"
      спать 60
      pkill -u $ userName
      фи
      фи
      сделанный
    сделанный
     
  3. Добавить в /etc/rc.local :

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

2
ответ дан 5 January 2021 в 23:59

Ubuntu <= 11.10 Пользователи следуют этому руководству, если пользователь Ubuntu >= 11. 10 Прочитайте уведомление на нижней странице :

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

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

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

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

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

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

services;ttys;users;times

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 часами, а также ограничивают доступ к Интернету в эти часы. Корень сможет входить в систему в любое время и просматривать Интернет в любое время.

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


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

Manual Configuration

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

В этом руководстве мы будем использовать PAM (Pluggable Authentication Modules, English Pluggable Authentication Modules). Это позволяет вам контролировать аутентификацию пользователей при их подключении. Затем мы будем использовать файлы конфигурации безопасности для определения разрешенных часов входа. Эти манипуляции могут быть выполнены на любой версии 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, вы должны изменить логин того же файла и добавить ту же строку кода, что и ранее подтвержденный. Это действие также распространяется на людей, которые установили GUI и хотят заблокировать доступ к экрану входа и терминалам.

Configure Access Hours

Теперь, когда сервис 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

By cons, если вы хотите заблокировать доступ к системе для всех пользователей, но для одного в частности, используйте "the!" перед соответствующим человеком. Например, если я хочу, чтобы доступ к компьютеру был заблокирован для всех пользователей, кроме Nicolas и Xavier:

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-х цифр. Например, чтобы ограничить 15:17 до 18:34, мы пишем: 1517-1834. Чтобы разрешить Мари соединяться только во вторник, с 15:17 до 18:34, мы получаем результат:

*;*;marie;Tu1517-1834

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

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

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

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

Some Examples of Restrictions Schedule

mathilde разрешено подключаться каждый день с 13:20 до 15:20, а также с 16:00. m. до 20:30:

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

Stone, Frank и Florian могут подключаться к 14:00 - 18:45 в будние дни и с 14:00 до 22:15 в выходные:

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

Olive никогда не разрешается подключаться. jessica может подключаться в среду с 13:00 до 16:00:

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

2 разные линии, для каждого пользователя по две разные линии в разное время Истечение сессии

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

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

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

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

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

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

jessica может войти в систему в среду с 13:00 до 16:00

-> Отключить: Во вторник в 16:00

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

-> Отключение разрешено подключаться каждый день с 13:20 до 15:20 и с 16:00 до 20:30

-> Отключение: Ежедневно с 8:30 до 15:20 ET.

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

Stone, Frank и Florian могут подключаться к 14:00 до 18:45 в будние дни и с 14:00 до 22:15 на выходные

-> Отключение (1): Понедельник, вторник, среда, четверг и пятница, в 18:45. -> Отключить (2): В субботу и воскресенье в 22: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

Для предотвращения пользователей от GUI можно использовать вместо команды стены notify-send, которая находится в пакете libnotify-bin Install X

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

Ubuntu 11. 10 User's

I've seen around user having problems with Pam and i saw a lot of bug about that so Why is the reason??? is so simple Ubuntu 11.10 doesens not support GDM more the new display manager is lightGDM the problem is the following where store this directive account required pam_time. Так что , думаю, находится в /etc/pam.d/lightdm или /etc/pam.d/lightdm-autologin, но проблема в том, как ????

так что просто вокруг вы можете проверить эти 2 лог-файла LightGdm :

  • /var/log/lightdm/lightdm.log
  • /var/log/lightdm/x-0.log

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

LightDM --debug

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

ubuntu-bug lightdm

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

41
ответ дан 5 January 2021 в 23:59

TimeKpr

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

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

11
ответ дан 5 January 2021 в 23:59

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

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

7
ответ дан 5 January 2021 в 23:59

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 

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

PROBLEM :

I report the Bug's here so crosser your finger and wait. ...

5
ответ дан 5 January 2021 в 23:59

Другие вопросы по тегам:

Похожие вопросы: