Como impedir que aplicativos específicos sejam abertos em contas específicas

13

Como bloquear a abertura de determinados aplicativos em determinadas contas (por exemplo: parar a conta John de abrir o Firefox ou o Gimp). Presume-se que isso seja para a GUI e não para o terminal e se aplique apenas a usuários específicos, assim, por exemplo, o usuário X pode abrir o Gimp, mas não o Firefox, o usuário Z pode abrir o Software Center, mas não o VirtualBox.

De que maneira boa e fácil existe para fazer isso para um novo usuário do Ubuntu.

    
por Luis Alvarado 12.11.2014 / 03:47

1 resposta

15

Opções de configuração

Se o bloqueio tiver o objetivo de impedir que usuários não tão experientes utilizem determinados aplicativos, a edição (uma cópia local) do arquivo da área de trabalho do aplicativo (como descrito em [1] ) é provavelmente a maneira mais rápida e fácil. > Algumas coisas adicionais podem ser feitas para criar uma barreira extra e / ou para impedir que o usuário descubra com muita facilidade o que fizemos para bloquear o aplicativo ( [2] e [3] ).

A configuração não é adequada para situações não supervisionadas com usuários experientes. Em situações "domésticas" com usuários comuns, isso será suficiente em muitos casos.

1.Exemplo para bloquear o gedit editando (uma versão local do) o arquivo .desktop

  • Copie o arquivo da área de trabalho do aplicativo em /usr/share/applications para ~/.local/share/applications :

    cp /usr/share/applications/gedit.desktop ~/.local/share/applications/gedit.desktop
    
  • Edite o arquivo: abra-o com o gedit (enquanto você ainda pode :)) arrastando-o sobre uma janela aberta do gedit.

    • substitua a linha

      Exec=gedit %U
      

      por:

      Exec=zenity --info --text 'You are not allowed to use this application'
      
    • remova os (possíveis) atalhos, para evitar iniciar o aplicativo em um dos atalhos:

      remova a linha (para o exemplo do gedit):

      Actions=Window;Document;
      

      e a (s) seção (ões) como:

      [Desktop Action Window]
      Name=Open a New Window
      Exec=gedit --new-window
      OnlyShowIn=Unity;
      
    A partir de então (após o logout / login) o usuário verá esta mensagem se ele tentar abrir o gedit do Dash ou tentar abrir um arquivo que esteja vinculado ao aplicativo:

    • Esconder o aplicativo do Dash (medida opcional)

      Depois que fizemos as alterações acima, com o arquivo gedit.desktop ainda aberto, podemos adicionar uma linha adicional:

      NoDisplay=true
      

      Ao adicionar esta linha, gedit nem será exibido no Dash.

    Desfazer

    Para desfazer, basta remover o arquivo local .desktop de ~/.local/share/applications

2.Fazendo um pouco mais difícil descobrir

Enquanto, depois de editar o arquivo .desktop , o aplicativo não aparecerá mais no Dash, o pesquisa ainda mostrará o arquivo gedit.desktop recém-criado, que pode, sem querer, dar uma dica como escapar do bloco de aplicação.

Para evitar isso, devemos excluir o diretório ~/.local/share/applications da pesquisa do Dash e limpar o histórico de pesquisa.
Abrir as configurações do sistema & gt; "Segurança e privacidade" & gt; "Arquivos e aplicativos" (guia). Adicione o diretório ~/.local/share/applications à lista para excluir da pesquisa.

3. (Não) usando o terminal / linha de comando

Redirecionando o comando gedit (1)

Editar o arquivo .desktop evita usar o aplicativo do Dash, mas se o usuário souber a combinação Alt F2 e o comando para executar o aplicativo, ele ou ela ainda será capaz de iniciar o aplicativo, assim como com o terminal. Um bom e fácil de configurar medida extra é criar (se não existir ainda) o diretório ~/bin e criar um pequeno script no diretório:

#!/bin/bash
zenity --info --text 'You are not allowed to use this application'

Torne-o executável e nomeie-o após o aplicativo; gedit neste caso.

Como ~/bin está em PATH , a execução do comando chamará o script em vez do aplicativo "real" gedit . Como resultado, a mesma You are not allowed to use this application -message aparecerá

Redirecionando o comando gedit (2)

Outra maneira (com efeito mais limitado, veja a nota) de redirecionar o comando do aplicativo é adicionar um alias ao arquivo .bashrc :

gedit ~/.bashrc

adicione a linha (exemplo do gedit):

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

Nota : esta é apenas para ser usada como uma medida extra, pois só impede que o aplicativo seja chamado diretamente do terminal. Clicar duas vezes em um arquivo (por exemplo) .txt ainda abrirá o aplicativo.

Torne o uso do terminal difícil ou impossível de todo

Para evitar o uso do terminal, você também pode fazer o mesmo truque no arquivo gnome-terminal.desktop - como em [1] e / ou alterar a combinação de teclas de atalho padrão para executar o terminal (Configurações do sistema & gt; " Teclado "& gt;" Atalhos "& gt;" Entradas ")

4. Uma pequena ferramenta para criar automaticamente (ou desfazer) uma versão editada do arquivo .desktop (como em 1.)

Se você executar o script abaixo com o argumento block ou unblock (você deve executá-lo com qualquer um deles), será apresentada uma lista com arquivos da área de trabalho (globais), representando seus aplicativos instalados:

Escolha um e seu aplicativo será bloqueado ou desbloqueado, dependendo do argumento em que você o executar.

Nota

Você pode ter que sair / fazer login para que funcione.

O 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)

Copie o script em um arquivo vazio, salve-o como block_apps.py e execute-o:

python3 /path/to/block_apps.py block

ou

python3 /path/to/block_apps.py unblock

B. Opção (s) com script

O bloqueio de determinados aplicativos também pode ser feito executando um script em segundo plano.O script teria que executar determinadas ações se um dos aplicativos "proibidos" for executado.

1. Script para manipular a tela quando aplicativos proibidos são usados.

O script abaixo oferece uma maneira flexível de bloquear aplicativos definidos pelo usuário. Ele é executado com um comando simples, com os aplicativos proibidos como um argumento, por exemplo, (supondo que você fez o script executável):

    /path/to/block_apps.py firefox gedit gnome-terminal

A vantagem de bloquear aplicativos como esse é que ele é flexível; mesmo dentro de uma conta, configurações diferentes podem ser usadas, simplesmente usando outros aplicativos como argumento.

O que faz

Ao não comentar uma das linhas:

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

ou

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

O script ou:

escurece a tela ( action = "xrandr --output "+screen+" --brightness 0" ):

ou vira de cabeça para baixo ( action = "xrandr --output "+screen+" --rotate inverted" ):
( quem disse que o Unity não permite colocar o lançador à direita? )

O 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)

Como usar

  • Copie o script em um arquivo vazio, salve-o como block_apps.py , torne-o executável
  • execute-o pelo comando:

    /path/to/block_apps.py <application_1> <application_2> <application_3> etc...
    
  • Importante
    Para matar o script block_apps.py e restaurar as configurações "normais", use o script abaixo (disponibilizá-lo em uma tecla de atalho combinação):

#!/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 sempre com scripts, copie-o em um arquivo vazio, salve-o como kill_blockapps.py , torne-o executável e execute-o por:

/path/to/kill_blockapps.py

Provavelmente, você desejará ter um com uma tecla de atalho: Escolha: Configurações do sistema & gt; "Teclado" & gt; "Atalhos" & gt; "Atalhos personalizados". Clique no botão "+" e adicione o comando como acima.

    
por Jacob Vlijm 12.11.2014 / 20:55

Tags