我该如何限制孩子的计算时间?

我该如何限制孩子的计算时间?

我们需要限制我的孩子(7、8 岁)访问我们的计算机(不仅仅是访问互联网),直到他们长大到可以自己管理这些帐户为止。在此之前,我们需要能够定义以下内容:

  • 一天中可以进行计算的时间(例如下午 5 点至 9 点)
  • 一周中不适合计算的日子(例如周一至周五)
  • 每天允许的时间(例如 2 小时)

在 11.10 中,以下所有以前可以完成的工作都不再起作用:

  • 蒂姆克普:对于 > 11.10,不再可通过 ppa 获得。
  • 超时:命令行替代方案,但从 11.10 开始从存储库中删除
  • 侏儒保姆:看起来不错,但是反复崩溃强制重启X-server。因此我们目前不能使用或推荐此程序。

还有其他选择吗?

答案1

Ubuntu <= 11.10 用户请按照本指南操作,对于 Ubuntu 用户 >= 11.10,请阅读页面底部的通知:

是的,所有这些程序都已过时,您的所有问题都在这里得到解答,并且可以通过家长控制来查看......

当我们谈论强制用户注销时,我们真正谈论的是对该帐户实施系统访问或服务的时间限制。我发现实施时间限制的最简单方法是使用名为Linux的PAM

可插入式身份验证模块 (PAM)是一种用户身份验证机制。具体来说,我们将使用该pam_time模块来控制用户对服务的定时访问。

使用该pam_time模块,我们可以在一天中的不同时间以及特定日期或通过各种终端线路对系统和/或特定应用程序设置访问限制。根据配置,您可以使用此模块根据用户姓名、一天中的时间、一周中的日期、他们申请的服务以及他们发出请求的终端来拒绝个别用户的访问。

