Доступ к нашему компьютеру (не только к Интернету) должен быть ограничен для учетных записей моих детей (7, 8), пока они не станут достаточно взрослыми, чтобы управлять этим самостоятельно. До этого времени мы должны иметь возможность определить следующее:
В 11.10 все нижеперечисленное, использовавшееся для выполнения работы, не работает больше:
Есть ли другие альтернативы?
Автоматический выход из системы крайне разочаровывает, если вы находитесь в середине чего-либо. Это насилие, это жестоко, это просто грубо. И не важно, сколько тебе лет. Одно дело, когда вы просто зависимы от компьютера, и это совсем другое, когда вы отслеживаете время и выгоняетесь за 5 секунд до того, как вам удалось нажать на кнопку «Отправить» или сохранить свой документ. Я предлагаю вам рассмотреть возможность использования авто-напоминания вместо авто-кикера. Это научит ваших детей уважать друг друга и позволит им охотно пользоваться компьютером.
Есть даже более легкая альтернатива. Начните с отслеживания количества времени, которое каждый ребенок проводит за компьютером, и сделайте собранные данные доступными для всех, чтобы они могли их увидеть. Одна только эта невероятно простая вещь (применительно к потраченной пропускной способности интернета) спасла мне жизнь, когда я был сетевым администратором в офисе, полном взрослых. Публичные статистические данные об использовании полосы пропускания для каждого компьютера (только количество байтов, не деанонимизирующая информация, такая как списки посещенных сайтов и т. Д.) Изменили ситуацию с «я - злой жадный администратор против них - бедные оскорбленные пользователи офиса» на «человека», ты скачал в 5 раз больше меня, это плохо! «Извините, я действительно скачал, я смотрел много YouTube во время перерывов на обед, больше не буду делать это с такой скоростью» - меня просто исключили из сценария конфронтации.
Я думаю, в нем есть все, что вам нужно. Ограничьте время доступа в день для пользователя, удобный интерфейс для настройки, возможность обхода в течение дня, добавьте некоторое «время вознаграждения», уведомление об оставшемся времени для пользователей и т. Д.
Страница проекта здесь , здесь . У них также есть PPA для Ubuntu, который вы можете добавить в свои источники программного обеспечения: deb http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu lucid main
. И установить через Центр программного обеспечения или через CLI: sudo apt-get install timekpr
.
можно использовать в 11.10 при запуске LightDM для настройки ограничений для пользователей, добавив следующую строку в /etc/pam.d/lightdm
account required pam_time.so
[ 1115] Нам может потребоваться удалить libpam-smbpass , чтобы разрешить переключение пользователей, пока не исправлена ошибка # 835310 . Sup>
Все ограничения, определенные в окно приложения работает, как определено в графическом интерфейсе timekpr.
Чтобы отобразить иконку timekpr-client в Unity, нам нужно белый список 'timekpr'
в настройках панели Unity и, кроме того, нам нужно добавить Unity
в следующую строку в /etc/xdg/autostart/timekpr-client.desktop
: [ 1117]
OnlyShowIn=GNOME;XFCE;KDE;Unity;
Чтобы начать отсчет предоставленного времени, нам, возможно, придется запустить демон timekpr с
/etc/init.d/timekpr start
Более новая версия / форк timekpr был опубликован для Ubuntu 14.04 Эдуардсом Безверхийсом в его ppa:mjasnik/ppa
.
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
Этот пакет доступен в:
Харди [ 1117]
ПРОБЛЕМА:
Я сообщаю здесь об ошибке , так что скрестите палец и подождите ...
Я пытался timekpr
, но у меня не получилось. Затем сделал вариант, который работает на моем Ubuntu. Вот что нужно сделать для этого варианта:
Добавить ограничение по времени в файле /var/lib/timelimit/user_to_be_limited.limit
только с правами root. например 1800 за 1800 секунд (30 минут) дневного лимита.
Создать /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
Добавить в /etc/rc.local
:
sudo /usr/local/bin/timelimit.sh &
[ 119] Перезапустите Ubuntu
Я просто сделал доступным ответ. Код поясняется в теме 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
Хотя есть Сторонние приложения для этого вы можете создать самостоятельно. Краткое описание шагов:
gedit
для создания сценария lock-screen-timer
lock-screen-timer
lock-screen-timer
как исполняемый файл gedit
для создания сценария lock-screen-timer
Откройте Terminal
, используя Ctrl kbd> + Alt kbd> + T kbd> и введите:
gedit lock-screen-timer
lock-screen-timer
Вернитесь к этому экрану и скопируйте следующий код, выделив его и нажав Ctrl kbd> + C kbd>:
#!/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 Unbuntu 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 kbd> + V < / KBD>. Сохраните файл и выйдите из редактора обратно в командную строку.
lock-screen-timer
как исполняемый файл Теперь нам нужно сделать исполняемый скрипт, набрав:
chmod +x lock-screen-timer
Перед вызовом скрипта из GUI, мы будем вызывать его из терминала, чтобы мы могли видеть, отображаются ли какие-либо сообщения об ошибках:
~/lock-screen-timer
Вам предлагается ввести количество минут:
Установите желаемое количество минут и нажмите OK, чтобы запустить таймер. Когда осталось 15, 10, 5, 3, 2 и 1 минута, раздается системный звук, и появляется сообщение, сообщающее, когда экран будет заблокирован. После блокировки экрана вам необходимо ввести пароль, чтобы разблокировать экран.
Nautilus определяет, что происходит, когда мы дважды щелкаем по исполняемому сценарию, когда это окно отображения файлов или ссылка на рабочем столе. Нормальное поведение - редактировать скрипт, используя gedit
. Мы хотим изменить это поведение так, чтобы оно выполнялось.
Запустите Nautilus и перейдите в каталог, содержащий lock-screen-timer
. Щелкните левой кнопкой мыши по нему один раз, чтобы выделить его. Наведите указатель мыши на верхнюю строку меню, пока не появится меню «Редактировать файл ...», используйте:
Edit
Properties
Behavior
Executable Text Files
Run executable text files when they are opened
Из предыдущего раздела lock-screen-timer
все еще есть фокус. Если нет, перейдите к сценарию и щелкните левой кнопкой мыши по нему один раз, чтобы выделить его. Затем используйте:
Make Link
. Link to lock-screen-timer
. Теперь вы можете дважды щелкнуть ссылку ярлыка на рабочем столе, и скрипт будет запущен. Появится диалоговое окно для получения количества минут. Представлены две кнопки Отмена kbd> и OK kbd>. Если вы щелкнете по X
, чтобы закрыть окно, это аналогично выбору Отмена kbd>.
После запуска таймера и повторного щелчка по нему первая запущенная копия «убивается». Теперь вы можете начать новый отсчет блокировки экрана или нажать Отмена kbd>, чтобы не было обратного отсчета.
Во время работы таймера экрана блокировки он записывает, сколько минут осталось в файле ~/.lock-screen-timer-remaining
. Вы можете посмотреть этот файл с помощью команды watch
или отобразить его на панели задач / панели приложений Ubuntu, как показано в верхней части этого ответа. Чтобы отобразить оставшееся время в области уведомлений, следуйте инструкциям в этом разделе Q & A: ( Может ли BASH отображаться в systray в качестве индикатора приложения? ).
Вот как чтобы установить и использовать его:
Скопируйте и вставьте код в файл с именем 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 $2" "$3 }'`
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=$1
[ $# -eq 2 ] && COMMAND=$1 && KID=$2
[ $# -eq 3 ] && COMMAND=$1 && KID=$2 && Time=$3
################# 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 [110] /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=$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 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 $2 }'`
[ "$W" == "yes" ] && TIME_LIMIT=`cat $basedir/schedule/$I | grep ^MAX | awk '{ print $3 }'`
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=$1
for I in `/usr/bin/atq | awk '{ print $1 }' | 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 $2 }'`
[ "$WEEKEND" == "yes" ] && 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" == "yes" ] && R=`grep ^$HOUR $basedir/schedule/$I | awk '{ print $3 }'`
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=$1
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
Выполните его:
sudo ./kidtimer.install
Запустите его:
sudo kidtimer
Настройте a существующая учетная запись пользователя.
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
для оповещения об истечении времени пользователя. Когда время истекает, все пользовательские процессы завершаются, поэтому, пожалуйста, подготовьте пользователя.
Я только что выпустил бета-версию своего нового приложения LittleBrother
, способного контролировать время воспроизведения на компьютерах с Linux. Тестовые пользователи могут попробовать пакет Debian. Инструкции по загрузке и использованию можно найти здесь: https://github.com/marcus67/little_brother . Хотя установка может быть немного грубой. Вот особенности приложения:
Мы можем проверить, вошел ли пользователь в систему с помощью команды:
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
limit
limit_use
(без расширения) внутри папки и сделайте его исполняемым [1131 ] Измените в заголовке скрипта имя пользователя для ограничения и максимальное количество разрешенных минут. В примере:
#--- set the time limit below (minutes)
minutes = 1
#--- set the user name to limit below
user = "jacob"
Скопируйте папку в каталог /opt
:
cp -r /path/to/limit /opt
Теперь отредактируйте /etc/rc.local
в заставьте скрипт запустить его как root
при запуске:
sudo -i gedit /etc/rc.local
Прямо перед строкой
exit 0
другая строка:
/opt/limit/limit_use &
/opt/limit/uselog
). Если дневной лимит достигнут, скрипт больше не позволяет пользователю войти в систему, убивает его процесс, если он существует. rc.local
только пользователи с правами sudo могут остановить сценарий, даже тогда, когда пользователь знает имя процесса. Если вы хотите остановить скрипт, используйте команду:
sudo kill "$(pgrep limit_use)"
Но для этого вам понадобится пароль sudo . [1 152]
Ubuntu < = 11.10. Пользователь следует этому руководству для пользователя Ubuntu.> = 11.10 прочитайте уведомление на нижней странице:
Да, все эти программы устарели, и все ваши вопросы ответил здесь и хорошо выглядишь с родительским контролем .....
Когда мы говорим о том, чтобы заставить пользователя выйти из системы, мы на самом деле говорим о введении временных ограничений для учетной записи для доступа к системе или службам. Самый простой способ реализовать временные ограничения - использовать подключаемый модуль под названием Linux-PAM .
Сменный модуль аутентификации (PAM) - это механизм аутентификации пользователей. В частности, мы собираемся использовать модуль pam_time
для управления синхронизированным доступом пользователей к услугам.
Используя модуль pam_time
, мы можем установить ограничения доступа к системе и / или определенным приложениям в разное время дня, а также в определенные дни или по различным терминальным линиям. В зависимости от конфигурации вы можете использовать этот модуль, чтобы запретить доступ отдельным пользователям на основе их имени, времени суток, дня недели, услуги, на которую они обращаются, и их терминала, с которого они делают запрос. .
При использовании pam_time
необходимо завершить синтаксис каждой строки (или правила) в файле /etc/security/time.conf
новой строкой. Вы можете комментировать каждую строку знаком решетки [#], и система будет игнорировать этот текст до новой строки.
Вот синтаксис для правила:
services; ttys; users; times
blockquote>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.
Вот пример типичного набора правил: [ 1152]
login ; * ; !bobby ; MoTuWeThFr0800-2000 login ; * ; !root ; !Al0000-2400 http ; * ; !bobby ; MoTuWeThFr0800-2000 http ; * ; !root; !Al0000-2400
Эти правила ограничивают пользовательский бобби от входа в систему в период с 08:00 до 2000 г., а также ограничивают доступ в Интернет в эти часы. Root сможет войти в систему в любое время и просматривать Интернет все время.
Примечание: Система регистрирует ошибки с этими правилами как syslog (3).
В Ubuntu Linux можно назначить вашему компьютеру ограничения по времени, чтобы предотвратить подключение одного или нескольких пользователей к вашей системе. С учетом временных ограничений вы можете, например, ограничить доступ к компьютеру для ваших детей (в некотором роде родительский контроль) или даже защитить соединение с вашим сервером в определенные часы. [1155 ]
Ручная настройка
Понимание того, что вы будете делать
В этом руководстве мы будем использовать 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
Вместо поля пользователя введите учетную запись, которую вы хотите заблокировать. [ 1166]
Если вы хотите заблокировать несколько пользователей, введите их логин в строке, разделив их | оператор. Например, если я хочу заблокировать учетные записи Патрика, Джона и Эмили:
*;*;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, вводящие в заблуждение! особенно плохо идентифицируется в Интернете: вы можете легко найти противоречивую информацию!
Затем мы указываем крайние сроки. Они должны быть отформатированы 24 часа, состоящий из 4 цифр. Например, чтобы ограничить 3:17 вечера. до 6:34 вечера, мы пишем: 1517-1834. Разрешить Мари подключиться только во вторник с 15:17. до 6:34 вечера, мы получаем результат:
*;*;marie;Tu1517-1834
Соединения вне этих часов будут запрещены. Что касается пользователей, то можно использовать операторы | а также! указывать несколько раз (знак! указывает, что разрешены все часы входа в систему, кроме тех, которые должны быть показаны).
Две звезды (подстановочные знаки) в начале строки кода, соответственно, и поля tty services. Поскольку вы хотите заблокировать весь доступ к системе, нет необходимости указывать, какой сервис или какой tty вы хотите заблокировать. Однако, если вы хотите запретить использование определенной службы, просто укажите ее в следующем примере:
login;tty1|tty4|tty5;marie;!Wd0000-2400
Таким образом, пользователь женат не может подключиться к TTY 4 и 5 в выходные дни.
Некоторые примеры расписания ограничений
Матильде разрешено подключаться каждый день с 1:20 вечера. до 3:20 вечера и с 4:00 вечера до 8:30 вечера :
*;*;mathilde;Al1320-1520|Al1600-2030
Стоун, Фрэнк и Флориан могут подключаться к 2:00 вечера. до 6:45 вечера в будние дни и до 14:00 до 10:15 вечера на выходные:
*;*;Stone|franck|florian;Wk1400-1845|Wd1400-2215
Оливия не имеет права подключаться. Джессика может войти в среду с 1: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
заданий (с примерами случаев в предыдущем разделе)Джессика может войти в среду с 13:00 до 4:00 вечера.
-> Отключение: вторник в 16:00.
blockquote>00 16 * root * wed skill -KILL -u jessica
матильде разрешено подключаться каждый день с 1:20 вечера. до 3:20 вечера и с 4:00 вечера до 8:30 вечера.
-> Отключение: ежедневно, 8:30 вечера. до 3:20 вечера ET.
blockquote>20 15 * * * root skill -KILL -u mathilde 30 20 * * * root skill -KILL -u mathilde
Стоуну, Фрэнку и Флориану разрешено подключаться к 14:00. до 6:45 вечера в будние дни и до 14:00 до 10:15 вечера на выходные
-> Disconnect (1): понедельник, вторник, среда, четверг и пятница в 18:45. -> Отключение (2): суббота и воскресенье в 10:15 вечера.
blockquote>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[1141] [1192 ]
40 18 * * Mon,Tue,wed,thu,fri stone DISPLAY=:0 notify-send "end of session in 5 minutes"
Ubuntu 11.10 пользователя
Я видел, как у пользователя были проблемы с Пэм, и я видел много ошибок по этому поводу, так почему же причина ?? ? так просто Ubuntu 11.10 больше не поддерживает GDM, новый менеджер дисплеев - lightGDM, проблема в том, где хранить эту директиву
[ 1195], так что вы можете проверить эти 2 файла журнала LightGdm:account required pam_time.so
, я думаю, в/etc/pam.d/lightdm
или/etc/pam.d/lightdm-autologin
, но ошибка как?
- /var/log/lightdm/lightdm.log
- / var / log / lightdm / x-0 .log
или запустить LightGdm в режиме отладки:
LightDM --debug
blockquote>или сообщить об ошибке:
< blockquote>ubuntu-bug lightdm
blockquote>Я сообщаю об ошибке здесь , так что скрестите палец и подождите ....