Como posso abrir uma janela em um monitor diferente?

7

Com vários monitores, até agora tenho arrastado manualmente as janelas. Existe uma maneira de abrir uma janela em uma tela específica em uma configuração de cabeça dupla? (Não confundir com vários monitores do servidor X.)

Algo como: SCREEN=2 firefox ou open-in-screen 2 firefox .

Se for importante, meu ambiente é o KDE usando o gerenciador de janelas do KWin. As regras da janela do KWin só podem corresponder a algumas propriedades como título, mas não consegui encontrar uma variável de ambiente como filtro.

A exibição secundária estende a tela principal:

$ xrandr -q
Screen 0: minimum 320 x 200, current 3520 x 1080, maximum 32767 x 32767
LVDS1 connected 1600x900+0+0 (normal left inverted right x axis y axis) 382mm x 214mm
   1600x900       60.1*+
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 connected 1920x1080+1600+0 (normal left inverted right x axis y axis) 477mm x 268mm
   1920x1080      60.0*    50.0     59.9  
   1920x1080i     60.1     50.0     60.0  
   1680x1050      59.9  
   1280x1024      75.0     60.0  
   1440x900       59.9  
   1280x960       60.0  
   1280x720       60.0     50.0     59.9  
   1024x768       75.1     70.1     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3     56.2  
   720x576        50.0  
   720x480        60.0     59.9  
   640x480        75.0     72.8     66.7     60.0     59.9  
   720x400        70.1  
DP1 disconnected (normal left inverted right x axis y axis)
    
por Lekensteyn 27.12.2013 / 18:21

5 respostas

4

Não, você não pode fazer isso diretamente. Na arquitetura X, os dois monitores físicos que você vê não são discerníveis pelos aplicativos. Você só pode trabalhar em torno dessa abstração, determinando quais áreas do espaço de trabalho visível correspondem a qual monitor e, em seguida, colocar as janelas no deslocamento correto.

Os kits de ferramentas compatíveis suportam a opção -geometry , que permite que seu aplicativo solicite a colocação em uma posição específica. Se você não tiver essa opção disponível, poderá usar wmctrl se tiver um X Window Manager compatível com EWMH / NetWM para mover e redimensionar janelas já existentes (consulte wmctrl (1), você precisa das opções -r e -e ). Eu uso devilspie para forçar a colocação de algumas janelas e, claro, o seu gerenciador de janelas de escolha pode ter sua própria facilidade para forçar a colocação de janelas.

devilspie permite aplicar certas ações no X Windows e pode usar as propriedades da janela X para discernir janelas e aplicativos diferentes. A regra principal para você seria geometry "<width>x<height>+<xoffset>+<yoffset>" .

No entanto, você sempre precisa fazer os cálculos de quando e onde outro monitor físico começa você mesmo. Mas isso não é muito difícil e xrandr diz a você como e onde ele usa monitores na forma de "<width>x<height>+<xoffset>+<yoffset> em cada linha, com um nome de saída.

Não existe a maneira infalível de apenas funcionar, porque as implementações podem (e variam!) variar. wmctrl normalmente trabalha no título da janela para identificar o alvo. devilspie também pode se referir a sua classe, mas não tenho conhecimento de nenhum kit de ferramentas que permita especificar uma classe do X Window, mas não sua geometria.

É claro que você sempre pode iniciar duas xephyr instâncias e fazer uma preencher a tela esquerda e a outra a tela da direita e depois endereçar telas pela variável de ambiente DISPLAY , mas essa solução tem outras desvantagens.

Em teoria, a autoridade para governar a colocação de janelas é o gerenciador de janelas. Conseqüentemente, se você quiser coisas que seu gerenciador de janelas não pode, será hacky e é também a razão pela qual não existe uma maneira genérica de fazer isso.

Ainda, se o seu caso de uso concreto for o seu emulador android ... o que é muito diferente de pedir a opção para especificar SCREEN=n fooapp no shell, então devilspie pode ser o que você está procurando. Dica: descobri que é melhor identificar aplicativos por sua classe de janela.

    
por 20.01.2014 / 11:34
3

Isso depende de como seus dois monitores são configurados.

Se você estiver usando o XINERAMA para fazer com que ambos os displays pareçam com um para X, use a opção -geometry para solicitar que os aplicativos apareçam em um local específico. Se você tiver as exibições configuradas como telas diferentes, você usará o DISPLAY para conseguir isso.

Experimente:

$ DISPLAY=0.0 xterm &
$ DISPLAY=0.1 xterm &

Se os seus monitores são tela 0 e 1, isso deve gerar um xterm em cada monitor.

    
por 27.12.2013 / 20:53
3

Esta é uma solução específica para o gerenciador de janelas. Isto é como fazê-lo com o kwin, que é o gerenciador de janelas padrão do KDE.

Se você clicar com o botão direito do mouse na barra de título do aplicativo e selecionar mais configurações - > configurações especiais de aplicativos.

Vá para a guia Correspondência de janelas. Clique no botão Detect Window Properties. Então, com o cursor do mouse, clique na janela principal do aplicativo. Ele irá selecionar a classe da janela etc e também obter informações de posicionamento da janela, etc.

Em seguida, clique na guia Tamanho e posição. Clique na posição da caixa e na caixa Tamanho e na caixa suspensa à direita de ambos e defina para lembrar.

Em seguida, clique em ok.

Na próxima vez que você executar o aplicativo, ele deverá ter o mesmo tamanho e o mesmo monitor.

Eu uso isso no KDE para abrir meu terminal uRxvt no meu monitor esquerdo em uma configuração de 3 monitores e ele funciona todas as vezes.

Boa sorte.

    
por 22.01.2014 / 04:57
1

Eu encontrei este método que usa xdotool , xprop , & wmctrl .

Veja o que o script abaixo fará:

  1. Encontrar a janela ativa
  2. Obtenha seu estado maximizado e lembre-se
  3. Remover a maximização
  4. Obtenha sua geometria
  5. Calcular a nova posição
  6. Mova-se
  7. Maximizar com base no estado anterior
  8. Aumentar
  9. Veja um script que faz isso:

script

Isso moverá a janela ativa para o outro monitor. Ele só pode lidar com um lado a lado, aka. horizontal, configuração de monitores.

wid='xdotool getactivewindow'
max_state='xprop -id $wid _NET_WM_STATE'

wmctrl -ir $wid -b remove,maximized_vert,maximized_horz
eval 'xdotool getwindowgeometry --shell $wid'

new_x=1600
if [[ "$X" -ge "$new_x" ]]; then
  new_x=0
fi

xdotool windowmove $wid $new_x $Y
if [ -z "${max_state/*_NET_WM_STATE_MAXIMIZED_*/}" ]; then
  wmctrl -ir $wid -b add,maximized_vert,maximized_horz
fi

xdotool windowraise $wid

Fonte: Xubuntu - mover janelas entre monitores

    
por 21.01.2014 / 08:38
0

Teve um problema semelhante. Encontrou o seguinte:

  1. Clique com o botão direito na barra de título da janela e selecione "Mais ações" - > "Configurações do Gerenciador de Janelas".
  2. Escolha "Foco" na coluna à esquerda.
  3. Alternar opção "A tela ativa segue o mouse".

Se nenhum outro padrão for especificado, as janelas aparecerão na tela ativa no momento. Com o procedimento descrito acima, a posição do mouse define essa tela ativa.

    
por 25.04.2014 / 18:01