Como aplicar o aplicativo em tela cheia em ambos os monitores de exibição dupla?

Como aplicar o aplicativo em tela cheia em ambos os monitores de exibição dupla?

Eu tenho duas máquinas Ubuntu 10.4 (e o Ubuntu continua escondendo cada vez mais configurações do xorg.conf de tal forma que não sei mais onde encontrá-lo). Um deles é um laptop com duas cabeças - DP1 é a tela interna e VGA1 é um monitor externo; ambos estão rodando em 1600x900. A outra máquina é um desktop rodando VGA1 e 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 atalho em tela inteira, obtenho uma visualização de 1600x900 da máquina remota em um monitor e metade da minha área de trabalho local em o outro monitor - a "tela cheia" só se expande para preencher um monitor local.

Normalmente, isso é exatamente o que você deseja quando coloca em tela cheia um navegador da Web, cliente de e-mail ou outro aplicativo. Tenho certeza de que há alguma mágica do X para deixar claro o que uma tela inteira realmente implica, e o aplicativo cliente vnc está apenas aceitando obedientemente o que é dito. Embora eu queira manter o comportamento normal de tela inteira para aplicativos regulares, quando estou fazendo VNC para outra máquina 3200x900, eu realmente gostaria que a tela inteira se estendesse por ambos os monitores locais. Redimensionar a janela para "fechar" não é bom o suficiente, pois ainda tenho painéis locais na parte superior e inferior de uma tela (embora possa configurá-los para ocultar automaticamente), além da borda da janela do aplicativo cliente VNC (já que isso não acontece). parece respeitar -notitle).

Existe alguma boa maneira de fazer com que o X minta para um único aplicativo sobre o tamanho de "tela inteira"? Posso fazer com que ele minta para todos os aplicativos? xrandr --noprimaryparece não ter efeito.

Responder1

Eu fiz algumas escavações. A versão moderna da magia do X11 que eu suponho é na verdade a magia do gerenciador de janelas,_NET_WM_STATE_FULLSCREEN. Na verdade, meu cliente VNC está usando essa solicitação e sendo expandido para um único monitor. Parece que primeiro deveria ser definido_NET_WM_FULLSCREEN_MONITORSpara descrever quais monitores usar como bordas superior/inferior/esquerda/direita, mas não é. No entanto, retirei o código-fonte do dpkg e procurei hackeá-lo. Mesmo com _NET_WM_FULLSCREEN_MONITORS não consegui obter o comportamento correto. O cliente VNC sabe que deseja chegar a 3200x900 e tenta várias vezes (30) redimensionar para isso (definindo as larguras e alturas base e máxima em XA_WM_NORMAL_HINTS e depois usando XResizeWindow()) na janela superior, mas é sempre ignorado. Talvez o Compiz esteja se comportando mal?

Mas o cliente VNC também possui código para lidar diretamente com o X, em vez de passar por um gerenciador de janelas. Quando eu corto o código de detecção WM, ele modifica a janela raiz mais diretamente (XtNoverrideRedirect, XReparentWindow para o topo, XMapRaised, etc) e isso funciona perfeitamente (desde que eu também desabilite o código de detecção na função de tela cheia). ). Provavelmente funciona ainda melhor - alt-tab e outras teclas de gerenciamento de janela agora passam para a máquina remota até que eu retire a tela cheia da janela do cliente VNC.

Portanto, pode ser hackeado e ter algumas pegadinhas *, mas pelo menos por enquanto consegui que ele se comportasse de maneira aceitável em minha mente.

*: a remoção da tela cheia não redesenha corretamente a janela raiz ou outras janelas que foram encobertas. Mas mudar para uma janela de visualização diferente e depois voltar força um redesenho, o que é uma solução alternativa aceitável.

Responder2

Outra possibilidade a explorar pode ser 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 -geometria 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 o tamanho da janela para rodar na inicialização no meu init.el:

(definir tamanho do quadro (moldura da janela) 140 80)

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

informação relacionada