Cada worksapce com seus próprios launchers e folders

2

Eu tenho 4 espaços de trabalho configurados no compiz. Gostaria de saber se existe uma maneira de ter pastas exclusivamente na área de trabalho principal (1)? Eu gostaria de manter os outros claros para ver wallpapers.

Ubuntu 14.04 x64

    
por E_Angel 13.03.2015 / 00:50

2 respostas

2

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

  1. O script usa wmctrl para obter informações sobre o espaço de trabalho atual:

    sudo apt-get install wmctrl
    
  2. 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
    

  3. Nessaspastas,crielinksparatodasaspastasquevocêdesejaexibirnaáreadetrabalhocorrespondente.Se,porexemplo,vocêquiserqueapastaDocumentsapareç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 (!).

  4. 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 .

    
por Jacob Vlijm 14.03.2015 / 08:58
0

Desculpe, mas esta funcionalidade não é suportada atualmente. Você poderia tentar jogar com softwares de terceiros, como screenlets , mas eu não recomendaria isso.

    
por Piotr Dajlido 13.03.2015 / 04:52