Posso configurar meus espaços de trabalho do xfce de maneira diferente?

4

Atualmente tenho quatro espaços de trabalho ('Main', 'Game', 'Work', 'Overflow'). Em uma configuração perfeita, o espaço de trabalho 'Jogo' teria atalhos (na área de trabalho ou em um painel) para jogos do Steam e individuais.

Mudar para "Trabalho" NÃO deve ter nada relacionado a jogos, mas sim links e atalhos do Google Docs para todos os meus arquivos relacionados ao trabalho.

Espaços de trabalho exclusivos são possíveis no xfce4?

    
por SCK 05.02.2015 / 09:59

2 respostas

4

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

  1. O script usa wmctrl :

    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, uma pasta chamada (exatamente):

    desktop_1
    desktop_2
    desktop_3
    desktop_4
    

  3. Crielançadoresparatodososaplicativos(paratodososespaçosdetrabalho)emsuaáreadetrabalhoecopie-osparaaspastascorrespondentes.

  4. Copieoscriptabaixoemumarquivovazio,salve-ocomochange_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)     
por Jacob Vlijm 06.02.2015 / 23:12
1

Alguns outros ambientes de desktop (como o KDE) oferecem isso nativamente, mas isso é suportado apenas parcialmente no XFCE.

O que funciona nativamente no XFCE:

  • Você pode definir um papel de parede diferente em cada espaço de trabalho, isso é totalmente suportado e pode ser facilmente configurado por meio da GUI de configurações da área de trabalho.
  • Você pode afetar um painel em um espaço de trabalho específico, mas não há opção de GUI para configurar o AFAIK, mas o script abaixo assumirá tudo no controle.

A solução que adotei:

  1. Crie um novo painel para cada espaço de trabalho. Você também pode criar painéis globais suplementares que serão exibidos em todas as áreas de trabalho (alguns elementos como a barra de notificação podem ser adicionados apenas uma vez, portanto, a única maneira de visualizá-los em cada espaço de trabalho é adicioná-los a um painel global). li>
  2. Configure e execute o script abaixo para distribuir cada painel local para sua própria área de trabalho.
  3. Configure o XFCE para executar o script a cada início.
  4. Configure os painéis como quiser.

Ao contrário da outra resposta, este script não será executado como um loop infinito que busca o status a cada segundo. Ele é executado apenas uma vez durante a abertura da sessão, a fim de associar cada painel local ao seu próprio espaço de trabalho, depois todo o restante é manipulado nativamente pelo gerenciador de janelas.

#! /bin/sh

# First panel to move
start=2

# Number of panels to move
count=$( wmctrl -d | wc -l )

desk=0
for winid in $( wmctrl -l | grep 'dom0 xfce4-panel$' \
    | awk "NR==$start,NR==$(( start + count - 1 )) { print \; }" )
do
    wmctrl -i -r $winid -b remove,sticky
    wmctrl -i -r $winid -t $desk
    desk=$(( desk + 1 ))
done
  1. Salve este script, por exemplo, como local-panels.sh em seu diretório pessoal e torne-o executável ( chmod u+x ~/local-panels.sh )

  2. Configure o script para atender às suas necessidades:

    • $start : O XFCE numera seus painéis, esse é o número do painel que você deseja tornar local. Aqui, o primeiro painel é mantido global, e o painel 2 e em diante são feitos locais para seus próprios espaços de trabalho.
    • $count : o número de painéis para tornar local. Por padrão, isso é igual ao número de espaços de trabalho, ou seja. um painel local diferente por área de trabalho.
    • $desk : O primeiro espaço de trabalho a ter um painel local. Por padrão, cada espaço de trabalho terá um painel local, mas definir essa variável como um valor mais alto permite que você não tenha um painel local nos primeiros espaços de trabalho, se desejar.
  3. Configure o XFCE para iniciar este script automaticamente na abertura da sessão: vá em Gerenciador de configurações do XFCE > Sessão e Inicialização , clique na aba Autostart do Aplicativo e depois no botão Adicionar para agendar a execução do script em cada abertura da sessão.

por WhiteWinterWolf 10.09.2016 / 17:31