Mon fils a reçu un nouvel ordinateur portable Noël dernier, principalement pour être utilisé dans sa nouvelle école ... Et maintenant qu’il a son propre ordinateur portable, il est ravi d’avoir installé Steam.
Mais la femme veut que je supprime Steam, parce que l'ordinateur portable est principalement destiné à l'école ... Je préférerais ne pas le faire, si je ne suis pas obligé.
Est-il possible de restreindre ou de limiter l'accès à Steam? Peut-être un mot de passe sur Steam lui-même ou des temps fixes pendant lesquels il peut être exécuté?
idéalement, cela doit être joli simple à utiliser car mon travail me tient souvent loin de chez moi (et des ordinateurs, des télécommunications et ...) pendant de longues périodes et bien que ma femme ne soit pas aussi à l'aise avec les ordinateurs que moi, il est beaucoup plus facile de l'utiliser, loin mieux.
Il y a sûrement quelque chose qui peut accomplir cette tâche?
Avec un petit script en arrière-plan, vous pouvez définir une limite de temps pour un processus ou une application.
Tant que votre utilisateur ne connaît pas le mot de passe de l'administrateur , il n'est pas dépassé trop facilement.
Est-ce un si petit script d'arrière-plan. Il limite l'utilisation par jour à un nombre défini de minutes, à définir dans l'en-tête du script. Une fois installé (ce qui n’est pas trop difficile), la procédure est très simple et aucune action supplémentaire n’est nécessaire par la suite.
#!/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
(sans extension) dans le dossier et rendez-le exécutable Modifiez dans l'en-tête du script le nom du processus à limiter et le nombre maximal de minutes autorisées. Dans l'exemple:
#--- set the time limit below (minutes)
minutes = 1
#--- set the process name to limit below
app = "gedit"
Copiez le dossier dans le répertoire /opt
:
cp -r /path/to/limit /opt
Maintenant, éditez /etc/rc.local
pour que le script l'exécute en tant que root
au démarrage:
Sudo -i gedit /etc/rc.local
Juste avant la ligne
exit 0
une autre ligne:
/opt/limit/limit_use &
C'est tout
Quand quelqu'un essaie de tuer le script d'arrière-plan:
(action non autorisée)
/opt/limit/uselog
). Si la limite journalière est atteinte, le script n'autorise plus l'exécution du processus, ce qui le tue s'il existe.rc.local
, seuls les utilisateurs dotés des privilèges Sudo peuvent arrêter le script, même si l'utilisateur connaît le nom du processus.Si vous souhaitez arrêter le script, utilisez la commande suivante:
Sudo kill "$(pgrep limit_use)"
Mais encore une fois, vous aurez besoin du mot de passe Sudo pour le faire.
Bien que le script ci-dessus devrait fournir un moyen raisonnablement sûr de limiter l'utilisation d'une application, comme mentionné par @Bytecommander, il peut être dépassé, mais pas très facilement. La combinaison avec la mesure ci-dessous rendra très peu probable que cela se produise, à moins que votre fils connaisse la configuration et connaisse assez bien Linux/Ubuntu.
Un peu plus loin d'une "solution simple", mais toujours pas trop difficile à mettre en place se trouve la mesure supplémentaire ci-dessous. Si notre délinquant présumé découvrirait que le script est appelé depuis /etc/rc.local
, parviendrait à devenir root et supprimerait la ligne dans /etc/rc.local
, ou serait capable d'arrêter le script de cette façon, nous pouvons le confronter au prochain problème: l'écran s'éteint après la connexion. De plus, la solution vérifie si le script d'arrière-plan est en cours d'exécution 5 minutes après le redémarrage. .
La mesure supplémentaire est une vérification au démarrage si la ligne /opt/limit/limit_use &
est présente dans /etc/rc.local
, et une vérification après 5 minutes si le script est toujours exécuté. Comme le script s'exécute depuis un lanceur (masqué depuis les applications de démarrage) dans /etc/xdg/autostart
, il sera assez difficile de savoir ce qui se passe, à moins que vous sachiez comment procéder. La combinaison de ces deux mesures rend peu probable que votre fils le découvre et, s’il le fait, rien ne l’arrêtera probablement.
Deux étapes simples sont impliquées:
Copiez le code ci-dessous dans un fichier vide, enregistrez-le sous le nom blackout.desktop
sur votre bureau:
[Desktop Entry]
Name=not allowed
Exec=/bin/bash -c "sleep 15 && /usr/local/bin/blackout.py"
Type=Application
Terminal=false
NoDisplay=true
Copiez le fichier dans /etc/xdg/autostart
:
Sudo cp /path/to/blackout.desktop /etc/xdg/autostart
Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous le nom blackout.py
sur votre bureau, et rendez-le exécutable et le copier dans /usr/local/bin
:
cp /path/to/blackout.py /usr/local/bin
Le script
#!/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()
Les lanceurs dans /etc/xdg/autostart
lanceront une application (dans ce cas, le contrôle de sécurité supplémentaire) pour tous les utilisateurs. Cela pourrait être écrasé localement, mais vous devez connaître l'exécution de la vérification. En plaçant la ligne NoDisplay=true
dans notre programme de lancement, elle n'apparaîtra pas localement dans Startup Applications
. Par conséquent, sans savoir si elle existe, il est peu probable qu'elle soit découverte.
De plus, votre fils n'a que 15 secondes pour le savoir (l'écran est alors noirci), ce qui l'empêcherait d'avoir un grave problème, à moins qu'il ne soit un génie, qu'il ait beaucoup d'expérience avec Ubuntu et un esprit créatif.
D'après ma propre expérience, limiter l'accès aux jeux informatiques est l'une des tâches les plus difficiles de l'éducation de nos enfants. Bien sûr, nous les parents voulons qu’ils utilisent leur ordinateur principalement pour l’école, mais cela va à l’encontre des intentions de l’enfant. Ils vont nous haïr pour leur donner du matériel utilisable pour l'école seulement.
Et bien sûr, nous voulons également apprendre à utiliser leur ordinateur de manière rationnelle, y compris à l’utiliser non seulement pour le travail, mais aussi pour les loisirs. . Cela inclut les jeux et regarder des vidéos.
Malheureusement, bien entretenu et fonctionnel contrôles parentaux limitant l'informatique des enfants est presque indisponible pour Ubuntu. Un autre problème majeur est que dès qu'ils sont enfants intelligents toutes les mesures que nous avons prises sont devenues vaines. Ils trouveront toujours des moyens de surmonter nos restrictions, au cas où ils seraient vraiment intelligents sans même que nous puissions nous en rendre compte.
Tout logiciel de blocage ou restriction PAM s'exécutant sur l'ordinateur de l'enfant ne sera que temporaire et pourra, tôt ou tard, être surmonté très facilement. Par conséquent, nous avons décidé de laisser le routeur protégé par mot de passe faire le travail, où l'accès physique peut être contrôlé beaucoup plus facilement.
Donc, ce que nous faisons ici pour limiter quelque peu le jeu en ce moment est une combinaison de tous les éléments suivants:
Sudo
tôt ou tard. Le plan est qu'ils nous le demanderont plutôt que de le cacher.Pour faciliter l'exécution du contrat d'utilisation de l'ordinateur pour les enfants, pour les enfants, nous avons installé les restrictions suivantes:
Bloquer l'accès à Internet désactivera effectivement les jeux si ce jeu nécessite un accès à Internet tel que Steam , Minecraft , ou d'autres serveurs de gamig. Cela n'aura toutefois aucun effet pour les jeux hors ligne.
Ceci peut être réalisé en utilisant des scripts Shell.
Le premier script consiste à tuer Steam
dès son exécution:
#!/bin/bash
while true
do
pkill Steam
sleep 1
done
exit 0
Enregistrez-le sous /path/to/anyname.sh
et ajoutez-le à la liste des applications de démarrage.
Ce script fera en sorte qu'il vérifie chaque processus ouvert nommé Steam
chaque seconde et s'il en trouve, il le tuera.
Toutefois, vous avez besoin d’une solution permettant à Steam
de s’exécuter à une heure précise afin que votre fils puisse jouer à des jeux pendant cet intervalle. Pour ce faire, vous devez écrire un autre script:
#!/bin/bash
echo "pkill anyname.sh" | at 10:00
exit 0
Enregistrez-le sous le nom /path/to/anyname2.sh
et ajoutez-le également à votre liste d'applications de démarrage.
Ce script va tuer le premier script à 10h00. Ainsi, lorsque votre fils exécute Steam
à 10h00. Il pourra y jouer maintenant.
Le troisième script consiste à relancer le premier script à un autre moment afin qu'il tue Steam
après un intervalle de temps et que votre fils ne puisse plus jouer à des jeux avec Steam
name__.
#!/bin/bash
echo "bash /path/to/anyname.sh" | at 12:00
exit 0
Enregistrez-le sous /path/to/anyname3.sh
et ajoutez-le à votre liste d'applications de démarrage.
Assurez-vous de garder ces chemins cachés afin que votre fils ne le découvre pas.
Pourquoi ne pas utiliser new ser Account (via System Settings). C'est la seule méthode sous Linux pour les "autorisations".
Sudo
group). Ensuite, ce compte n'aura pas d'accès root, il ne pourra pas installer ni supprimer de logiciel, ni modifier les paramètres à l'échelle du système.Quelques notes ..
/home/son/.Steam
et bien sûr le fichier binaire /usr/games/Steam