Portanto, tenho 8 desktops virtuais no Unity (com o Compiz) porque tenho muitos projetos nos quais estou trabalhando simultaneamente.
O problema é que toda vez que preciso reiniciar ou fechar acidentalmente o Chrome (que constitui uma grande parte das janelas necessárias para o trabalho), preciso abrir manualmente essas janelas novamente e configurá-las (abrir arquivos, vá para a correta URLs etc.).
Como você escreveria um roteiro que fará tudo isso por mim? Ou seja: 1) Janelas abertas 2) Coloque-as nas coordenadas corretas nas telas virtuais corretas
(1) é óbvio, para o Google Chrome você acabou de executar o 'google-chrome'. Mas então, como você o coloca no lugar certo? 2)
Ou já existe um script / software que faria isso por mim?
wmctrl
, que é como um software para controlar janelas através de script ou terminal. Mas, como para o reinício de uma janela, que pode ser algo de um pouco mais de desafioRespostas:
Isso pode ser feito muito bem, mas você precisa de algum entendimento sobre Unity / viewports. Espero que a história abaixo seja compreensível, se não, por favor, deixe um comentário.
O script abaixo pode ser usado para abrir uma janela de qualquer aplicativo em qualquer uma das suas viewports, em qualquer posição, se você a executar com os argumentos corretos. O script é uma versão editada deste , mas agora preparado para colocar janelas na área de trabalho virtual de abrangência .
1. Compreendendo viewports e coordenadas de janela
Áreas de trabalho no Unity
No Unity, diferentemente de outros gerenciadores de janelas, na verdade você só possui um espaço de trabalho de abrangência, que é dividido em viewports. No seu caso, seu espaço de trabalho é dividido em oito viewports.
Como a posição das janelas é definida
A posição da janela, como a saída do comando:
é descrita como a posição, relativa ao canto superior esquerdo da viewport atual :
Portanto, se você estiver na viewport
1
:uma janela na viewport 2 poderá ser posicionada em, por exemplo, 1700 (x) X 500 (Y)
(minha tela é 1680x1050)
No entanto, se você estiver na viewport 6:
a mesma janela seria posicionada em 20 (x), -550 (y)
Usar essas coordenadas corretamente é importante para executar o script com os argumentos corretos, conforme descrito abaixo:
2. Como usar o script
O script abaixo pode ser usado para colocar uma nova janela de um aplicativo no seu espaço de trabalho virtual (estendido).
Verifique se
wmctrl
está instalado:Copie o script abaixo em um arquivo vazio, salve-o como
setwindow
(sem extensão) em~/bin
. Crie o diretório se ele ainda não existir. Torne o script executável .~/bin
, execute o comandosource ~/.profile
ou efetue logout / logon para disponibilizar o diretório$PATH
.Teste, execute o comando:
por exemplo
Uma janela do gedit deve aparecer na viewport atual.
Notas:
gedit
janela no meu sistema é, por exemplo, appr. 470 px.<x_position>
para colocar janelas à esquerda das janelas de visualização atuais<y_position>
para colocar janelas acima da (s) janela (s) atual (is)Para abrir novas janelas em diferentes viewports ao mesmo tempo, você pode simplesmente encadear comandos. Observando a configuração da viewport no exemplo "Long story", se eu estiver na viewport 1, posso abrir janelas do gedit nas viewport 1, 2, 3 e 4 com o comando:
O script
EDIT: a versão preguiçosa
Caso prefira inserir coordenadas e tamanho, basta abrir uma janela na viewport atual e exibir a viewport direcionada como argumento (sem precisar calcular nada), e use a versão abaixo ...
Se você configurá-lo como a primeira versão do script, poderá executá-lo com o comando:
Um exemplo: para abrir uma
Google-Chrome
janela posicionada em20, 20
, tamanho300x300
, na janela de exibição5
:A configuração é praticamente a mesma que a primeira versão do script.
Observe que também esse script funciona corretamente se a janela definida (posição / tamanho) se encaixar completamente na viewport de destino.
O script:
Abrindo janelas de aplicativos com argumentos
Para finalizar o trabalho, responda sua pergunta completamente:
Se você executar o script como por exemplo:
ele abrirá uma janela padrão nos desktops direcionados.
No entanto, com a versão mais recente do script, você pode adicionar um argumento adicional para abrir a janela do aplicativo, por exemplo
url
:por exemplo:
Se o argumento (extra) contiver espaços, use aspas. O exemplo acima abrirá uma
google-chrome
janela na janela de visualização 3, abrindo ourl
http://askubuntu.com
.Você pode encadear comandos para abrir várias janelas / URLs em diferentes áreas de trabalho em um comando, por exemplo:
fonte
Isso se expande na grande resposta de @Jacob Vlijim acima, com um
setwindow
script ligeiramente modificado :Uma descrição das mudanças:
python3
parapython
(apenas uma preferência pessoal)sys.argv
aargparse
para uma interface de linha de comando melhorwhile
loop de 0,5 segundo a 1 segundo de sono completoxrandr
dependênciaNOTA: Esta é uma versão apenas um pouco aprimorada que escrevi para uso pessoal no Debian Jessie LXDE. Seus resultados podem variar.
fonte
Para os interessados, implementei o Desktopen: github.com/snitko/desktopen
Ele permite que você escreva um script para abrir janelas em diferentes viewports e displays de uma maneira muito amigável.
fonte