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/applications
que ~/.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.desktop
archivo aún abierto, podemos agregar una línea adicional:
NoDisplay=true
Al agregar esta línea, gedit
ni siquiera aparecerá en Dash.
Deshacer
Para deshacer, simplemente elimine el .desktop
archivo local de~/.local/share/applications
2.Hacerlo un poco más difícil de descubrir
Si bien, después de editar el .desktop
archivo, la aplicación ya no aparecerá en Dash, la búsqueda de Dash seguirá mostrando nuestro gedit.desktop
archivo 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/applications
de 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/applications
a la lista para excluirlo de la búsqueda.
3. (No) usando la terminal / línea de comando
Redireccionando el gedit
comando(1)
La edición del .desktop
archivo 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 ~/bin
y 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; gedit
en este caso.
Como ~/bin
está PATH
activado, ejecutar el comando llamará al script en lugar de a la gedit
aplicación "real" . Como resultado, You are not allowed to use this application
aparecerá el mismo mensaje
Redireccionando el gedit
comando(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 .bashrc
archivo:
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. .txt
Sin 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.desktop
archivo - 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 .desktop
archivo (como en 1.)
Si ejecuta el script a continuación con el argumento block
o 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.py
y 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.py
secuencia 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.