Como a aplicação de tela cheia em ambos os monitores de exibição de cabeça dupla?

2

Eu tenho duas máquinas Ubuntu 10.4 (e o Ubuntu continua a esconder mais e mais configurações do xorg.conf de tal forma que eu não sei mais onde encontrá-las). Um deles é um laptop com duas cabeças - DP1 é a tela interna e VGA1 é um monitor externo; ambos estão rodando a 1600x900. A outra máquina é uma área de trabalho que roda tanto VGA1 quanto HDMI1 (que na verdade é uma porta de vídeo com um adaptador DVI) a 1600x900. Portanto, em ambos os casos, minha área de trabalho é 3200x900. Eu executo um servidor VNC no laptop e me conecto a ele (via túnel SSH) a partir da área de trabalho - quando pressiono a tecla de acesso em tela cheia, vejo uma exibição de 1600x900 da máquina remota em um monitor e metade da área de trabalho local o outro monitor - a "tela cheia" só se expande para preencher um monitor local.

Normalmente, isso é exatamente o que você deseja quando você exibe em tela cheia um navegador da web, um cliente de e-mail ou outro aplicativo. Tenho certeza de que há alguma mágica X para deixar claro o que uma tela inteira realmente implica, e o aplicativo cliente vnc está apenas obedientemente aceitando o que é dito. Enquanto eu gostaria de manter o comportamento normal de tela cheia para aplicativos regulares, mas quando eu estou VNCing para outra máquina de 3200x900, eu realmente gostaria de tela cheia para esticar em ambos os monitores locais. O redimensionamento da janela para "fechar" não é bom o suficiente, pois ainda tenho painéis locais na parte superior e inferior de uma tela (embora eu possa configurá-los para auto-ocultar), além da borda da janela do aplicativo cliente VNC t parecem respeitar -notitle).

Existe alguma boa maneira de ter X mentir para um único aplicativo sobre o tamanho de "tela cheia"? Posso fazê-lo mentir para todas as aplicações? xrandr --noprimary parece não ter efeito.

    
por Eric Angell 03.02.2011 / 04:49

2 respostas

3

Eu fiz algumas escavações. A versão moderna da mágica do X11 que eu formulei é, na verdade, mágica do gerenciador de janelas, _NET_WM_STATE_FULLSCREEN . Meu cliente VNC está de fato usando essa solicitação e sendo expandido para um único monitor. Parece que ele deve primeiro definir _NET_WM_FULLSCREEN_MONITORS para descrever quais monitores usar como as bordas superior / inferior / esquerda / direita, mas não é. No entanto, eu puxei a fonte do dpkg e procurei para hack-lo. Mesmo com _NET_WM_FULLSCREEN_MONITORS, não consegui obter o comportamento correto. O cliente VNC sabe que quer chegar a 3200x900 e tenta várias vezes (30) redimensionar para isso (configurando as larguras e alturas máximas e básicas em XA_WM_NORMAL_HINTS e, em seguida, usando XResizeWindow ()) na janela superior, mas é sempre ignorado. Talvez o compiz esteja se comportando mal?

Mas o cliente VNC também tem código para lidar com X diretamente, em vez de passar por um gerenciador de janelas. Quando eu cortar o código de detecção WM, ele modifica a janela raiz mais diretamente (XtNoverrideRedirect, XReparentWindow para o topo, XMapRaised, etc) e que funciona como um encanto (desde que eu também desative o código de detecção na função un-fullscreen ). Ele funciona indiscutivelmente ainda melhor - alt-tab e outras chaves de gerenciamento de janela agora passam para a máquina remota até que eu descomplique a janela do cliente VNC.

Portanto, pode ser hacky e, de outra forma, ter algumas armadilhas *, mas pelo menos por agora eu consegui que ele se comportasse de maneira aceitável em minha mente.

*: un-fullscreening não redesenhar corretamente a janela raiz ou outras janelas que foram encobertas. Mas mudar para uma viewport diferente e, em seguida, voltar a força um redesenho, que é uma solução aceitável.

    
por 17.02.2011 / 03:51
0

Outra possibilidade a ser explorada é a capacidade de alguns programas serem forçados a um determinado tamanho / local quando são iniciados.

Eu defino o comando para executar o Opera através de um ícone E17 como este:

/usr/local/bin/opera-11.01 -geometry 1600x3200-0 + 100% U

Isso define o tamanho e a localização da janela do Opera.

E no Xemacs não consigo controlar a localização, mas posso especificar a janela de tamanho para executar na inicialização no meu init.el:

(tamanho do quadro-conjunto (quadro de janela) 140 80)

Estas não são uma solução exata para a sua situação, mas possivelmente você pode procurar configurar qualquer software que esteja executando para um determinado tamanho / local equivalente a uma tela cheia (dupla)? Nem todos terão esse tipo de opção, mas vale a pena investigar, talvez.

    
por 17.09.2011 / 08:55