Cómo bloquear aplicaciones específicas para que no se abran en cuentas específicas

Cómo bloquear ciertas aplicaciones para que no se abran en ciertas cuentas (por ejemplo: para que la cuenta John no abra Firefox o Gimp). Se supone que esto es para la GUI y no para el terminal y solo se aplicaría a usuarios específicos, por lo que, por ejemplo, el usuario X puede abrir Gimp pero no Firefox, el usuario Z puede abrir el Centro de software pero no VirtualBox.

Qué manera buena y fácil es hacer esto para un nuevo usuario de Ubuntu.

A. Opciones de configuración

Si se pretende que el locking impida a los usuarios no tan experimentados el uso de ciertas aplicaciones, editar (una copia local de) el archivo de escritorio de la aplicación (como se describe en [1] ) es probablemente la forma más rápida y sencilla.
Se pueden hacer algunas cosas adicionales para crear una barrera adicional y / o para evitar el hecho de que el usuario descubra muy fácilmente lo que hemos hecho para bloquear la aplicación ( [2] y [3] ).

La configuración no es apta para situaciones desatendidas con usuarios experimentados. En situaciones “caseras” con usuarios promedio será suficiente en muchos casos.

1.Ejemplo para bloquear gedit editando (una versión local de) el archivo .desktop

  • Copie el archivo de escritorio de la aplicación en /usr/share/applications a ~/.local/share/applications :

     cp /usr/share/applications/gedit.desktop ~/.local/share/applications/gedit.desktop 
  • Edite el archivo: ábralo con gedit (mientras todavía puede :)) 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 (posibles) accesos directos, para evitar iniciar la aplicación desde uno de los accesos directos:

      eliminar la línea (para el ejemplo gedit):

       Actions=Window;Document; 

      y la (s) sección (es) 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:

    introduzca la descripción de la imagen aquí

    • Ocultar la aplicación de Dash (medida opcional)

      Luego de realizar los cambios anteriores, aún con el archivo gedit.desktop 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 archivo .desktop local de ~/.local/share/applications

2. Hacerlo un poco más difícil de descubrir

Mientras que, después de editar el archivo .desktop , la aplicación ya no se mostrará en Dash, la búsqueda en Dash seguirá mostrando nuestro archivo gedit.desktop recién creado, lo que podría dar una idea de cómo escapar del bloque de la aplicación.

introduzca la descripción de la imagen aquí

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 excluir de la búsqueda.

introduzca la descripción de la imagen aquí

3. (No) usando el terminal / línea de comando

Redirigiendo el comando gedit (1)

La edición del archivo .desktop evita el uso de la aplicación desde Dash, pero si el usuario conoce la combinación Alt F2 y el comando para ejecutar la aplicación, todavía podrá iniciar la aplicación, al igual que con el terminal. Una medida adicional 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' 

Hazlo ejecutable y nómbrelo después de la aplicación; gedit en este caso.

Como ~/bin está en PATH , ejecutar el comando llamará al script en lugar de a la aplicación gedit “real”. Como resultado, You are not allowed to use this application Aparecerá un mensaje.

Redirigiendo el comando gedit (2)

Otra forma (con un efecto más limitado, ver nota) de redirigir el comando de la aplicación es agregar un alias al archivo .bashrc :

 gedit ~/.bashrc 

añadir la línea (ejemplo gedit):

 alias gedit='zenity --info --text "You are not allowed to use this application"' 

Nota : esto solo debe usarse como medida adicional, ya que solo impide que la aplicación sea llamada directamente desde el terminal. Sin embargo, al hacer doble clic en un archivo (por ejemplo) .txt se abrirá la aplicación.

Hacer el uso de terminal difícil o imposible en absoluto.

Para evitar el uso del terminal, también puede hacer el mismo truco en el archivo gnome-terminal.desktop que en [1] , y / o cambiar la combinación de teclas de acceso directo predeterminada para ejecutar el terminal (Configuración del sistema> “Teclado” > “Atajos”> “Entrantes”)


4. Una pequeña herramienta para crear (o deshacer) automáticamente una versión editada del archivo .desktop (como en 1.)

Si ejecuta la secuencia de comandos a continuación con el block argumento o unblock ( debe ejecutarlo con cualquiera de los dos), se le presentará una lista con los archivos de escritorio (globales), que representan sus aplicaciones instaladas:

introduzca la descripción de la imagen aquí

Elija una, y su aplicación se bloquea o desbloquea, según el argumento con el que la ejecute.

Nota

Es posible 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 por:

 python3 /path/to/block_apps.py block 

o

 python3 /path/to/block_apps.py unblock 

B. Opción (es) escrita (s)

El locking de ciertas aplicaciones también se puede hacer ejecutando un script en segundo plano. La secuencia de comandos tendría que realizar 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 un argumento, por ejemplo (suponiendo que hizo el script ejecutable):

  /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 des-comentar una de las líneas:

 # action = "xrandr --output "+screen+" --brightness 0" 

o

 # action = "xrandr --output "+screen+" --rotate inverted" 

El guión ya sea:

oscurece la pantalla ( action = "xrandr --output "+screen+" --brightness 0" ):

introduzca la descripción de la imagen aquí

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

introduzca la descripción de la imagen aquí

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 , block_apps.py ejecutable
  • ejecutarlo por el comando:

     /path/to/block_apps.py    etc... 
  • Importante
    Para eliminar la block_apps.py comandos block_apps.py y restaurar la configuración “normal”, use la secuencia de comandos a continuación (haga que esté disponible con 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] restre_1 = "xrandr --output "+screen+" --brightness 1" restre_2 = "xrandr --output "+screen+" --rotate normal" for item in [restre_1, restre_2]: subprocess.Popen(["/bin/bash", "-c", item]) 

Como siempre con las secuencias de comandos, cópielo en un archivo vacío, guárdelo como kill_blockapps.py , haga que sea ejecutable y ejecútelo mediante:

 /path/to/kill_blockapps.py 

Probablemente querrá tener este botón debajo de una tecla de acceso directo: Elija: Configuración del sistema> “Teclado”> “Atajos”> “Atajos personalizados”. Haga clic en “+” y agregue el comando como se muestra arriba.