如果使用时间超过每日限制,则自动关闭

如果使用时间超过每日限制,则自动关闭

我想激活一个仅对特定用户(对我的孩子)有效的 cron 作业,它将检查孩子每天使用电脑的时间是否超过 60 分钟,然后关闭系统。这意味着如果条件为真,电脑将关闭,如果用户重新启动,他/她将无法再次登录。提前谢谢您。

答案1

您可以添加以下脚本,在特定用户启动时运行(非常接近这个):

#!/bin/bash

#timelimit - Set daily time limits for a user

#Licensed under the standard MIT license:
#Copyright 2013 Radu Rădeanu (https://askubuntu.com/users/147044/).
#Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
#The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE

export DISPLAY=:0

time_to_play_daily="0:60:00"  # channge as you wish; the format is: H[:M[:S]]
file="$HOME/.count_time" 

if [ -a $file ]; then
    if [ "$(head -1 $file)" != "$(date +%D)" ]; then
        echo $(date +%D) > $file
        echo $time_to_play_daily >> $file
    fi
else 
    touch $file
    echo $(date +%D) >> $file
    echo $time_to_play_daily >> $file
fi

time_to_play_left=$(sed -n '2p' $file)

sec_left=$(echo $time_to_play_left | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }')

function countdown
{
    sec_left=$(echo $time_to_play_left | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }')
    local start=$(date +%s)
    local end=$((start + sec_left))
    local cur=$start

    while [[ $cur -lt $end ]]; do
        cur=$(date +%s)
        sec_left=$((end-cur))
        time_to_play_left="$((sec_left/3600)):$(((sec_left/60)%60)):$((sec_left%60))"
        sed -i "2s/.*/$time_to_play_left/" $file
        sleep 1
    done
}

if [ $sec_left -gt 0 ]; then
    notify-send -i "Time left to play for today: $time_to_play_left"
else
    notify-send -i "error" "Your time to play has finished for today!"
    sleep 3
fi

countdown $time_to_play_left

sudo poweroff 
# or, only for logout you can use:
# gnome-session-quit --logout --no-prompt

不要忘记使其可执行:

chmod +x脚本名称

重要的:

答案2

当我的兄弟姐妹使用我的电脑时,我会用这个。当然,你必须为他们分配 1 个时间段,而不是片段,但是:

#!/usr/bin/env python3

import time
import os
import sys

time.sleep(int(sys.argv[1]))
os.system("gnome-screensaver-command -l")

将其保存为 kids.py,赋予其执行权限,将其放在您的主目录中,不要告诉他们用户密码,每次需要使用它时按住 ALT + F2 并输入 ./kids.py seconds,其中 seconds 是您希望他们拥有的时间量(以秒为单位)。时间到了之后,它基本上会锁定屏幕。

[编辑] 您还可以将其放在您的主文件夹中,将其放在每个启动文件中,拒绝他们更改其启动文件的能力,删除“import sys”,将“int(sys.argv[1])”替换为您想要的秒数,然后将“gnome-screensaver-command -l”更改为“gnome-session-save --force-logout”,让所有用户都能够执行该文件。还没有尝试过。。。[/编辑]

相关内容