A. Opzioni di configurazione
Se il blocco ha lo scopo di impedire agli utenti non esperti di utilizzare determinate applicazioni, la modifica (una copia locale di) del file desktop dell'applicazione (come descritto in [1]
) è probabilmente il modo più rapido e semplice.
Alcune cose aggiuntive possono essere fatte per creare una barriera aggiuntiva e / o per prevenire il fatto che l'utente scopra troppo facilmente cosa abbiamo fatto per bloccare l'applicazione ( [2]
e [3]
).
L'installazione non è adatta a situazioni non presidiate con utenti esperti. In situazioni "domestiche" con utenti medi sarà sufficiente in molti casi.
1.Esempio per bloccare gedit modificando (una versione locale di) il file .desktop
Copiare file sul desktop dell'applicazione in /usr/share/applications
a ~/.local/share/applications
:
cp /usr/share/applications/gedit.desktop ~/.local/share/applications/gedit.desktop
Modifica il file: aprilo con gedit (mentre puoi ancora :)) trascinandolo su una finestra di gedit aperta.
sostituire la linea
Exec=gedit %U
di:
Exec=zenity --info --text 'You are not allowed to use this application'
rimuovere le (possibili) scorciatoie, per impedire l'avvio dell'applicazione da una delle scorciatoie:
rimuovi la linea (per l'esempio di gedit):
Actions=Window;Document;
e le sezioni come:
[Desktop Action Window]
Name=Open a New Window
Exec=gedit --new-window
OnlyShowIn=Unity;
Da quel momento in poi (dopo aver effettuato il logout / login) l'utente vedrà questo messaggio se tenta di aprire gedit da Dash o tenta di aprire un file collegato all'applicazione:
Nascondere l'applicazione da Dash (misura opzionale)
Dopo aver apportato le modifiche sopra, con il gedit.desktop
file ancora aperto, possiamo aggiungere una riga aggiuntiva:
NoDisplay=true
Aggiungendo questa riga, gedit
non comparirà nemmeno in Dash.
Disfare
Per annullare, è sufficiente rimuovere il .desktop
file locale da~/.local/share/applications
2. Renderlo un po 'più difficile da scoprire
Mentre, dopo aver modificato il .desktop
file, l'applicazione non verrà più visualizzata in Dash, la ricerca di Dash mostrerà comunque il nostro gedit.desktop
file appena creato , il che potrebbe inavvertitamente dare un suggerimento su come sfuggire al blocco dell'applicazione.
Per evitare ciò, dovremmo escludere la directory ~/.local/share/applications
dalla ricerca Dash e cancellare la cronologia delle ricerche.
Apri Impostazioni di sistema> "Sicurezza e privacy"> "File e applicazioni" (scheda). Aggiungi la directory ~/.local/share/applications
all'elenco per escludere dalla ricerca.
3. (Non) utilizzando il terminale / riga di comando
Reindirizzamento del gedit
comando(1)
La modifica del .desktop
file impedisce l'utilizzo dell'applicazione da Dash, ma se l'utente conosce la AltF2combinazione e il comando per eseguire l'applicazione, sarà comunque in grado di avviare l'applicazione, proprio come con il terminale. Una misura extra piacevole e facile da impostare è quella di creare (se non esiste ancora) la directory ~/bin
e creare un piccolo script nella directory:
#!/bin/bash
zenity --info --text 'You are not allowed to use this application'
Renderlo eseguibile e denominarlo dopo l'applicazione; gedit
in questo caso.
Poiché ~/bin
è PATH
attivo, l'esecuzione del comando chiamerà lo script anziché l' gedit
applicazione "reale" . Di conseguenza, You are not allowed to use this application
apparirà lo stesso messaggio
Reindirizzamento del gedit
comando(2)
Un altro modo (con effetto più limitato, vedi nota) di reindirizzare il comando dell'applicazione è quello di aggiungere un alias al .bashrc
file:
gedit ~/.bashrc
aggiungi la linea (esempio gedit):
alias gedit='zenity --info --text "You are not allowed to use this application"'
Nota : questo deve essere utilizzato solo come misura aggiuntiva, poiché impedisce solo che l'applicazione venga chiamata direttamente dal terminale. Facendo doppio clic su un .txt
file (ad es.) Si aprirà comunque l'applicazione.
Rendere l'uso del terminale difficile o impossibile
Per impedire l'uso del terminale, puoi anche fare lo stesso trucco sul gnome-terminal.desktop
file - come in [1]
, e / o modificare la combinazione di tasti di scelta rapida predefinita per eseguire il terminale (Impostazioni di sistema> "Tastiera"> "Scorciatoie"> "Avviatori" )
4. Un piccolo strumento per creare (o annullare) automaticamente una versione modificata del .desktop
file (come in 1.)
Se esegui lo script seguente con l'argomento block
o unblock
( devi eseguirlo con uno dei due), ti verrà presentato un elenco di file desktop (globali), che rappresentano le applicazioni installate:
Scegline uno e l'applicazione verrà bloccata o sbloccata, a seconda dell'argomento con cui la esegui.
Nota
Potrebbe essere necessario disconnettersi / accedere per farlo funzionare.
Il copione
#!/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)
Copia lo script in un file vuoto, salvalo come block_apps.py
ed eseguilo in uno dei due modi:
python3 /path/to/block_apps.py block
o
python3 /path/to/block_apps.py unblock
B. Opzione / i con script
Il blocco di alcune applicazioni può essere eseguito anche eseguendo uno script in background. Lo script dovrebbe eseguire determinate azioni se viene eseguita una delle applicazioni "vietate".
1. Script per manipolare lo schermo quando vengono utilizzate applicazioni vietate.
Lo script seguente offre un modo flessibile per bloccare le applicazioni definite dall'utente. Funziona con un semplice comando, con le applicazioni proibite come argomento, ad esempio (supponendo che tu abbia reso eseguibile lo script):
/path/to/block_apps.py firefox gedit gnome-terminal
Il vantaggio di bloccare applicazioni come questa è che è flessibile; anche all'interno di un account, è possibile utilizzare impostazioni diverse, semplicemente usando altre applicazioni come argomento.
Cosa fa
Annullando il commento di una delle righe:
# action = "xrandr --output "+screen+" --brightness 0"
o
# action = "xrandr --output "+screen+" --rotate inverted"
Lo script o:
oscura lo schermo ( action = "xrandr --output "+screen+" --brightness 0"
):
o lo capovolge ( action = "xrandr --output "+screen+" --rotate inverted"
):
( chi ha detto che Unity non consente di mettere il launcher sulla destra? )
Il copione
#!/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)
Come usare
- Copia lo script in un file vuoto, salvalo come
block_apps.py
, rendilo eseguibile
eseguirlo dal comando:
/path/to/block_apps.py <application_1> <application_2> <application_3> etc...
Importante
Per eliminare lo block_apps.py
script e ripristinare le impostazioni "normali", utilizzare lo script seguente (renderlo disponibile in una combinazione di tasti di scelta rapida):
#!/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])
Come sempre con gli script, copiarlo in un file vuoto, salvarlo come kill_blockapps.py
, renderlo eseguibile ed eseguirlo da:
/path/to/kill_blockapps.py
Probabilmente vorrai avere questo sotto un tasto di scelta rapida: Scegli: Impostazioni di sistema> "Tastiera"> "Scorciatoie"> "Scorciatoie personalizzate". Fai clic su "+" e aggiungi il comando come sopra.