使用 时,您必须用换行符pam_time终止文件中每一行(或规则)的语法。您可以用井号 [#] 注释每一行,系统将忽略该文本,直到换行符为止。/etc/security/time.conf

以下是规则的语法:

服务;ttys;用户;时间

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

以下是一组典型规则的示例:

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

这些规则限制用户 bobby 在 08:00 到 20:00 之间登录,并且还限制这些时间段内的 Internet 访问。Root 可以在任何时间登录,并且可以在任何时间浏览 Internet。

笔记:系统使用这些规则将错误记录为 syslog(3)。


使用 Ubuntu Linux,您可以为您的计算机分配时间限制,以防止一个或多个用户连接到您的系统。例如,通过时间限制,您可以限制孩子访问计算机(简而言之,是一种家长控制),甚至在特定时段保护与服务器的连接。

手动配置

了解你将要做什么

在本教程中,我们将使用 PAM(可插入身份验证模块,英文为 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 服务。编辑文件 so gdm 并添加以下代码行(在文件末尾):

account required pam_time.so

GDM 是 Ubuntu、Edubuntu 和 Xubuntu 发行版的登录屏幕。对于使用 KDE 的 Kubuntu,kdm 服务被称为它将要打开的文件。您已完成 PAM 的配置!这将启用对此服务的小时数的控制。

如果您有服务器,则可能没有 GUI。在这种情况下,GDM/KDM 未安装,连接不会被阻止。要阻止连接到 TTY,您必须修改登录同一文件,并添加与先前确认的相同的代码行。此操作也适用于已安装 GUI 并希望阻止访问登录屏幕和终端的人。

配置访问时间

现在 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、John 和 Emily 的帐户:

*;*;Patrick|jean|emilie;scheduler

相反,如果您想阻止除某位用户之外的所有用户访问系统,请在相关人员前使用!。例如,如果我想禁止除 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 会产生误导!在互联网上尤其难以识别:您可以轻松找到相互矛盾的信息!

然后,我们指定截止时间。这些应采用 24 小时格式,由 4 位数字组成。例如,要限制下午 3:17 至下午 6:34,我们写:1517-1834。要允许 Marie 仅在星期二下午 3:17 至下午 6:34 连接,我们得到以下结果:

*;*;marie;Tu1517-1834

这些时间之外的连接将被禁止。对于用户,可以使用运算符 | 和!来多次指示(!然后表示允许所有登录时间,除了要显示的那些时间)。

代码行开头的两个星号(通配符)分别是 和 tty 服务字段。由于您要阻止对系统的所有访问,因此无需指定要阻止的服务或 tty。但是,如果您想阻止使用特定服务,只需按以下示例指定它即可:

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

因此,用户 mary 在周末无法连接到 TTY、4 和 5。

限制时间表的一些示例

mathilde 被允许在每天下午 1:20 至 3:20 以及下午 4:00 至晚上 8:30 之间上网:

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

Stone、Frank 和 Florian 可以在工作日下午 2:00 至下午 6:45 以及周末下午 2:00 至晚上 10:15 进行连接:

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

Olive 永远不允许连接。jessica 可以在星期三下午 1:00 到下午 4:00 登录:

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

2 条不同的线路,每个用户有两个不同的时间 会话到期

当会话过期(超过用户已连接的时间)时,PAM 可以联系到用户。虽然 mathilde 在允许的时间内连接,但完全可以超过这些时间!为此,我们将使用一个新程序:“cron”。此应用程序以时间间隔执行命令。在我们的例子中,我们将使用命令“skill-KILL-u”在会话过期时断开用户连接。处理非常简单。只需编辑文件“/etc/crontab”。然后添加以下代码行:

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

和之前一样,用时间表和所需时间替换分钟字段。然后填写禁止的天数,或者直接输入星号 (*) 以表示一周中的所有天数。最后,将要阻止的登录帐户使用的字段更改为阻止,就大功告成了!

日子与工作不一样cron!以下是此程序要使用的缩写列表:

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

一些工作示例cron(上一节中有时间示例)

jessica 可以在星期三下午 1:00 到 4:00 登录

-> 断开连接:星期二下午 4:00。

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

mathilde 每天被允许在下午 1:20 至 3:20 和下午 4:00 至晚上 8:30 之间上网。

-> 断开连接:每天美国东部时间晚上 8:30 至下午 3:20。

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

Stone、Frank 和 Florian 可以在工作日下午 2:00 至下午 6:45 之间连接,周末下午 2:00 至晚上 10:15 之间连接

-> 断开连接(1):星期一、星期二、星期三、星期四和星期五,18:45。 -> 断开连接(2):星期六和星期日晚上 10:15。

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

skill-KILL-u 命令会断开用户与 GUI 以及 TTY 的连接。它非常适合服务器管理员使用。但是,此命令是即时的,断开连接不会事先通知。因此,最好阻止相关计算机或网络的用户安装此设备!

可以在结束前几分钟阻止用户wall启动命令cron大体时间,将会显示在所有用户的终端上。

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

notify-send为了防止用户使用 GUI,可以使用软件包中的wall 命令代替libnotify-bin 安装X

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

Ubuntu 11.10 用户的

我看到周围的用户在使用 Pam 时遇到了问题,而且我发现了很多相关的错误,那么原因是什么呢?很简单,Ubuntu 11.10 不再支持 GDM,新的显示管理器是 lightGDM,问题在于这个指令的存储位置,account required pam_time.so我认为是错误/etc/pam.d/lightdm的,/etc/pam.d/lightdm-autologin但是怎么回事呢?

因此您可以检查以下 2 个 LightGdm 日志文件:

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

或者在调试模式下运行 LightGdm:

LightDM——调试

或报告错误:

ubuntu 错误 lightdm

我报告了 Bug这里所以祈祷并等待吧……

答案2

时间Kpr

我想它有你需要的一切。限制每个用户每天的访问时间、简单的配置图形界面、一天内绕过的能力、添加一些“奖励时间”、通知用户剩余时间等。

项目页面是这里。他们还有一个适用于 ubuntu 的 PPA,您可以将其添加到您的软件源中:deb http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu lucid main。并通过软件中心或 CLI 安装:sudo apt-get install timekpr

答案3

如果你正在做某事,自动注销会让人非常沮丧。这是暴力的、残酷的、粗鲁的。而且不管你多大年纪。如果你只是沉迷于电脑,那是一种感觉;而当你在计时,并在你设法点击提交按钮或保存文档前 5 秒被踢出电脑,那感觉就完全不同了。我建议你考虑使用自动提醒,而不是自动踢出。这将教会你的孩子们互相尊重,并允许彼此自愿使用电脑。

甚至还有更轻松的选择。首先跟踪每个孩子使用电脑的时间,然后将收集到的数据提供给所有人,以便他们可以看到。单单是这个非常简单的事情(适用于互联网带宽消耗)就救了我一命,当时我在一个满是成年人的办公室里担任网络管理员。每台计算机的带宽使用情况的公开统计数据(仅是字节数,而不是去匿名化信息,如访问的网站列表等)将情况从“我——邪恶贪婪的管理员对抗他们——可怜的受虐办公室用户”变成了“伙计,你的下载量比我多 5 倍,真糟糕!”“对不起,我确实下载了,午休时我看了很多 YouTube,按照这种速度不会再看了”——我只是被排除在对抗场景之外。

答案4

我也遇到过这个问题。所以我编写了 kidtimer 脚本,它允许您定义使用时间和总数。该项目可以在 Github 上的以下位置找到:

安装和使用它的方法如下:

  1. 将代码复制并粘贴到名为 的文件中kidtimer.install

    #!/bin/bash
    # Restrict kids computer access to specific hours and total time.
    # By: Michael Groves - grover66_at_gmail_dot_com
    
    #variables
    basedir="/usr/local/kidtimer"
    configdir="/etc/kidtimer"
    Cdate=`/bin/date | awk '{ print $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 $0 /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
    
  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提醒用户时间即将用完。时间用完时,所有用户进程都将终止,因此请用户做好准备。

相关内容