Esta resposta é uma versão editada de esta resposta , mas com a diferença que esta é para Unity (em vez de XFCE) e é gerenciar um conjunto de (links para) pastas por área de trabalho, em vez de lançadores de aplicativos. No entanto, descomentando uma linha (veja mais abaixo), você também pode definir um conjunto diferente de lançadores de aplicativos por área de trabalho ao mesmo tempo.
O fato de ser da Unity torna o script um pouco mais complicado, mas, em princípio, funciona exatamente da mesma maneira.
Um exemplo:
espaço de trabalho 1:
espaçodetrabalho2(3,4):
Como disponibilizar pastas em uma maneira específica da área de trabalho
Na solução abaixo, as pastas reais não aparecem em sua área de trabalho (ou apenas em um dos espaços de trabalho, ou qualquer um de sua escolha), mas links para uma pasta (qualquer). Pelo seu comentário, entendo que é uma solução aceitável para você.
Isso torna efetivamente possível ter uma pasta (virtual) em um espaço de trabalho, mas não em outro. Um script de plano de fundo acompanha a área de trabalho atual e altera o conjunto de links na sua área de trabalho, de acordo com a configuração.
Como configurar
-
O script usa
wmctrl
para obter informações sobre o espaço de trabalho atual:sudo apt-get install wmctrl
-
Em seu diretório pessoal (não em um subdiretório, mas no nível "primeiro"), crie um diretório (exatamente) chamado:
desktop_data
dentro deste diretório, crie para cada um dos seus desktops (neste exemplo quatro), uma pasta chamada (exatamente):
desktop_1 desktop_2 desktop_3 desktop_4
Nessaspastas,crielinksparatodasaspastasquevocêdesejaexibirnaáreadetrabalhocorrespondente.Se,porexemplo,vocêquiserqueapasta
Documents
apareçanaviewport(espaçodetrabalho)1,crieumlink:ln-s~/Documents~/desktop_data/desktop_1/Documents
eassimpordiante,paratodasaspastasquevocêdesejaexibirna(s)área(s)detrabalhosegmentada(s):
NB Se você também quiser um conjunto de lançadores por desktop, adicione os lançadores à pasta e torne-os executáveis (!).
-
Copie o script abaixo em um arquivo vazio, salve-o como
change_desktop.py
. Teste-o rodando em uma janela de terminal o comando:python3 /path/to/change_desktop.py
Alterne espaços de trabalho como você costuma fazer, pois o script atua na troca de espaços de trabalho.
NB se você também quiser um conjunto de inicializadores, específico para os diferentes espaços de trabalho, descomente a linha:
if os.path.islink(subject) or subject.endswith(".desktop"):
mas certifique-se da linha:
# if os.path.islink(subject):
está comentado (coloque um
#
na frente da linha)
No exemplo acima, as pastas Documents
, Netwerkmap
e screen_notes
aparecem na área de trabalho 1, mas não na área de trabalho 2 (3,4)
Se tudo funcionar bem, adicione-o aos seus aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar
O script
#!/usr/bin/env python3
import subprocess
import os
import time
import shutil
home = os.environ["HOME"]
desktop_dir = home+"/"+"Bureaublad"
data_dirstr = home+"/desktop_data/desktop_"
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
# get resolution
xr = get("xrandr").split()
plus = 2 if xr[xr.index("connected")+1] == "primary" else 1
res = [int(n) for n in xr[xr.index("connected")+plus].split("+")[0].split("x")]
def get_dt():
# 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)
curr_dt1 = get_dt()
while True:
time.sleep(1)
curr_dt2 = get_dt()
# alter the set of links when workspace changes
if not curr_dt1 == curr_dt2:
datafolder = data_dirstr+curr_dt2
for f in os.listdir(desktop_dir):
subject = desktop_dir+"/"+f
# uncomment one of the two lines below
if os.path.islink(subject): # uncomment for only folders (links to) per workspace
# if os.path.islink(subject) or subject.endswith(".desktop") : # uncomment for folders and .desktop files per workspace
#
os.remove(subject)
for f in os.listdir(datafolder):
subject = datafolder+"/"+f; target = desktop_dir+"/"+f
if os.path.islink(subject):
os.symlink(os.readlink(subject), target)
else:
shutil.copy(subject,target)
curr_dt1 = curr_dt2
Breve explicação
Se o script iniciar, ele verifica a resolução da tela. Em seguida, ele verifica uma vez por segundo qual é a área de trabalho atual e vê se havia uma área de trabalho switch . Nesse caso, copia os links que você colocou na pasta correspondente em ~/desktop_data
para a área de trabalho e remove os links que não estão.
Nota importante
Na sua versão localizada do Ubuntu, Desktop
pode ter um nome diferente ("Bureaublad" em holandês, por exemplo). Em caso afirmativo, altere o script da linha:
desktop_dir = home+"/"+"Desktop"
para refletir seu nome localizado da pasta Desktop
.