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;
-
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 scriptblock_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.