Questão como tornar o docky disponível apenas em um espaço de trabalho?


Existe uma maneira de tornar o docky disponível apenas em um espaço de trabalho e não em qualquer outro espaço de trabalho no Ubuntu 14.04.


3
2017-11-24 10:06


origem




Respostas:


Um script de segundo plano para tornar o docky executado em áreas de trabalho específicas (ou não)

Baseado exatamente no mesmo mecanismo que esta resposta, abaixo de um script de fundo que inicia / pára o Docky lançador, dependendo do espaço de trabalho atual.

O mecanismo em si é praticamente testado. Dito isto, na questão ligada é testado com a configuração Lançadores diferentes da unidade e definindo diferentes papéis de parede por área de trabalho, não iniciando / parando Docky. Isso, no entanto, não faria diferença alguma, e nas horas que eu testei, correu sem um único erro.

Como usar

  1. O script precisa wmctrl:

    sudo apt-get install wmctrl
    
  2. Copie o script abaixo em um arquivo vazio, salve-o como docky_perworkspace.py

  3. Teste o script:

    • Começar Docky
    • Inicie o script com o comando:

      python3 /path/to/docky_perworkspace.py
      
    • Agora o Docky é executado em todos os espaços de trabalho. Navegue até os espaços de trabalho que você não faça quer Docky para aparecer e executar (enquanto no espaço de trabalho):

      pkill docky
      

    N.B. Usar pkill docky, não feche o docky a partir do seu próprio menu!

  4. Isso é muito bonito isso. Se você quiser alterar a configuração, simplesmente inicie ou mate o docky no espaço de trabalho que deseja executar ou não; o script vai lembrar sua preferência.
  5. Se tudo funcionar bem, adicione-o aos seus aplicativos de inicialização: Dash> Startup Applications> Add the command:

    /bin/bash -c "sleep 15&&python3 /path/to/docky_perworkspace.py"
    

O roteiro

#!/usr/bin/env python3
import subprocess    
import os
import time

datadir = os.environ["HOME"]+"/.config/docky_run"
if not os.path.exists(datadir):
    os.makedirs(datadir)
workspace_data = datadir+"/docky_set_"

def get_runs():
    try:
        subprocess.check_output(["pgrep", "docky"]).decode("utf-8")
        return True
    except:
        return False

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():
    # get the current viewport
    res = get_res()
    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_ws1 = current()
runs1 = get_runs()

while True:
    time.sleep(1)
    runs2 = get_runs()
    curr_ws2 = current()
    datafile = workspace_data+curr_ws2
    if curr_ws2 == curr_ws1:
        if runs2 != runs1:
            open(datafile, "wt").write(str(runs2))
    else:
        if not os.path.exists(datafile):
            open(datafile, "wt").write(str(runs2))
        else:
            curr_set = eval(open(datafile).read())
            if all([curr_set == True, runs2 == False]):
                subprocess.Popen(["docky"])
            elif all([curr_set == False, runs2 == True]):
                subprocess.Popen(["pkill", "docky"])           
    curr_ws1 = curr_ws2
    runs1 = get_runs()

Explicação

O script controla o espaço de trabalho atual (não importa quantas áreas de trabalho você tenha). Por área de trabalho, um arquivo é criado em /.config/docky_run, em que é "escrito" se docky deve estar presente ou não no espaço de trabalho de referência (True ou False)

Se você permanecer no mesmo espaço de trabalho, mas o docky é iniciado ou morto pid aparece ou termina), o script "entende" é você quem fez a alteração na área de trabalho de referência e o arquivo é atualizado.

Se o área de trabalho alterações no entanto, o script vê se o arquivo existe, lê e inicia ou mata o docky (ou não faz nada se não for necessário), de acordo com o conteúdo do arquivo e a situação atual. Se o arquivo ainda não existir (porque você está usando o espaço de trabalho pela primeira vez desde que iniciou o script pela primeira vez), o arquivo é criado e definido para a situação atual (última).

Como as configurações por espaço de trabalho são lembradas em arquivos, elas serão lembradas mesmo depois de uma reinicialização.


2
2017-07-29 15:27



funcionou. Mas depois que eu reinstalei o sistema operacional novamente, ele parou de funcionar. Existe alguma coisa que eu estaria faltando na nova instalação? - Shash
@Shash poderia ser que você esqueceu de instalar o wmctrl? Se não é isso que versão do Ubuntu você está? - Jacob Vlijm