A. Opções configuracionais
Se o bloqueio tiver como objetivo impedir que usuários não tão experientes usem certos aplicativos, editar (uma cópia local) do arquivo da área de trabalho do aplicativo (conforme 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 impedir o fato de o usuário descobrir com muita facilidade o que fizemos para bloquear o aplicativo ( [2]
e [3]
).
A configuração não é adequada para situações autônomas com usuários experientes. Em situações "domésticas" com usuários médios, será suficiente em muitos casos.
1.Exemplo para bloquear o gedit editando (uma versão local) do arquivo .desktop
Copiar o arquivo do desktop do aplicativo em /usr/share/applications
que ~/.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.
substituir a linha
Exec=gedit %U
por:
Exec=zenity --info --text 'You are not allowed to use this application'
remova os atalhos (possíveis) para impedir iniciar o aplicativo a partir de um dos atalhos:
remova a linha (para o exemplo do gedit):
Actions=Window;Document;
e as seçõ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 / logon), o usuário verá esta mensagem se tentar abrir o gedit a partir do Dash ou tentar abrir um arquivo vinculado ao aplicativo:
Ocultando o aplicativo do Dash (medida opcional)
Depois de fazer as alterações acima, com o gedit.desktop
arquivo ainda aberto, podemos adicionar uma linha adicional:
NoDisplay=true
Ao adicionar esta linha, gedit
nem aparecerá no Dash.
Desfazer
Para desfazer, basta remover o .desktop
arquivo local de~/.local/share/applications
2.Fazer um pouco mais difícil de descobrir
Embora, depois de editar o .desktop
arquivo, o aplicativo não apareça mais no Dash, a pesquisa do Dash ainda mostrará nosso gedit.desktop
arquivo recém-criado , que pode, sem querer, dar uma dica de como escapar do bloco do aplicativo.
Para evitar isso, devemos excluir o diretório ~/.local/share/applications
da pesquisa Dash e limpar o histórico de pesquisas.
Abra Configurações do sistema> "Segurança e privacidade"> "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 gedit
comando(1)
A edição do .desktop
arquivo impede o uso do aplicativo pelo Dash, mas se o usuário conhecer a AltF2combinação e o comando para executá-lo, ele ainda poderá iniciar o aplicativo, assim como no terminal. Uma medida extra agradável e fácil de configurar é criar (se ainda não existir) 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
nesse caso.
Como ~/bin
está PATH
, a execução do comando chamará o script em vez do gedit
aplicativo "real" . Como resultado, a mesma You are not allowed to use this application
mensagem aparecerá
Redirecionando o gedit
comando(2)
Outra maneira (com efeito mais limitado, consulte a nota) de redirecionar o comando do aplicativo é adicionar um alias ao .bashrc
arquivo:
gedit ~/.bashrc
adicione a linha (exemplo do gedit):
alias gedit='zenity --info --text "You are not allowed to use this application"'
Nota : isso deve ser usado apenas como uma medida extra, pois impede apenas que o aplicativo seja chamado diretamente do terminal. Clicar duas vezes em um .txt
arquivo (por exemplo) ainda abrirá o aplicativo.
Tornar difícil ou impossível a utilização do terminal
Para impedir o uso do terminal, você também pode executar o mesmo truque no gnome-terminal.desktop
arquivo - como em [1]
, e / ou alterar a combinação de teclas de atalho padrão para executar o terminal (Configurações do sistema> "Teclado"> "Atalhos"> "Iniciantes" )
4. Uma pequena ferramenta para criar (ou desfazer) automaticamente uma versão editada do .desktop
arquivo (como em 1.)
Se você executar o script abaixo com o argumento block
ou unblock
(você deve executá-lo com qualquer um), será apresentada uma lista com os arquivos da área de trabalho (global), representando seus aplicativos instalados:
Escolha uma e seu aplicativo é bloqueado ou desbloqueado, dependendo do argumento com o qual você o executa.
Nota
Você pode precisar sair / fazer login para fazê-lo funcionar.
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 certos aplicativos também pode ser feito executando um script em segundo plano. O script precisaria executar determinadas ações se um dos aplicativos "proibidos" fosse 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 roda com um comando simples, com os aplicativos proibidos como argumento, por exemplo (supondo que você tenha feito 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 em 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:
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 iniciador à 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 para 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 block_apps.py
script e restaurar as configurações "normais", use o script abaixo (disponibilize-o em uma combinação de teclas de atalho):
#!/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 para um arquivo vazio, salve-o como kill_blockapps.py
, torne-o executável e execute-o da seguinte maneira:
/path/to/kill_blockapps.py
Você provavelmente desejará colocá-lo sob uma tecla de atalho: Escolha: Configurações do sistema> "Teclado"> "Atalhos"> "Atalhos personalizados". Clique no "+" e adicione o comando como acima.