Existe um ambiente de desktop compatível com vários monitores dinâmicos disponível para o Ubuntu?

14

Uso um laptop e gosto de migrar durante o dia de um local de trabalho (físico) para outro e conectar-me a um monitor externo, se disponível.

Também preciso realizar várias tarefas ao mesmo tempo, para ter muitas janelas abertas a qualquer momento e muitos espaços de trabalho (virtuais) para organizá-los.

Mas cada vez que conecto / desconecto o monitor externo, todo o meu arranjo cuidadoso desaparece. Isso me deixa muito bravo .

Existe um ambiente de área de trabalho que deixa as janelas em paz quando você conecta / desconecta um segundo monitor? Ou melhor ainda, que lembra o arranjo de janelas por arranjo de monitor? Assim, quando fui do meu escritório em casa (monitor de 17 "na parte superior da tela do laptop) para o local de trabalho habitual (monitor de 21" à esquerda da tela do laptop) ou da mesa do meu colega (monitor de 19 "à direita da tela latop), o as janelas acabam onde estavam na última vez em que o monitor foi conectado - ou permanecem paradas se nunca o viram.

A maneira como a unidade "lida com" os monitores externos só me deixa triste e gostaria de não ter todos esses monitores extras para conectar e, uma vez conectado, isso me acorrenta a esse arranjo, como se eu tivesse uma máquina desktop pregada no chão.

artm
fonte
Isso acontece com qualquer gerenciador de janelas? GNOME 3, KDE, LXDE, XFCE?
Braiam 31/01
Eu não sei. Isso acontece com a unidade.
Art
Você encontrou uma boa solução para isso? Fui forçado a usar um laptop Dell no qual coloquei o ubuntu, mas estou acostumado ao meu MacBook Pro. No Mac, existe um programa chamado Stay, indispensável, pois lembra os locais das janelas para cada configuração do monitor. Conecte um monitor, todas as janelas se movem para onde estavam. Conecte um segundo monitor, todos eles se moverão novamente. Desligue, todos eles voltam para onde estavam. Além disso, o Mac é inteligente o suficiente, mesmo sem o Stay, para garantir que todas as janelas estejam visíveis. Neste laptop Ubuntu, continuo tendo que encontrar as janelas que estão fora da tela.
Greywire
Não consigo encontrar nada como o Stay on linux. Parece que você pode obter todas as informações e controle de comandos individuais, e os scripts abaixo se aproximam. Estou trabalhando para melhorá-los para obter a funcionalidade necessária ...
Greywire
Ficar parece o que estou perdendo. Não, não encontrei uma solução.
Art

Respostas:

10

Estou fornecendo dois scripts de shell. Isso ajudará você a salvar seu arranjo de posições e tamanho das janelas . Se, de alguma forma, as configurações desejadas das janelas forem perturbadas, você poderá restaurá- las com o tamanho e as posições exatas das janelas para todas as janelas que usam esse script.

Você precisa instalar, a wmctrlmenos que já o tenha. Instale via terminal,

sudo apt-get install wmctrl

Script para salvar a configuração do Windows

# Script_Name: save_window_conf.sh
#!/bin/bash
if [ -f $HOME/.my_windows_config.txt ]; then
    echo -e "Information: Previous configuration file \"$HOME/.my_windows_config.txt\" already exists.\nTo save a new configuration remove it manually using the following command,\n\n\trm $HOME/.my_windows_config.txt"
    exit 1
else
    wmctrl -p -G -l | awk '($2 != -1)&&($3 != 0)&&($NF != "Desktop")' | awk '{print $1}' | while read mywinid
    do
        xwininfo -id "$mywinid" >> $HOME/.my_windows_config.txt
    done
fi

Na execução, o script acima salvará a posição e o tamanho de todas as janelas abertas em um arquivo nomeado .my_windows_config.txtem seu diretório pessoal. É um arquivo de texto oculto.

Script para recarregar a configuração do Windows

# Script_Name: load_window_conf.sh
#!/bin/bash

file=$HOME/.my_windows_config.txt
declare -a mywinid
declare -a x
declare -a y
declare -a width
declare -a height

nl=$(cat "$file" | grep xwininfo |wc -l)

for i in $(seq 1 $nl)
do
    mywinid[i]=$(cat "$file" | grep "xwininfo" | awk -v p="$i" '{if(NR==p) print $4}')
    x[i]=$(cat "$file" | grep "Absolute upper-left X" | awk -v p="$i" '{if(NR==p) print $NF}')
    y[i]=$(cat "$file" | grep "Absolute upper-left Y" | awk -v p="$i" '{if(NR==p) print $NF}')
    width[i]=$(cat "$file" | grep "Width" | awk -v p="$i" '{if(NR==p) print $NF}')
    height[i]=$(cat "$file" | grep "Height" | awk -v p="$i" '{if(NR==p) print $NF}')
done

for it in $(seq 1 $nl)
do
    wmctrl -i -r "${mywinid[$it]}" -e 0,"${x[$it]}","${y[$it]}","${width[it]}","${height[it]}"
done

Quando você executa o segundo script, ele restaura a posição do seu Windows com o tamanho exato de todas as suas janelas.

Uso

Salve esses scripts no seu $HOME/bin/diretório. Adicione $HOME/bin/no seu PATH. Para isso, adicione estas linhas no final do seu$HOME/.bashrc

PATH=$HOME/bin:$PATH
export PATH

Isso permitirá que você execute esses scripts apenas com seus nomes. Dê permissão de execução aos scripts,

chmod +x $HOME/bin/save_window_conf.sh
chmod +x $HOME/bin/load_window_conf.sh

Para salvar a configuração no seu $HOME/.my_windows_config.txt

Depois de abrir e ajustar todas as janelas executadas no terminal,

save_window_conf.sh

Para recarregar a configuração do seu $HOME/.my_windows_config.txt

load_window_conf.sh

Espero que isso resolva o seu problema. Aqui está uma captura de tela,

insira a descrição da imagem aqui

souravc
fonte
Uau, obrigado, isso parece promissor. Vou tentar os scripts.
Art
@artm Eu editei uma pequena falha e um erro de digitação, agora parece ok. Eu testei no Unity e no Gnome-fallback-session, deve funcionar no gnome3. Deixe-me saber se você enfrentar algum problema.
souravc
@artm, a decisão é sua quando você deseja remover .my_windows_config.txt. Se você deseja carregar a mesma configuração de janelas várias vezes para as janelas existentes, convém preservá-la. Mas se você iniciar uma sessão totalmente nova, o ID do Windows será diferente e, nesse caso, é melhor remover o arquivo de configuração antigo em $HOME/.my_windows_config.txt. Você precisa remover o arquivo salvo da configuração manualmente antes de salvar uma nova configuração.
souravc
No XFCE4 no Ubuntu 18.04, tive que mudar a gravidade (primeiro "0" no parâmetro -e) para 31, caso contrário, as janelas foram restauradas cerca de 31px à direita e abaixo de onde estavam. Eu acho que pode ser o tamanho do painel XFCE padrão. Obrigado pelo código!
akom 17/09/18
-1

O guia comum está aqui: Resolução

Suas soluções sobre resolução dinâmica estão próximas do Xorg & XrandR ou Xinerama

Você tem:
Quatro métodos para configurar

  1. Por sessão com .xprofile.

  2. Dinamicamente usando a ferramenta xrandr

  3. Estaticamente, configurando no xorg.conf.

  4. GUI gráfica de front-end do Xrandr.

A boa resposta é que as configurações de vários monitores não são armazenadas

Para solucionar seu Gerenciamento de Janelas em seus espaços de trabalho, você pode usar o sistema de criação de perfis fornecido pelo Compiz Config Manager

rápido
fonte
2
Não tenho problemas com resoluções ou disposições de exibição - elas funcionam conforme o esperado.
Art
Portanto, QUALQUER ambiente de área de trabalho é amigável para você. Não culpe o público, por favor.
swift
Eu não culpo ninguém. Eu só quero que as janelas abertas fiquem onde as coloco ao conectar / desconectar monitores.
Art
Então você tem quatro soluções com referência oficial. Minha resposta cobre adequadamente sua "loucura";)
swift
2
Ah, tente você mesmo: abra uma janela em cada área de trabalho e conecte um monitor que apareça na parte superior da tela original e veja onde as janelas terminam. Então me diga como o xrandr é relevante para impedir que as janelas pulem aleatoriamente quando um monitor está conectado.
Art