A. Options de configuration
Si le blocage est destiné à empêcher les utilisateurs peu expérimentés d'utiliser certaines applications, l'édition (une copie locale de) le fichier de bureau de l'application (comme décrit dans [1]
) est probablement le moyen le plus rapide et le plus simple.
Certaines choses supplémentaires peuvent être faites pour créer une barrière supplémentaire et / ou pour empêcher le fait que l'utilisateur découvre trop facilement ce que nous avons fait pour bloquer l'application ( [2]
et [3]
).
La configuration n'est pas adaptée aux situations sans surveillance avec des utilisateurs expérimentés. Dans des situations "à domicile" avec des utilisateurs moyens, cela suffira dans de nombreux cas.
Exemple de blocage de gedit en modifiant (une version locale de) le fichier .desktop
Copiez le fichier de bureau de l'application /usr/share/applications
à ~/.local/share/applications
:
cp /usr/share/applications/gedit.desktop ~/.local/share/applications/gedit.desktop
Modifiez le fichier: ouvrez-le avec gedit (tant que vous pouvez encore :)) en le faisant glisser sur une fenêtre gedit ouverte.
remplacer la ligne
Exec=gedit %U
par:
Exec=zenity --info --text 'You are not allowed to use this application'
supprimez les (possibles) raccourcis pour éviter de démarrer l'application à partir de l'un des raccourcis:
supprimez la ligne (pour l'exemple gedit):
Actions=Window;Document;
et la ou les sections comme:
[Desktop Action Window]
Name=Open a New Window
Exec=gedit --new-window
OnlyShowIn=Unity;
À partir de ce moment (après déconnexion / connexion), l'utilisateur verra ce message s'il essaie d'ouvrir gedit à partir de Dash, ou essaie d'ouvrir un fichier lié à l'application:
Masquer l'application de Dash (mesure facultative)
Après avoir effectué les modifications ci-dessus, le gedit.desktop
fichier étant toujours ouvert, nous pouvons ajouter une ligne supplémentaire:
NoDisplay=true
En ajoutant cette ligne, gedit
n'apparaîtra même pas dans Dash.
annuler
Pour annuler, supprimez simplement le .desktop
fichier local de~/.local/share/applications
2.Rendre la recherche un peu plus difficile
Alors que, après avoir modifié le .desktop
fichier, l'application n'apparaîtra plus dans Dash, la recherche Dash montrera toujours notre gedit.desktop
fichier nouvellement créé , ce qui pourrait involontairement donner un indice sur la façon d'échapper au bloc d'application.
Pour éviter cela, nous devons exclure le répertoire ~/.local/share/applications
de la recherche Dash et effacer l'historique de recherche.
Ouvrez Paramètres système> "Sécurité et confidentialité"> "Fichiers et applications" (onglet). Ajoutez le répertoire ~/.local/share/applications
à la liste à exclure de la recherche.
3. (Pas) en utilisant le terminal / la ligne de commande
Rediriger la gedit
commande(1)
La modification du .desktop
fichier empêche d'utiliser l'application à partir de Dash, mais si l'utilisateur connaît la AltF2combinaison et la commande pour exécuter l'application, il pourra toujours démarrer l'application, tout comme avec le terminal. Une mesure supplémentaire agréable et facile à configurer consiste à créer (s'il n'existe pas encore) le répertoire ~/bin
et à créer un petit script dans le répertoire:
#!/bin/bash
zenity --info --text 'You are not allowed to use this application'
Rendez-le exécutable et nommez-le d'après l'application; gedit
dans ce cas.
Puisque ~/bin
c'est dans PATH
, l'exécution de la commande appellera le script au lieu de la "vraie" gedit
application. En conséquence, le même You are not allowed to use this application
message apparaîtra
Rediriger la gedit
commande(2)
Une autre façon (avec un effet plus limité, voir note) de rediriger la commande de l'application est d'ajouter un alias au .bashrc
fichier:
gedit ~/.bashrc
ajoutez la ligne (exemple gedit):
alias gedit='zenity --info --text "You are not allowed to use this application"'
Remarque : ceci ne doit être utilisé que comme mesure supplémentaire, car il empêche uniquement l'appel direct de l'application à partir du terminal. Un double-clic sur un .txt
fichier (par exemple) ouvrira cependant toujours l'application.
Rendre l'utilisation du terminal difficile ou impossible du tout
Pour empêcher l'utilisation du terminal, vous pouvez également faire la même astuce sur le gnome-terminal.desktop
fichier - que dans [1]
et / ou modifier la combinaison de touches de raccourci par défaut pour exécuter le terminal (Paramètres système> "Clavier"> "Raccourcis"> "Démarreurs" )
4. Un petit outil pour créer (ou annuler) automatiquement une version modifiée du .desktop
fichier (comme dans 1.)
Si vous exécutez le script ci-dessous avec l'argument block
ou unblock
(vous devez l' exécuter avec l'un ou l'autre), une liste de fichiers (globaux) de bureau vous sera présentée, représentant vos applications installées:
Choisissez-en un, et votre application est bloquée ou débloquée, selon l'argument avec lequel vous l'exécutez.
Remarque
Vous devrez peut-être vous déconnecter / vous connecter pour que cela fonctionne.
Le script
#!/usr/bin/env python3
import os
import shutil
import sys
mode = sys.argv[1]
home = os.environ["HOME"]
global_dir = "/usr/share/applications/"
files = [file for file in os.listdir(global_dir) if file.endswith(".desktop")]
relevant = []
for i in range(len(files)):
file = files[i]
with open(global_dir+file) as src:
text = src.read()
if not "NoDisplay=true" in text:
relevant.append((file))
for i in range (len(relevant)):
print(str(i+1)+".", relevant[i])
choice = int(input("\nplease enter the number of the corresponding .desktop file: "))
filename = relevant[choice-1]
local_file = home+"/"+".local/share/applications/"+filename
global_file = global_dir+filename
def block_application(filename):
if not os.path.exists(local_file):
shutil.copyfile(global_file, local_file)
with open(local_file) as src:
lines = src.readlines()
shortcuts_section = [i for i in range(len(lines)) if lines[i].startswith("Actions=")]
if len(shortcuts_section) != 0:
lines = lines[:shortcuts_section[0]]
command = [i for i in range(len(lines)) if lines[i].startswith("Exec=")]
if len(command) != 0:
lines[command[0]] = 'Exec=zenity --info --text "You are not allowed to use this application"\n'
with open(local_file, "wt") as out:
for line in lines:
out.write(line)
if mode == "block":
block_application(filename)
elif mode == "unblock":
os.remove(local_file)
Copiez le script dans un fichier vide, enregistrez-le sous block_apps.py
et exécutez-le soit:
python3 /path/to/block_apps.py block
ou
python3 /path/to/block_apps.py unblock
B. Option (s) scriptée (s)
Le blocage de certaines applications peut également être effectué en exécutant un script en arrière-plan. Le script devra effectuer certaines actions si l'une des applications "interdites" est exécutée.
1. Script pour manipuler l'écran lorsque des applications interdites sont utilisées.
Le script ci-dessous offre un moyen flexible de bloquer les applications définies par l'utilisateur. Il s'exécute avec une commande simple, avec les applications interdites comme argument, par exemple (en supposant que vous avez rendu le script exécutable):
/path/to/block_apps.py firefox gedit gnome-terminal
L'avantage de bloquer des applications comme celle-ci est qu'il est flexible; même au sein d'un compte, différents paramètres peuvent être utilisés, simplement en utilisant d'autres applications comme argument.
Ce qu'il fait
En décommentant l'une des lignes:
# action = "xrandr --output "+screen+" --brightness 0"
ou
# action = "xrandr --output "+screen+" --rotate inverted"
Le script soit:
noircit l'écran ( action = "xrandr --output "+screen+" --brightness 0"
):
ou le met à l'envers ( action = "xrandr --output "+screen+" --rotate inverted"
):
( qui a dit que l'unité ne permet pas de mettre le lanceur à droite? )
Le script
#!/usr/bin/env python3
import subprocess
import getpass
import sys
import time
applications = []
i = 1
while True:
try:
applications.append(sys.argv[i])
i = i+1
except IndexError:
break
cmd1 = "xrandr"
get = subprocess.check_output(["/bin/bash", "-c", cmd1]).decode("utf-8").split()
screen = [get[i-1] for i in range(len(get)) if get[i] == "connected"][0]
#-- uncomment (only) one of the options below
# action = "xrandr --output "+screen+" --brightness 0"
action = "xrandr --output "+screen+" --rotate inverted"
#--
while True:
cmd2 = "ps -u "+getpass.getuser()
applist = subprocess.check_output(["/bin/bash", "-c", cmd2]).decode("utf-8")
for application in applications:
if application in applist:
subprocess.Popen(["/bin/bash", "-c", action])
time.sleep(5)
Comment utiliser
- Copiez le script dans un fichier vide, enregistrez-le sous
block_apps.py
, rendez-le exécutable
exécutez-le par la commande:
/path/to/block_apps.py <application_1> <application_2> <application_3> etc...
Important
Pour tuer le block_apps.py
script et restaurer les paramètres "normaux", utilisez le script ci-dessous (rendez-le disponible sous une combinaison de touches de raccourci):
#!/usr/bin/env python3
import subprocess
cmd = "ps -ef | grep block_apps.py"
run = subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").split("\n")
match = [line for line in run if "block_apps.py" in line]
command = "kill "+match[0].split()[1]
subprocess.Popen(["/bin/bash", "-c", command])
cmd1 = "xrandr"
get = subprocess.check_output(["/bin/bash", "-c", cmd1]).decode("utf-8").split()
screen = [get[i-1] for i in range(len(get)) if get[i] == "connected"][0]
restore_1 = "xrandr --output "+screen+" --brightness 1"
restore_2 = "xrandr --output "+screen+" --rotate normal"
for item in [restore_1, restore_2]:
subprocess.Popen(["/bin/bash", "-c", item])
Comme toujours avec les scripts, copiez-le dans un fichier vide, enregistrez-le sous kill_blockapps.py
, rendez-le exécutable et exécutez-le par:
/path/to/kill_blockapps.py
Vous voudrez probablement avoir celui-ci sous une touche de raccourci: Choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande comme ci-dessus.