Configuração do servidor VNC para suporte a vários monitores

5

Eu uso o VNC no escritório para a grande maioria do meu trabalho. Nós temos um cluster de servidores Linux configurado para nos conectarmos via SSH para fazer nosso trabalho. Eles nos permitem usar o VNC para que possamos obter um ambiente de área de trabalho persistente para facilitar o fluxo de trabalho. Estou me conectando de um sistema Windows com dois monitores na minha mesa. Eu posso configurar o servidor TightVNC para a minha sessão, conforme me parece apropriado.

O que eu gostaria de poder fazer é configurar o servidor para que ele crie uma sessão com dois monitores separados. Eles podem ser costurados juntos em uma única viewport, mas eu não quero que minha barra de tarefas Fluxbox ou janelas maximizadas abranjam toda a tela, como quando eu apenas duplico a resolução horizontal. Para X, eu quero ver duas telas. Mas para o TightVNC Viewer, ele apenas apareceria como um único display amplo.

Eu olhei em volta on-line e vi menção de pessoas sendo capazes de fazer isso, mas não há tutoriais reais ou listas de opções para passar para que isso aconteça. Eu não posso usar o xorg.conf para criar múltiplos adaptadores, já que eu não tenho root (e nós não temos arquivos xorg.conf de todo o sistema). Os servidores existem em um rack e são sem cabeça, portanto não há adaptadores físicos não usados que eu possa adaptar como monitores virtuais para o VNC. Eu tentei especificar várias telas na linha de comando vncserver com -screen e, em seguida, usando xrandr para tentar colocar "VNC-1" ao lado de "VNC-0", mas continua relatando que a saída denominada " VNC-1 "não é encontrado, mesmo que, se eu consultar xrandr com --screen 1 , ele mostre uma exibição conectada a ele. Se eu VNC em uma sessão configurada dessa maneira, ainda só vejo a tela 0 (na saída "VNC-0").

Eu acho que deve haver algo que estou perdendo. Configurar com xrandr parece ser a chave, mas não consigo descobrir as etapas de pré-requisito ao invocar o servidor VNC.

Observe também:

  • Estamos usando o Xvnc TightVNC 1.3.0 como o servidor. Como tal, não usa o x11vnc como back-end.
  • Minha máquina Windows está se conectando com a versão mais recente do visualizador TightVNC (2.7.10 a partir deste post).
  • Eu tentei fazer essa configuração com o Fluxbox e o Gnome e não houve diferença de comportamento - apenas em qual área de trabalho / WM estava sendo executado.
  • Eu não quero configurar dois DISPLAYs separados nesta sessão. Eu quero janelas criadas em um monitor para poder ser arrastado para o outro.

O que estou perdendo? Ou é o que eu quero fazer, mesmo possível?

EDIT: (6/16/2016) Para enfatizar, não há exibição física (usada ou não usada) que eu possa ver disponível. Eu não sei o que a máquina física parece, mas é sem cabeça, então não poderia haver nenhum adaptador físico de exibição nela.

Quando executo xrandr depois de me conectar via SSH com o encaminhamento do X, é isso que vejo:

xrandr: Failed to get size of gamma for output default
Screen 0: minimum 0 x 0, current 3840 x 1200, maximum 32768 x 32768
default connected 3840x1200+0+0 0mm x 0mm
   3840x1200       0.0* 

De uma sessão VNC:

Screen 0: minimum 32 x 32, current 1920 x 1200, maximum 32768 x 32768
VNC-0 connected 1920x1200+0+0 0mm x 0mm
   1920x1200      60.0* 
   1920x1080      60.0  
   1600x1200      60.0  
   1680x1050      60.0  
   1400x1050      60.0  
   1360x768       60.0  
   1280x1024      60.0  
   1280x960       60.0  
   1280x800       60.0  
   1280x720       60.0  
   1024x768       60.0  
   800x600        60.0  
   640x480        60.0  

Se eu tentar adicionar um modo a uma saída sem nome, ele mostrará isso:

> xrandr --addmode VIRTUAL2 1920x1200_60.00
xrandr: cannot find output "VIRTUAL2"

Eu poderia usar qualquer nome para uma saída (tentei vários), e esse erro é tudo o que vejo.

    
por Ben Richards 06.06.2016 / 20:27

2 respostas

6

