私たちのコンピューター(インターネットへのアクセスだけでなく)へのアクセスは、子供(7、8)が自分で管理できる年齢になるまで、そのアカウントに対して制限する必要があります。それまでは、以下を定義できる必要があります。
11.10では、ジョブを実行するために使用されていた次のすべてが機能しなくなりました。
他の選択肢はありますか?
これを行うサードパーティアプリケーションがありますが、独自のアプリケーションを作成できます。手順の概要:
gedit
を使用してスクリプトlock-screen-timer
を作成しますlock-screen-timer
に貼り付けますlock-screen-timer
を実行可能としてマークするgedit
を使用してスクリプトlock-screen-timer
を作成しますを使用してTerminal
を開きます 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 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+V。ファイルを保存し、エディターを終了してコマンドプロンプトに戻ります。
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
はまだフォーカスがあります。そうでない場合は、スクリプトに移動し、スクリプトを1回左クリックしてフォーカスを与えます。次に使用します:
Make Link
を選択します。Link to lock-screen-timer
という新しいアイコンが表示されます。デスクトップショートカットリンクをダブルクリックすると、スクリプトが実行されます。分数を取得するダイアログボックスが表示されます。 2つのボタンが表示されます Cancel そして OK。 X
をクリックしてウィンドウを閉じると、選択と同じになります Cancel。
タイマーの実行後、もう一度ダブルクリックすると、最初に実行されているコピーが「強制終了」されます。新しいスクレンロックカウントダウンを開始するか、クリックすることができます Cancel カウントダウンなし。
ロック画面タイマーの実行中、ファイルに残っている時間を記録します~/.lock-screen-timer-remaining
。 watch
コマンドでこのファイルを見るか、この回答の上部に示すようにUbuntuのシステムトレイ/アプリケーションインジケーターバーに表示できます。通知領域に残っている時間を表示するには、このQ&Aの指示に従ってください:( BASHはアプリケーションインジケーターとしてsystrayに表示できますか? )。
必要なものはすべて揃っていると思います。ユーザーごとの1日あたりのアクセス時間の制限、設定の簡単なGUI、1日間のバイパスの許可、「報酬時間」の追加、ユーザーの残り時間の通知など。
プロジェクトページは here です。また、ソフトウェアソースに追加できるubuntuのPPAもあります:deb http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu lucid main
。そして、Software CenterまたはCLIを介してインストールします:Sudo apt-get install timekpr
。
次の行を/etc/pam.d/lightdm
に追加することにより、LightDMを実行する11.10でユーザーの制限を設定するために使用できます
account required pam_time.so
bug#83531 が修正されるまで、ユーザーの切り替えを有効にするためにlibpam-smbpassを削除する必要があるかもしれません。
アプリケーションウィンドウで定義されたすべての制限は、timekpr GUIで定義されたとおりに機能します。
Unityでtimekpr-clientアイコンを表示するには、Unityパネルの設定で whitelist'timekpr'
を実行する必要があり、さらに/etc/xdg/autostart/timekpr-client.desktop
の次の行にUnity
を追加する必要があります。
OnlyShowIn=GNOME;XFCE;KDE;Unity;
許可された時間のカウントダウンを開始するには、timekprデーモンを開始する必要があります。
/etc/init.d/timekpr start
Timekprの新しいリリース/フォークが、Ubuntu 14.04用に Eduards Bezverhijs のppa:mjasnik/ppa
で公開されました。
自動ログオフは、何かの途中にいると非常にイライラします。それは暴力的で、残忍で、無礼です。そして、あなたが何歳であっても関係ありません。あなたがただコンピューター中毒になっているときの一つのことであり、あなたがその送信ボタンをクリックするか、ドキュメントを保存する前に時間を追跡し、5秒追い出されるとき、それは非常に異なります。自動キッカーの代わりに自動アラームの使用を検討することをお勧めします。それはあなたの子供にお互いを尊重し、お互いが喜んでコンピュータを使うことを教えるでしょう。
さらに軽い代替品もあります。各子供がコンピュータを使用して費やした時間を追跡することから始めて、収集したデータをすべての人が利用できるようにします。この信じられないほど簡単なこと(インターネットの帯域幅に適用)だけで、私は大人でいっぱいのオフィスでネットワーク管理者をしていたときに私の命を救いました。各コンピューターの帯域幅使用量に関する一般的な統計(バイト数であり、訪問したサイトのリストなどの匿名化情報ではない)は、状況を「私-悪意のある貪欲な管理者-悪用された貧しいオフィスユーザー」から「男、あなたは私より5倍ダウンロードした、それは悪い!」 「申し訳ありませんが、実際にダウンロードしました。昼休みに多くのYouTubeを視聴しましたが、このレートではもうやめません」-私は対立シナリオから単に除外されました。
私もこの問題を抱えていました。そこで、使用時間と合計を定義できるkidtimerスクリプトを作成しました。プロジェクトは、Githubの次の場所にあります。
これは、それをインストールして使用する方法です。
コードをコピーして、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
実行する:
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
を使用して、ユーザーの時間が不足していることを警告します。時間がなくなると、すべてのユーザープロセスが終了するため、ユーザーを準備してください。
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:timekpr-maintainers/ppa
をシステムのソフトウェアソースに追加することにより、この信頼できないPPAからサポートされていないパッケージでシステムを更新できます。
deb http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu oneiric main
deb-src http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu oneiric main
このパッケージはで利用可能です:
ハーディ
問題:
バグを報告します here だから指をクロスして待ってください....
次のコマンドにより、ユーザーがログインしているかどうかを確認できます。
who -u
次のような出力が得られます。
$ who -u
jacob :0 2016-03-17 20:48 ? 2557 (:0)
newuser :1 2016-03-17 20:50 ? 4466 (:1)
出力では、対象ユーザーのpidを取得します。時間が制限を超えた場合、停止する必要があります。
ユーザーがSudo
特権を持っていない場合:
このソリューションは、小さなバックグラウンドスクリプトです。スクリプトの先頭に設定するために、1日あたりの使用量を定義された分数に制限します。一度セットアップすれば(それほど難しくありません)、非常に簡単に実行でき、その後の追加のアクションは不要です。
開かれている可能性のあるファイルの不要なデータ損失を防ぐために、60秒before対象ユーザーの制限時間が切れると、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
(拡張子なし)フォルダー内およびとして保存しますスクリプトの先頭で、制限するユーザー名と、許可される最大分数を編集します。例では:
#--- 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
)に記録します。 1日の制限に達すると、スクリプトはユーザーのログインを許可しなくなり、プロセスが存在する場合は強制終了します。rc.local
からは、ユーザーがプロセス名を知っている場合のみ、Sudo特権を持つユーザーのみがスクリプトを停止できます。スクリプトを停止する場合は、次のコマンドを使用します。
Sudo kill "$(pgrep limit_use)"
ただし、そのためにはSudoパスワードが必要です。
timekpr
を試しましたが、機能しませんでした。次に、私のUbuntuで動作するバリアントを作成しました。これは、このバリアントに対して行う必要があるものです。
ルート権限のみを持つ/var/lib/timelimit/user_to_be_limited.limit
ファイルに時間制限を追加します。例えば1800秒(30分)の1日制限。
次を使用して、root権限で/usr/local/bin/timelimit.sh
を作成します。
#!/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 &
Ubuntuを再起動します
答えを簡単に入手できるようにしました。コードはスレッドで説明されています http://forums.linuxmint.com/viewtopic.php?f=213&t=77687 要するに、1日あたりの分単位で設定された制限、1分ごとの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
トーマス・ベケルート
Linuxマシンでの再生時間を監視できる新しいアプリケーションLittleBrother
のベータ版をリリースしました。テストユーザーはDebianパッケージを試してみてください。それをダウンロードして使用する方法については、こちらをご覧ください: https://github.com/marcus67/little_brother 。ただし、インストールはまだ少し荒いかもしれません。これらは、アプリケーションの機能です。