Доступ к нашему компьютеру (не только к интернету) должен быть ограничен для учетных записей моих детей (7, 8 лет), пока они не станут достаточно взрослыми, чтобы справляться с этим самостоятельно. До тех пор мы должны иметь возможность определить следующее:
В 11.10 все перечисленное ниже, что раньше выполняло эту работу, больше не работает:
Есть ли другие альтернативы?
Хотя для этого существуют сторонние приложения, вы можете создать свои собственные. Сводка шагов:
gedit
для создания скрипта lock-screen-timer
lock-screen-timer
lock-screen-timer
как исполняемый файл 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
Перед вызовом скрипта из графического интерфейса мы вызовем его из терминала, чтобы увидеть, отображаются ли какие-либо сообщения об ошибках:
~/lock-screen-timer
Вам будет предложено указать количество минут:
Установите желаемое число минут и нажмите ОК, чтобы запустить таймер. Когда осталось 15, 10, 5, 3, 2 и 1 минута (ы), раздастся системный звук и появится всплывающее сообщение с подсказкой, когда экран будет заблокирован. После блокировки экрана вам необходимо ввести пароль, чтобы разблокировать экран.
Nautilus определяет, что происходит, когда мы дважды щелкаем исполняемый сценарий, когда это окно отображения файлов или ссылка на рабочем столе. Нормальным поведением является редактирование сценария с помощью gedit
. Мы хотим изменить это поведение так, чтобы оно выполнялось.
Запустите Nautilus и перейдите в каталог, содержащий lock-screen-timer
. Щелкните левой кнопкой мыши по нему один раз, чтобы сфокусироваться. Наведите указатель мыши на верхнюю строку меню, пока не появится меню «Редактировать файл ...», используйте:
Правка
Свойства
параметр Поведение
Вкладка Исполняемые текстовые файлы
Запускать исполняемые текстовые файлы при их открытии
Из предыдущего раздела таймер экрана блокировки
по-прежнему имеет фокус. Если нет, перейдите к сценарию и щелкните по нему один раз левой кнопкой мыши, чтобы сфокусироваться. Затем используйте:
Сделать ссылку
. Ссылка для блокировки- screen-timer
. Теперь вы можете дважды щелкнуть ссылку на рабочем столе, и сценарий будет запущен. Появится диалоговое окно для ввода количества минут. Представлены две кнопки Отмена и ОК . Если щелкнуть X
, чтобы закрыть окно, это будет то же самое, что выбрать Отмена .
После того, как таймер запустится, и вы дважды щелкните по нему еще раз, первая запущенная копия будет " убит ". Теперь вы можете запустить новый обратный отсчет экрана блокировки или щелкнуть Отменить , чтобы отсчет времени не выполнялся.
Пока таймер экрана блокировки работает, он записывает, сколько минут осталось до файл ~ / .lock-screen-timer-Осталось
. Вы можете просмотреть этот файл с помощью команды watch
или отобразить его на панели индикаторов панели задач / приложений Ubuntu, как показано в верхней части этого ответа. Чтобы отобразить оставшееся время в области уведомлений, следуйте инструкциям в этом разделе вопросов и ответов: ( Может ли BASH отображаться на панели задач как индикатор приложения? ).
Я только что выпустил бета-версию своего нового приложения LittleBrother
, которое может отслеживать время воспроизведения на машинах Linux. Тестовые пользователи могут попробовать пакет Debian. Инструкции о том, как его загрузить и использовать, можно найти здесь: https://github.com/marcus67/little_brother . Однако установка может быть немного грубой. Это особенности приложения:
У меня тоже была эта проблема. Итак, я написал сценарий kidtimer, который позволяет вам определять время использования и общее количество. Проект можно найти на Github по следующему адресу:
Вот как его установить и использовать:
Скопируйте и вставьте код в файл называется 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
Выполнить:
sudo ./kidtimer.install
Запустите:
sudo kidtimer
Настройте существующую учетную запись пользователя.
Готово.
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
Приложение использует notify-send
, чтобы предупредить пользователя, что время истекает. Когда время истекает, все пользовательские процессы завершаются, поэтому подготовьте пользователя.
Я просто сделал доступным ответ. Код объясняется в потоке 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
Мы можем проверить, есть ли у пользователя вошли в систему с помощью команды:
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 секунд до установленного пользователем лимита времени. истекает, сообщение появится на его ДИСПЛЕЕ
:
#!/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
limit
limit_use
(без расширения) внутри папки и сделайте его исполняемым Редактировать в заголовке сценарий имя пользователя для ограничения и максимальное количество разрешенных минут. В примере:
# --- установите лимит времени ниже (минуты)
минут = 1
# --- установим ограничение для имени пользователя ниже
user = "jacob"
Скопируйте папку в каталог / opt
:
cp -r / path / to / limit / opt
Теперь отредактируйте /etc/rc.local
, чтобы сценарий запускал его как root
при запуске:
sudo -i gedit /etc/rc.local
Непосредственно перед строкой
выход 0
другая строка:
/ opt / limit / limit_use &
/ opt / limit / uselog
). Если дневной лимит достигнут, сценарий больше не позволяет пользователю войти в систему, убивает свой процесс, если он существует. rc.local
только пользователь (ы) с Права sudo могут остановить скрипт, даже если пользователь знает имя процесса. Если вы хотите остановить скрипт, используйте команду:
sudo kill "$(pgrep limit_use)"
Но вам понадобится пароль sudo для этого.
можно использовать в 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
Для Ubuntu 14.04 был опубликован новый релиз/вкладыш таймекпра Эдуардом Безверхием в его ppa:mjasnik/ppa
.
Я попробовал timekpr
, но не смог. Затем сделал его вариант, который работает на моем Ubuntu. Вот что нужно сделать для этого варианта:
Добавить ограничение по времени в файл /var/lib/timelimit/user_to_be_limited.limit
только с правами root. например 1800 на 1800 секунд (30 минут) дневной лимит.
Создайте /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
фи
фи
сделанный
сделанный
Добавить в /etc/rc.local
:
sudo /usr/local/bin/timelimit.sh &
Перезагрузите Ubuntu
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
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 :
или запустить LightGdm в отладочном режиме :
LightDM --debug
или сообщить об ошибке :
ubuntu-bug lightdm
Я сообщаю об ошибке здесь, так что скрестите пальцы и ждите....
Я думаю, что в нем есть все, что вам нужно. Ограничение времени доступа в день для каждого пользователя, легкий gui для настройки, abitlity для обхода на день, добавление "бонусного времени", уведомление об оставшемся времени для пользователей и т.д.
Страница проекта здесь. У них также есть PPA для ubuntu, который Вы можете добавить в Ваши Источники Программного Обеспечения: deb http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu lucid main
. И установите через Software Center или через CLI: sudo apt-get install timekpr
.
Auto-Логотип чрезвычайно разочаровывает, если вы находитесь в середине чего-то. Это жестоко, это жестоко, это просто грубо. И неважно, сколько тебе лет. Это одна вещь, когда вы просто компьютерная зависимость, и это очень отличается, когда вы отслеживаете время и получить выгнали 5 секунд, прежде чем вам удалось нажать эту кнопку отправки или сохранить ваш документ. Я предлагаю вам подумать об использовании авто-напоминания вместо авто-кикера. Это научит ваших детей уважать друг друга и позволит друг другу добровольно использовать компьютер.
Есть еще более легкая альтернатива. Начните с отслеживания времени, которое каждый ребенок проводит за компьютером, и сделайте собранные данные доступными для всех, чтобы они могли их видеть. Эта невероятно простая вещь (применяется к трате пропускной способности Интернета) спасла мне жизнь, когда я был сетевым администратором в офисе, полном взрослых. Публичная статистика об использовании полосы пропускания для каждого компьютера (только количество байт, не деанонимизируя информацию, как списки посещенных сайтов и т.д.) превратила ситуацию из "я - злой жадный администратор против них - бедных злобных офисных пользователей" в "человек, ты скачал в 5 раз больше меня, это плохо!". "Извините, я действительно скачал, я смотрел много youtube во время обеденных перерывов, больше так не буду" - меня просто исключили из сценария конфронтации.
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
Этот пакет доступен в :
Hardy
PROBLEM :
I report the Bug's here so crosser your finger and wait. ...