Como tornar aplicativos não rastreáveis em (outras) áreas de trabalho
Usando xdotool
do windowunmap
, é possível ocultar uma janela completamente. A janela, nem sua aplicação, ocorre mais no ícone do inicializador e nem está mais listada na saída de wmctrl
.
Teoricamente, isso poderia ser conectado ao "motor do espaço de trabalho", que era usado em este e esta resposta. Essa teria sido a solução mais elegante.
No entanto, o processo de apenas esconder janelas em outras áreas de trabalho e levantar automaticamente as que estão na área de trabalho atual é muito exigente para usar em um contexto em andamento script (por enquanto), e não improvável "para pegar um resfriado" também. Como as janelas são perdidas para o bem em caso de erros, decidi, portanto, não oferecer o procedimento como um processo automático (em segundo plano).
Se, no entanto, esta resposta for útil ou não, depende da situação e da razão pela qual você gostaria de ocultar ícones de aplicativos, sendo executados em outras áreas de trabalho; a decisão é sua.
A solução; o que é e como funciona na prática
-
Um script, disponível sob uma tecla de atalho, aparentemente fazendo com que todas as janelas do espaço de trabalho atual (e, portanto, aplicativos) desapareçam completamente. Isso significa que o ícone do aplicativo no iniciador do Unity não mostra nenhuma atividade do aplicativo:
Três aplicativos em execução: Depoisdepressionaratecladeatalho:
-
Pressionando a combinação de teclas do schortcut novamente, as janelas e seus aplicativos irão reaparecer.
- Como a combinação de teclas ocultará apenas as janelas e aplicativos da área de trabalho atual , você poderá alternar subsequentemente para outra área de trabalho sem sinal do que está (oculto) na área de trabalho atual.
- O unhiding está concluído (apenas) no espaço de trabalho atual, portanto, em resumo, o processo de ocultar e exibir é totalmente independente por espaço de trabalho .
O script
#!/usr/bin/env python3
import subprocess
import os
import time
datadir = os.environ["HOME"]+"/.config/maptoggle"
if not os.path.exists(datadir):
os.makedirs(datadir)
workspace_data = datadir+"/wspacedata_"
def get_wlist(res):
res = get_res()
try:
wlist = [l.split() for l in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
return [w for w in wlist if all([
0 < int(w[2]) < res[0],
0 < int(w[3]) < res[1],
"_NET_WM_WINDOW_TYPE_NORMAL" in subprocess.check_output(["xprop", "-id", w[0]]).decode("utf-8"),
])]
except subprocess.CalledProcessError:
pass
def get_res():
# get resolution
xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
pos = xr.index("current")
return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
def current(res):
# get the current viewport
vp_data = subprocess.check_output(
["wmctrl", "-d"]
).decode("utf-8").split()
dt = [int(n) for n in vp_data[3].split("x")]
cols = int(dt[0]/res[0])
curr_vpdata = [int(n) for n in vp_data[5].split(",")]
curr_col = int(curr_vpdata[0]/res[0])+1
curr_row = int(curr_vpdata[1]/res[1])
return str(curr_col+curr_row*cols)
res = get_res()
try:
f = workspace_data+current(res)
wlist = eval(open(f).read().strip())
for w in wlist:
subprocess.Popen(["xdotool", "windowmap", w[0]])
os.remove(f)
except FileNotFoundError:
current_windows = get_wlist(res)
open(f, "wt").write(str(current_windows))
for w in current_windows:
subprocess.Popen(["xdotool", "windowunmap", w[0]])
Como usar
-
O script precisa dos dois
wmctrl
exdotool
:sudo apt-get install wmctrl xdotool
- Copie o script em um arquivo vazio, salve-o como
toggle_visibility.py
-
Teste- execute o script: em uma janela de terminal, execute o comando:
python3 /path/to/toggle_visibility.py
Agora abra uma nova janela de terminal (já que a primeira aparentemente desapareceu da face da terra) e execute o mesmo comando novamente. Todas as janelas devem reaparecer.
NB : verifique se você não tem janelas "valiosas" abertas durante o teste
-
Se tudo funcionar bem, adicione o comando a uma combinação de teclas de atalho: escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:
python3 /path/to/toggle_visibility.py
Explicação
Como dito, o script usa xdotool
' windowunmap
' para (completamente) ocultar as janelas e os aplicativos aos quais pertencem. O script:
- lê qual é a área de trabalho atual
- lê as janelas, que existem na área de trabalho atual (somente)
- grava a lista de janelas em um arquivo com o nome da área de trabalho atual
- oculta as janelas
Na próxima execução, o script:
- verifica se o arquivo, correspondente a área de trabalho atual existe
- em caso afirmativo, lê a lista de janelas e as janelas.
alternando assim a visibilidade de janelas e aplicativos no espaço de trabalho atual.