Se limitarmos a configuração para ter um conjunto diferente de iniciadores por desktop, não é muito complicado. O que precisamos é de um script, rodando em segundo plano para acompanhar o espaço de trabalho atual e automaticamente alterar o conjunto de lançadores de acordo.
1. Um conjunto de lançadores por espaço de trabalho
Digamos que eu tenha quatro espaços de trabalho, quero que os seguintes lançadores estejam disponíveis nas diferentes áreas de trabalho:
espaço de trabalho 1 > espaço de trabalho 2 > espaço de trabalho 3 > espaço de trabalho 4 >
- Espaço de trabalho 1: Firefox / ocioso
- Área de trabalho 2: Editor de imagem Gcolor2 / Gimp / Inkskape
- Espaço de trabalho 3: Abiword / Gnumeric / Mail Reader
- Espaço de trabalho 4: Minas / Sudoku
Como configurar
-
O script usa
wmctrl
: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, uma pasta chamada (exatamente):
desktop_1 desktop_2 desktop_3 desktop_4
Crielançadoresparatodososaplicativos(paratodososespaçosdetrabalho)emsuaáreadetrabalhoecopie-osparaaspastascorrespondentes.
Copieoscriptabaixoemumarquivovazio,salve-ocomo
change_launchers.py
.Teste-orodandoemumajaneladeterminalocomando:python3/path/to/change_launchers.py
Setudofuncionarbem,adicione-oaosseusaplicativosdeinicialização
Oscript
#!/usr/bin/env python3 import subprocess import os import time import shutil home = os.environ["HOME"] desktop_dir = home+"/"+"Desktop" data_dirstr = home+"/desktop_data/desktop_" get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8") def get_desktop(): return [l for l in get("wmctrl -d").splitlines() if "*" in l][0].split()[-1] while True: curr_dt1 = get_desktop() time.sleep(1) curr_dt2 = get_desktop() # alter the set of launchers when workspace changes if not curr_dt1 == curr_dt2: datafolder = data_dirstr+curr_dt2 for f in [f for f in os.listdir(desktop_dir)if f.endswith(".desktop")]: subject = desktop_dir+"/"+f os.remove(subject) for f in os.listdir(datafolder): subject = datafolder+"/"+f; target = desktop_dir+"/"+f shutil.copyfile(subject, target) subprocess.call(["/bin/bash", "-c", "chmod +x "+target])
Nota
Em diferentes versões localizadas do Ubuntu, o nome da pasta "Desktop" pode ser diferente (em holandês: "Bureaublad"). Se na sua versão do Ubuntu o nome da pasta da área de trabalho não for "Desktop", altere-o na linha:
desktop_dir = home+"/"+"Desktop"
2. Ampliando possibilidades, lançadores e links
Se adicionarmos algumas linhas ao script, as opções de configuração por área de trabalho podem ser estendidas com um conjunto de alterações de links para diretórios :
Em um espaço de trabalho, temos um, e. um link para a pasta Documents , combinado com os lançadores de aplicativos de escritório:
Emoutroespaçodetrabalho,temosumlinkparaapastaImagens,combinadacomlançadoresdeeditoresdeimagem:
Como configurar
A configuração é praticamente a mesma da opção 1, mas, além disso, nas pastas de dados (consulte a opção 1), crie links para pastas (usando ln -s <source> <destination>
) que você gostaria de disponibilizar na área de trabalho correspondente:
Oscript
#!/usr/bin/env python3
import subprocess
import os
import time
import shutil
home = os.environ["HOME"]
desktop_dir = home+"/"+"Desktop"
data_dirstr = home+"/desktop_data/desktop_"
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def get_desktop():
return [l for l in get("wmctrl -d").splitlines() if "*" in l][0].split()[-1]
while True:
curr_dt1 = get_desktop()
time.sleep(1)
curr_dt2 = get_desktop()
# alter the set of launchers & 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
if os.path.islink(subject) or subject.endswith(".desktop") :
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)