A. Opciones de configuración
Si el bloqueo está destinado a impedir que usuarios no tan experimentados usen ciertas aplicaciones, la edición (una copia local) del archivo de escritorio de la aplicación (como se describe en [1]) es probablemente la forma más rápida y fácil.
Se pueden hacer algunas cosas adicionales para crear una barrera adicional y / o evitar el hecho de que el usuario descubre con demasiada facilidad lo que hemos hecho para bloquear la aplicación ( [2]y [3]).
La configuración no es adecuada para situaciones desatendidas con usuarios experimentados. En situaciones de "hogar" con usuarios promedio, será suficiente en muchos casos.
1.Ejemplo para bloquear gedit editando (una versión local de) el archivo .desktop
Copiar archivos de escritorio de la aplicación en la /usr/share/applicationsque ~/.local/share/applications:
cp /usr/share/applications/gedit.desktop ~/.local/share/applications/gedit.desktop
Edite el archivo: ábralo con gedit (mientras todavía pueda :)) arrastrándolo sobre una ventana abierta de gedit.
reemplazar la línea
Exec=gedit %U
por:
Exec=zenity --info --text 'You are not allowed to use this application'
elimine los accesos directos (posibles) para evitar iniciar la aplicación desde uno de los accesos directos:
eliminar la línea (para el ejemplo de gedit):
Actions=Window;Document;
y las secciones como:
[Desktop Action Window]
Name=Open a New Window
Exec=gedit --new-window
OnlyShowIn=Unity;
A partir de ese momento (después de cerrar sesión / iniciar sesión), el usuario verá este mensaje si intenta abrir gedit desde Dash o intenta abrir un archivo vinculado a la aplicación:

Ocultar la aplicación de Dash (medida opcional)
Después de realizar los cambios anteriores, con el gedit.desktoparchivo aún abierto, podemos agregar una línea adicional:
NoDisplay=true
Al agregar esta línea, geditni siquiera aparecerá en Dash.
Deshacer
Para deshacer, simplemente elimine el .desktoparchivo local de~/.local/share/applications
2.Hacerlo un poco más difícil de descubrir
Si bien, después de editar el .desktoparchivo, la aplicación ya no aparecerá en Dash, la búsqueda de Dash seguirá mostrando nuestro gedit.desktoparchivo recién creado , lo que podría dar una pista involuntariamente sobre cómo escapar del bloque de la aplicación.

Para evitar eso, debemos excluir el directorio ~/.local/share/applicationsde la búsqueda de Dash y borrar el historial de búsqueda.
Abra Configuración del sistema> "Seguridad y privacidad"> "Archivos y aplicaciones" (pestaña). Agregue el directorio ~/.local/share/applicationsa la lista para excluirlo de la búsqueda.

3. (No) usando la terminal / línea de comando
Redireccionando el geditcomando(1)
La edición del .desktoparchivo evita el uso de la aplicación desde Dash, pero si el usuario conoce la AltF2combinación y el comando para ejecutar la aplicación, aún podrá iniciar la aplicación, al igual que con el terminal. Una medida extra agradable y fácil de configurar es crear (si aún no existe) el directorio ~/biny crear un pequeño script en el directorio:
#!/bin/bash
zenity --info --text 'You are not allowed to use this application'
Haga que sea ejecutable y asígnele el nombre de la aplicación; gediten este caso.
Como ~/binestá PATHactivado, ejecutar el comando llamará al script en lugar de a la geditaplicación "real" . Como resultado, You are not allowed to use this applicationaparecerá el mismo mensaje
Redireccionando el geditcomando(2)
Otra forma (con un efecto más limitado, vea la nota) de redirigir el comando de la aplicación es agregar un alias al .bashrcarchivo:
gedit ~/.bashrc
agregue la línea (ejemplo de gedit):
alias gedit='zenity --info --text "You are not allowed to use this application"'
Nota : esto solo debe usarse como una medida adicional, ya que solo evita que la aplicación se llame directamente desde el terminal. .txtSin embargo, hacer doble clic en un archivo (por ejemplo) abrirá la aplicación.
Hacer que el uso del terminal sea difícil o imposible
Para evitar el uso del terminal, también puede hacer el mismo truco en el gnome-terminal.desktoparchivo - que en [1]y / o cambiar la combinación de teclas de acceso directo predeterminada para ejecutar el terminal (Configuración del sistema> "Teclado"> "Accesos directos"> "Iniciadores" )
4. Una pequeña herramienta para crear (o deshacer) automáticamente una versión editada del .desktoparchivo (como en 1.)
Si ejecuta el script a continuación con el argumento blocko unblock( debe ejecutarlo con cualquiera de los dos), se le presentará una lista con archivos de escritorio (globales), que representan sus aplicaciones instaladas:

Elija uno y su aplicación se bloqueará o desbloqueará, según el argumento con el que la ejecute.
Nota
Puede que tenga que cerrar sesión / iniciar sesión para que funcione.
La secuencia de comandos
#!/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)
Copie el script en un archivo vacío, guárdelo como block_apps.pyy ejecútelo:
python3 /path/to/block_apps.py block
o
python3 /path/to/block_apps.py unblock
B. Opciones con guión
También se puede bloquear ciertas aplicaciones ejecutando un script en segundo plano. El script tendría que tomar ciertas acciones si se ejecuta una de las aplicaciones "prohibidas".
1. Script para manipular la pantalla cuando se utilizan aplicaciones prohibidas.
El siguiente script ofrece una forma flexible de bloquear aplicaciones definidas por el usuario. Se ejecuta con un comando simple, con las aplicaciones prohibidas como argumento, por ejemplo (suponiendo que haya ejecutado el script):
/path/to/block_apps.py firefox gedit gnome-terminal
La ventaja de bloquear aplicaciones como esta es que es flexible; incluso dentro de una cuenta, se pueden usar diferentes configuraciones, simplemente usando otras aplicaciones como argumento.
Que hace
Al descomentar una de las líneas:
# action = "xrandr --output "+screen+" --brightness 0"
o
# action = "xrandr --output "+screen+" --rotate inverted"
El guión tampoco:
ennegrece la pantalla ( action = "xrandr --output "+screen+" --brightness 0"):

o lo da vuelta ( action = "xrandr --output "+screen+" --rotate inverted"):
(¿ quién dijo que Unity no permite poner el lanzador a la derecha? )

La secuencia de comandos
#!/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)
Cómo utilizar
- Copie el script en un archivo vacío, guárdelo como
block_apps.py, hágalo ejecutable
ejecútelo con el comando:
/path/to/block_apps.py <application_1> <application_2> <application_3> etc...
Importante
Para eliminar la block_apps.pysecuencia de comandos y restaurar la configuración "normal", use la secuencia de comandos a continuación (haga que esté disponible bajo una combinación de teclas de acceso directo):
#!/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])
Como siempre con los scripts, cópielo en un archivo vacío, guárdelo como kill_blockapps.py, hágalo ejecutable y ejecútelo:
/path/to/kill_blockapps.py
Probablemente desee tener este bajo una tecla de acceso directo: Elija: Configuración del sistema> "Teclado"> "Accesos directos"> "Accesos directos personalizados". Haga clic en "+" y agregue el comando como se indica arriba.