Configurando um Unity Launcher diferente por área de trabalho:
1. 2. 3. 4.
A solução abaixo facilita a possibilidade de ter um conjunto diferente de ícones do iniciador por área de trabalho, independentemente de quantos espaços de trabalho você tenha.
A configuração inclui duas partes:
Uma combinação de teclas de atalho para "lembrar" o conjunto de ícones do iniciador da área de trabalho atual.
Um script para ser executado em segundo plano, mantendo o controle da área de trabalho atual e definindo o Unity Launcher correspondente. Ele age sempre que o usuário alterna a área de trabalho.
Como funciona
Dois pequenos scripts estão envolvidos:
O primeiro script faz uma coisa simples: grava o conteúdo do iniciador atual em um arquivo (oculto) no diretório inicial, nomeado (numerado) após o seu espaço de trabalho atual.
O segundo script fica de olho em qual é o espaço de trabalho atual. Se houver uma alteração no espaço de trabalho , o script verá se existe um arquivo de dados correspondente (iniciador-) (criado pelo primeiro script). Nesse caso, ele lê o arquivo e altera o Unity Launcher, conforme lembrado no arquivo.
É isso aí.
Como configurar
O script precisa wmctrl
ser instalado:
sudo apt-get install wmctrl
Crie um diretório no qual os dois scripts serão armazenados. É importante que os dois scripts sejam mantidos juntos em um diretório, pois compartilham a funcionalidade e um importa do outro. Pelo mesmo motivo, é importante que você os nomeie exatamente como indicado abaixo.
Copie cada um dos scripts abaixo em um arquivo vazio (diferente), salve-o no diretório (criado em 2.
), exatamente chamado como:
set_workspace.py
#!/usr/bin/env python3
import subprocess
import os
workspace_data = os.environ["HOME"]+"/.launcher_data_"
key = ["gsettings get ", "gsettings set ", "com.canonical.Unity.Launcher favorites"]
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)
def remember_current():
currlauncher = subprocess.check_output(["/bin/bash", "-c", key[0]+key[2]]).decode("utf-8").strip()
f = workspace_data+current()
open(f, "w").write(currlauncher)
if __name__ == "__main__":
remember_current()
launcher_perworkspace.py
#!/usr/bin/env python3
import subprocess
import set_workspace
import time
workspace_data = set_workspace.workspace_data
key = set_workspace.key
def check_datafile(desktop):
f = workspace_data+str(desktop)
try:
new_launcher = open(f).read()
command = key[1]+key[2]+' "'+str(new_launcher)+'"'
subprocess.Popen(["/bin/bash", "-c", command])
except FileNotFoundError:
pass
curr_dt1 = set_workspace.current()
check_datafile(curr_dt1)
while True:
time.sleep(1)
curr_dt2 = set_workspace.current()
if curr_dt2 != curr_dt1:
check_datafile(curr_dt2)
curr_dt1 = curr_dt2
Adicione o primeiro script ( set_workspace.py
) a uma combinação de teclas de atalho de sua escolha: Configurações do sistema> "Teclado"> "Atalhos"> "Atalhos personalizados". Clique no "+" e adicione o comando:
python3 /path/to/set_workspace.py
Execute a combinação de teclas e veja se um arquivo, como:, .launcher_data_3
é criado em seu diretório pessoal. Você provavelmente precisará pressionar Ctrl+ Hpara tornar o arquivo visível (os arquivos que começam com a .
são invisíveis por padrão).
Navegue pelos espaços de trabalho e repita o procedimento: defina uma combinação de ícones do iniciador e pressione a combinação de teclas para "lembrar" o conjunto desse espaço de trabalho específico.
Você está praticamente pronto agora. Teste o script em segundo plano com o comando (a partir de uma janela do terminal, mantenha-o em execução):
python3 /path/to/launcher_perworkspace.py
Se tudo funcionar bem, e o iniciador alternar por área de trabalho, adicione o seguinte comando aos aplicativos de Inicialização: Dash> Startup Applications> Add:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
Notas
- Se você deseja alterar o conjunto de ícones do iniciador para um espaço de trabalho específico, simplesmente navegue até o espaço de trabalho, adicione / remova ícones como desejar e pressione a combinação de teclas (não é necessário reiniciar o script em segundo plano).
- Pelo (s) comentário (s), sinto que há algum mal-entendido no atalho para lembrar o Launcher atual do espaço de trabalho atual. Você só precisa de um atalho de teclado para "salvar" o iniciador atual do espaço de trabalho atual. Funcionará exatamente da mesma forma, não importa em que área de trabalho você esteja. O próprio script determinará qual é o espaço de trabalho atual.
Editar
Pelo seu comentário, entendo que você não tem certeza de executar o (s) script (s) e tem medo de estragar seu lançador atual.
Tenho certeza de que há muito (ou pouco :) respeito pelo que o script está fazendo. No entanto, você pode simplesmente fazer backup do atual Unity Launcher com o comando:
printf 'gsettings set com.canonical.Unity.Launcher favorites "' > ~/launcher_output&&printf "$(gsettings get com.canonical.Unity.Launcher favorites)">>~/launcher_output&&printf '"'>>~/launcher_output
Isso criará um arquivo ~/launcher_output
, contendo o comando completo para restaurar o Unity Launcher à situação inicial. Em caso de emergência, basta copiar o conteúdo do arquivo e colá-lo no terminal.
Mas, novamente, é muito improvável que você estrague o seu iniciador, a menos que altere o script manualmente.
EDIÇÃO IMPORTANTE (2)
Conforme solicitado em um comentário, por meio deste, uma versão que é executada sem a necessidade de usar nenhuma combinação de atalhos; basta executar o script e começar a configurar seus lançadores nos espaços de trabalho específicos. O script criará arquivos (invisíveis) em seu diretório pessoal, para lembrar seu conjunto de ativadores (Unity-) nos diferentes espaços de trabalho.
Eu tentei isso na "versão 1" do script, mas sempre "incorporar" as duas verificações do iniciador entre duas verificações do espaço de trabalho acabou sendo o truque para evitar comportamentos indesejados (salvando dados incorretos) ao mover-se rapidamente pelos espaços de trabalho.
Como usar
Como a primeira versão, este script usa wmctrl
:
sudo apt-get install wmctrl
Copie o script em um arquivo vazio, salve-o como launcher_toworkspace.py
Execute-o com o comando:
python3 /path/to/launcher_toworkspace.py
Se funcionar como esperado, adicione o seguinte comando aos aplicativos de inicialização:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_toworkspace.py"
O script
#!/usr/bin/env python3
import subprocess
import os
import time
datadir = os.environ["HOME"]+"/.config/lswitcher"
if not os.path.exists(datadir):
os.makedirs(datadir)
workspace_data = datadir+"/launcher_data_"
key = [
"gsettings get ",
"gsettings set ",
"com.canonical.Unity.Launcher favorites",
]
def get_launcher():
return subprocess.check_output(
["/bin/bash", "-c", key[0]+key[2]]
).decode("utf-8").strip()
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()
currlauncher1 = get_launcher()
while True:
time.sleep(1)
currlauncher2 = get_launcher()
curr_ws2 = current()
datafile = workspace_data+curr_ws2
if curr_ws2 == curr_ws1:
if currlauncher2 != currlauncher1:
open(datafile, "wt").write(currlauncher2)
else:
if not os.path.exists(datafile):
open(datafile, "wt").write(currlauncher2)
else:
curr_set = open(datafile).read()
command = key[1]+key[2]+' "'+str(curr_set)+'"'
subprocess.Popen(["/bin/bash", "-c", command])
curr_ws1 = curr_ws2
currlauncher1 = get_launcher()
Nota
Se você configurar seus espaços de trabalho com a versão anterior do script, eles também deverão funcionar para esta versão.
PPA
De acordo com 23/04/2015, a boa pergunta de Dennis J e o incentivo de Parto levaram à criação de um ppa
para o script, abordado no webupd8 , incluindo uma GUI para gerenciá-lo.
ppa:vlijm/lswitcher
Para instalá-lo, execute:
sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher
Desde agora, é embalado para Trusty & Utopic. Vou adicionar outros após o teste. Também adicionarei um .deb
instalador, mas sugiro usar o ppa
, pois geralmente esse tipo de coisa é atualizado de vez em quando.
Como a localização dos dados da janela de visualização mudou de ~/
para ~/.config/lswitcher
, você precisará configurar o Unity Launcher novamente se tiver usado o script anterior.