私の息子は、主に彼の新しい学校での使用のために、このクリスマスに新しいラップトップを受け取りました。
しかし、ラップトップは主に学校での使用を目的としているので、妻は私にSteamを削除することを望んでいます。
Steamへのアクセスを制限または制限する方法はありますか?おそらくSteam自体のパスワード、またはそれを実行できる時間を設定しますか?
理想的には、私の仕事なので使用するのはきれいなものでなければなりませんシンプルな多くの場合、私は自宅(およびコンピューター、および電気通信など)から遠ざけられ、妻はコンピューターほど快適ではありませんが、使いやすいとは言えませんfarより良い。
確かにこのタスクを達成できる何かがありますか?
小さなバックグラウンドスクリプトを使用すると、プロセスまたはアプリケーションに時間制限を設定できます。
ユーザーが管理者のパスワードを知らない限りは簡単に超えられません。
このような小さなバックグラウンドスクリプトです。スクリプトの先頭に設定するために、使用法per dayを定義された分数に制限します。一度セットアップすれば(それほど難しくありません)、非常に簡単に実行でき、その後の追加のアクションは不要です。
#!/usr/bin/python3
import subprocess
import os
import sys
import time
#--- set the time limit below (minutes)
minutes = 1
#--- set the process name to limit below
app = "gedit"
uselog = "/opt/limit/uselog"
datefile = "/opt/limit/currdate"
def read(f):
try:
return int(open(f).read().strip())
except FileNotFoundError:
pass
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
try:
# if the pid of the targeted process exists, add a "tick" to the used quantum
pid = subprocess.check_output(["pgrep", app]).decode("utf-8").strip()
n = read(uselog)
n = n + 1 if n != None else 0
# when time exceeds the permitted amount, kill the process
if n > minutes*6:
subprocess.Popen(["kill", pid])
open(uselog, "wt").write(str(n))
except subprocess.CalledProcessError:
pass
currday1 = currday2
limit
という名前のフォルダーを作成します。limit_use
(拡張子なし)フォルダー内およびとして保存しますスクリプトの先頭で、制限するプロセス名、および許可される最大分数を編集します。例では:
#--- set the time limit below (minutes)
minutes = 1
#--- set the process name to limit below
app = "gedit"
フォルダーを/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つ追加します。 1日の制限に達すると、スクリプトはプロセスの実行を許可せず、存在する場合は強制終了します。rc.local
からは、ユーザーがプロセス名を知っている場合のみ、Sudo特権を持つユーザーのみがスクリプトを停止できます。スクリプトを停止する場合は、次のコマンドを使用します。
Sudo kill "$(pgrep limit_use)"
ただし、これを行うには、Sudoパスワードが必要です。
上記のスクリプトは、@ Bytecommanderで述べられているように、アプリケーションの使用を制限する合理的に安全な方法を提供する必要がありますが、非常に簡単ではありませんがcanを超えます。あなたの息子knowsセットアップであり、Linux/Ubuntuで十分な経験がない限り、以下の対策との組み合わせにより、これが発生する可能性は非常に低くなります。
「簡単な解決策」から少し離れていますが、セットアップするのはそれほど難しくありません。追加以下の対策です。 If疑わしい非行は、スクリプトが/etc/rc.local
から呼び出されていることを見つけ、ルートになり、/etc/rc.local
の行を削除しますorこの方法でスクリプトを停止できれば、次の問題に直面することができます。ログイン後に画面が黒くなる。さらに、ソリューションは、再起動後5分後にバックグラウンドスクリプトが実行されているかどうかをチェックします。
余分な手段はスタートアップです。/opt/limit/limit_use &
行に/etc/rc.local
が存在するかどうかをチェックします。andスクリプトがまだ実行されている場合は5分後にチェックします。スクリプトは/etc/xdg/autostart
の(スタートアップアプリケーションに隠された)ランチャーから実行されるため、know実行方法がない限り、何が起こっているのかを見つけることは非常に困難です。これらの2つの手段の組み合わせにより、あなたの息子が気付く可能性は低くなります。
2つの簡単な手順が含まれます。
以下のコードを空のファイルにコピーし、デスクトップにblackout.desktop
として保存します。
[Desktop Entry]
Name=not allowed
Exec=/bin/bash -c "sleep 15 && /usr/local/bin/blackout.py"
Type=Application
Terminal=false
NoDisplay=true
ファイルを/etc/xdg/autostart
にコピーします。
Sudo cp /path/to/blackout.desktop /etc/xdg/autostart
次のスクリプトを空のファイルにコピーし、デスクトップにblackout.py
として保存します実行可能にするおよび/usr/local/bin
にコピーします:
cp /path/to/blackout.py /usr/local/bin
スクリプト
#!/usr/bin/env python3
import subprocess
import time
def dim_screen():
screen = [
l.split()[0] for l in subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()\
if " connected" in l
]
for scr in screen:
subprocess.Popen(["xrandr", "--output", scr, "--brightness", "0"])
if not "/opt/limit/limit_use &" in open("/etc/rc.local").read():
dim_screen()
time.sleep(300)
try:
pid = subprocess.check_output(["pgrep", "limit_use"]).decode("utf-8").strip()
except subprocess.CalledProcessError:
dim_screen()
/etc/xdg/autostart
のランチャーは、すべてのユーザーに対してアプリケーション(この場合は追加のセキュリティチェックアップ)を起動します。このcouldはローカルで上書きされますが、knowチェックアップが必要です。行NoDisplay=true
をランチャーに入れると、Startup Applications
にローカルに表示されないため、存在することを知らないと、検出されない可能性が高くなります。
さらに、あなたの息子は見つけるのに15秒しかありません(画面が黒くなります)ので、彼は天才でない限り深刻な問題を抱えているでしょう。Ubuntuと創造的な心で多くの経験を持っています。
私自身の経験から、コンピューターゲームへのアクセスを制限することは、子供たちを教育する上で最も困難な作業の1つです。もちろん、私たちの両親は、主に学校でコンピューターを使用することを望んでいますが、これは子供の意図と大きく対立しています。彼らは、学校でのみ使用できるハードウェアを提供することで私たちを嫌います。
そしてもちろん、私たちはalso彼らに彼らのコンピューターを賢明な方法で使う方法を学んでほしい。これには、ゲームやビデオの視聴が含まれます。
残念ながら、よく維持され、機能している 子供のコンピューティングを制限するペアレンタルコントロール は、Ubuntuではほとんど利用できません。もう1つの大きな問題は、それらが スマートキッズ になるとすぐに、すべての対策が無駄になることです。彼らは、私たちが気付かなくても本当に賢い場合、私たちの制限を克服する方法を常に見つけます。
子供のコンピュータで実行されているブロッキングソフトウェアまたはPAM制限は一時的なものであり、遅かれ早かれ非常に簡単に克服される可能性があります。そのため、パスワードで保護されたルーターにジョブを実行させ、物理的なアクセスをはるかに簡単に制御できるようにすることにしました。
したがって、現時点でゲームをある程度制限するためにここで行うことは、以下のすべての組み合わせです。
Sudo
グループに参加できることを知っています。計画では、これを非表示にするのではなく、私たちにそれを求めます。子供と私たち両方のコンピューターの使用に関する契約の履行を容易にするために、次の制限を設けました。
インターネットアクセスをブロックすると、Steam、Minecraft、またはその他のgamigサーバー。ただし、オフラインで実行されるゲームには効果がありません。
これは、シェルスクリプトを使用して実現できます。
最初のスクリプトは、Steam
を実行するとすぐに強制終了します。
#!/bin/bash
while true
do
pkill Steam
sleep 1
done
exit 0
/path/to/anyname.sh
として保存し、スタートアップアプリケーションのリストに追加します。
このスクリプトは、Steam
という名前の開いているプロセスを毎秒チェックし、見つかった場合は強制終了します。
ただし、特定の時間にSteam
を実行して、その間隔で息子がゲームをプレイできるようにするソリューションが必要です。そのためには、別のスクリプトを作成する必要があります。
#!/bin/bash
echo "pkill anyname.sh" | at 10:00
exit 0
/path/to/anyname2.sh
として保存し、これをスタートアップアプリケーションのリストに追加します。
このスクリプトは10:00に最初のスクリプトを強制終了します。ですから、あなたの息子が10:00にSteam
を走ったとき。彼は今すぐプレイできるようになります。
3番目のスクリプトは、別の時点で最初のスクリプトを再起動することで、一定時間後にSteam
を殺し、息子がSteam
を介してゲームをプレイできなくなるようにします。
#!/bin/bash
echo "bash /path/to/anyname.sh" | at 12:00
exit 0
/path/to/anyname3.sh
として保存し、スタートアップアプリケーションのリストに追加します。
あなたの息子が見つけられないように、それらの道を隠しておいてください。
新しいユーザーアカウント(経由でシステム設定)を使用しない理由。これは、Linuxでの「許可」の唯一の方法です。
Sudo
グループ)。このアカウントはルートアクセス権を持たなくなり、ソフトウェアのインストールまたは削除、システム全体の設定の変更ができなくなります。いくつかのメモ..
/home/son/.Steam
と、もちろんバイナリファイル/usr/games/Steam
です。