O truque aqui é gerar um monitor virtual no servidor, colocá-lo em relação ao monitor real onde quer que você esteja, então instruir VNC para use essa parte do monitor total (real + virtual) que você gostaria de usar. Tudo isso está bem documentado no fórum Arch Linux sempre útil .

  1. Para criar um espelho virtual:

    $ gtf 1920 1080 60
    # 1920x1080 @ 60.00 Hz (GTF) hsync: 67.08 kHz; pclk: 172.80 MHz
    Modeline "1920x1080_60.00"  172.80  1920 2040 2248 2576  1080 1081 1084 1118  -HSync +Vsync
    

    permite que você encontre a modeline necessária: isso pressupõe um monitor virtual de tamanho 1920x1080, e uma taxa de atualização de 60Hz, você pode ajustar isso às suas necessidades.

    Agora você pode gerar a nova modeline por meio de

    xrandr --newmode "1920x1080_60.00"  172.80  1920 2040 2248 2576  1080 1081 1084 1118  -HSync +Vsync
    
  2. Agora você pode gerar o monitor VIRTUAL1 por meio de:

    xrandr --addmode VIRTUAL1 1920x1080_60.00
    
  3. Agora você pode colocar o monitor virtual à esquerda do seu monitor existente (HDMI1, no meu caso, altere isso da forma que melhor lhe convier):

    xrandr --output VIRTUAL1 --mode 1920x1080_60.00 --left-of HDMI1
    
  4. Por fim, você pode decidir ver apenas a parte virtual da exibição (por exemplo) por meio de

    x11vnc -clip 1920x1080+0+0
    x11vnc -clip xinerama1
    

    (o que for melhor para você). Se você quiser ver todo o espaço do monitor (virtual + real), apenas omita o acima.

  5. O post original mencionado acima sugere passar os dois parâmetros a seguir no computador remoto, quando você deseja iniciar a sessão vnc :

    vncviewer -encodings "tight copyrect"
    

    Eu nunca achei isso necessário, mas vou passá-lo para você desde o YMMV.

P.S .: sua descrição de como X11 deve tratar a presença dos dois monitores distintos é confusa. O que X11 faz facilmente, e sem qualquer necessidade de nossa intervenção, é criar uma única área de trabalho (chamada tela ) a partir dos monitores existentes, de tal forma que as janelas pode ser arrastado de um monitor para outro, e o mouse flui sem barreiras sobre o espaço do monitor todo (a tela ). Além disso, maximizar janelas preenche somente o monitor em que elas estão localizadas, não a tela . Isto é o que eu assumi que você desejou, e o que o acima alcança sem qualquer trabalho extra. Qualquer outra coisa requer trabalho (se é que isso pode ser feito).

    
por 16.06.2016 / 17:40
0

Usando o Fedora 26, enfrentei o mesmo problema com o VIRTUAL1 que não é mostrado pelo comando xrandr.

Depois segui outras instruções para reutilizar uma saída vazia, como o HDMI-2, e funcionou muito bem, mas:

  • O gnome (e xrandr) não reconhece a saída vazia como conectada, e não mostra o monitor virtual para organizar a posição em área de trabalho ou clone. Toda vez que um novo monitor físico é conectado outra saída, tem uma alta probabilidade de quebrar.
  • pior parte é que como gnome-shell (e murmurar por baixo) não
    considere o novo monitor virtual como parte da área visível no
    framebuffer composto, não está devidamente repintado, e windows
    rasgando quando movido, deixando um rastro de animação permanente atrás deles,
    mesmo depois de fechar a janela, mesmo depois de reiniciar o x11vnc, eles ainda está lá.

Depois de uma curta tentativa e erro com um driver simulado, descobri que não é necessário um arquivo xorg.conf completo, mas basta adicionar o driver "intel" (no meu caso, você deve usar o nome do seu próprio driver) para um arquivo no diretório /etc/X11/xorg.conf.d para ativar as saídas VIRTUAL1 e VIRTUAL2, e faça o gnome-shell reconhecê-las como saídas válidas. (Também notei que os nomes de saída mudaram um pouco, por exemplo, de "eDP-1" para "eDP1"). Além disso, adicionei a opção "TearLess" definida como true para que o driver fosse redesenhado quando o gerenciador de composição não.

~# vi /etc/X11/xorg.conf.d/01-dummy-monitor.conf
Section "Device"
        Identifier      "Configured Video Device"
    Driver "intel"         #CHANGE THIS
    Option "TearLess"   "1"
EndSection

Section "Monitor"
        Identifier      "Configured Monitor"
EndSection

Section "Screen"
        Identifier      "Default Screen"
        Monitor         "Configured Monitor"
        Device          "Configured Video Device"
EndSection

Depois disso, as instruções da resposta acima funcionam bem e o novo monitor virtual pode ser gerenciado nas configurações da tela do Gnome. Se você tiver dispositivos cliente VNC com resoluções diferentes, você pode adicionar usando o xrandr como explicado e atribuí-los nas configurações da tela do Gnome.

    
por 11.09.2017 / 12:21