Definindo um Unity Launcher diferente por área de trabalho:
1. 2. 3. < em> 4.
A solução abaixo torna possível ter um conjunto diferente de ícones de inicialização por espaço de trabalho, independentemente de quantos espaços de trabalho você tenha.
A configuração inclui duas partes:
-
Uma (uma) combinação de teclas de atalho para "lembrar" o conjunto de ícones do ativador para a área de trabalho atual.
-
Um script para ser executado em segundo plano, acompanhando o que é o espaço de trabalho atual e configurando o Iniciador de Unidades correspondente. Atua sempre que o usuário troca de espaço de trabalho.
Como funciona
Dois pequenos scripts estão envolvidos:
O script primeiro faz uma coisa simples: ele grava o conteúdo do ativador atual em um arquivo (oculto) em seu diretório inicial, nomeado (numerado) após sua área de trabalho atual.
O script second fica de olho no que é o espaço de trabalho atual. Se houver uma área de trabalho alterar , o script verá se existe um arquivo de dados correspondente (launcher-) (criado pelo primeiro script). Nesse caso, ele lê o arquivo e altera o Unity Launcher, conforme lembrado no arquivo.
É isso.
Como configurar
-
O script precisa de
wmctrl
para ser instalado:sudo apt-get install wmctrl
-
Crie um diretório no qual ambos os scripts serão armazenados. É importante que ambos os scripts sejam mantidos juntos em um diretório, já que eles compartilham funcionalidade e um importa do outro. Pela mesma razão, é importante que você os nomeie exatamente como indicado abaixo.
-
Copie cada um dos scripts abaixo em um arquivo (diferente) vazio, salve-os 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 & gt; "Teclado" & gt; "Atalhos" & gt; "Atalhos personalizados". Clique no botão "+" 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 + H para tornar o arquivo visível (arquivos, começando com.
são invisíveis por padrão).
Navegue pelas áreas 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 para esse espaço de trabalho específico.
-
Você está praticamente pronto agora. Teste a execução do script de segundo plano com o comando (a partir de uma janela de terminal, mantenha-o em execução):
python3 /path/to/launcher_perworkspace.py
Se tudo funcionar bem e seu ativador alternar por espaço de trabalho, adicione o seguinte comando aos seus aplicativos de inicialização: Dash & gt; Aplicativos de inicialização & gt; Adicione:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
Notas
- Se você quiser alterar o conjunto de ícones do iniciador para uma área de trabalho específica, simplesmente navegue até a área de trabalho, adicione / remova ícones como desejar e pressione a combinação de teclas (não é necessário reiniciar o script de plano de fundo).
- A partir do (s) comentário (s), tenho a sensação de que há algum mal-entendido no atalho para lembrar o Launcher atual do espaço de trabalho atual. Você só precisa de um um atalho de teclado para "salvar" o lançador atual da área de trabalho atual. Ele funcionará exatamente da mesma maneira, não importa em qual espaço de trabalho você esteja. O próprio script determinará o que é o espaço de trabalho atual.
Editar
Do seu comentário, eu entendo que você não tem certeza de executar o (s) script (s) e tem medo de atrapalhar seu lançador atual.
Tenho certeza que isso é muito (ou muito pouco :)) respeito pelo que o script está fazendo. No entanto, você pode simplesmente fazer backup de seu Unity Launcher atual 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 seu Unity Launcher para a 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ê atrapalhe seu lançador, a menos que você 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 qualquer combinação de atalhos qualquer ; basta executar o script e começar a configurar seus ativadores nas áreas de trabalho específicas. O script criará arquivos (invisíveis) no seu diretório pessoal, para lembrar o conjunto de iniciadores (Unity-) nos diferentes espaços de trabalho.
Eu tentei isso na "versão 1" do script, mas sempre "incorporando" as duas verificações de inicialização entre duas verificações de espaço de trabalho acabou sendo o truque para evitar comportamento indesejado (salvando dados incorretos) ao mover rapidamente pelo espaços de trabalho.
Como usar
-
Como a primeira versão, esse script usa
wmctrl
:sudo apt-get instala o 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 seus 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
A partir de 2015-04-23, a boa pergunta de Dennis J e o incentivo do Parto levaram à criação de um ppa
para o script, cobrado 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, é empacotado para Trusty & amp; Utópico. Eu adicionarei 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 exibição mudou de ~/
para ~/.config/lswitcher
, você precisará configurar seu Unity Launcher novamente se tiver usado o script anterior.