Vários monitores fictícios em Linux headless remoto para VNC para vários monitores locais

Vários monitores fictícios em Linux headless remoto para VNC para vários monitores locais

Eu submeto a derrota. Tenho tentado configurar minha caixa Linux remota para ter dois monitores fictícios para que eu possa usar vários monitores locais para VNC nela. Estou surpreso que ninguém mais tenha precisado de ajuda para encontrar algo na web.

Também tentei criar um monitor na caixa do Linux com largura dupla. Em seguida, use x11vnc para recortar uma área para cada exibição. Mas estou tendo problemas para criar um monitor tão grande com o driver fictício.

Eu tenho um adaptador gráfico instalado que possui dois DisplayPorts, mas não pretendo usá-lo. Quando eu estava usando o adaptador real, tive um comportamento lento. Quando experimentei o manequim, ele respondeu muito bem. Então, espero criar outro manequim.

Estou usando o KDE DM.

Já vi muitos exemplos de uso do VIRTUAL1, mas não consigo fazer isso funcionar com o driver fictício. Tentei adicionar a opção "VirtualHeads" "2" na configuração, mas o driver fictício não a reconhece.

Já vi sugestões de uso do Xvfb, mas ele foi descontinuado pelo driver fictício desde 2016.

Aqui estão alguns detalhes.

$ uname -a
Linux bgrupczy-linux 5.8.0-53-generic #60~20.04.1-Ubuntu SMP Thu May 6 09:52:46 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

/usr/share/X11/xorg.conf.d/xorg.conf está vazio

O seguinte foi obtido em uma pesquisa na Internet. Assim que comecei a funcionar, parei de ajustá-lo para que possa ter falhas, mas isso não parece me afetar.

/usr/share/X11/xorg.conf.d/dummy-1920x1080.conf tem o seguinte, que me dá meu único 1920x1080.

Section "Monitor"
  Identifier "Monitor0"
  HorizSync 28.0-80.0
  VertRefresh 48.0-75.0
  Modeline "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
EndSection

Section "Device"
  Identifier "Card0"
  Driver "dummy"
  VideoRam 256000
EndSection

Section "Screen"
  Identifier "Screen0"
  Device "Card0"
  Monitor "Monitor0"
  DefaultDepth 24
  SubSection "Display"
    Depth 24
    Modes "1920x1080_60.00"
  EndSubSection
EndSection
$ xrandr
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 320 x 240, current 1920 x 1080, maximum 1920 x 1080
default connected 1920x1080+0+0 0mm x 0mm
   1920x1080     60.00* 
   1680x1050     70.00    60.00  
   1400x1050     70.00    60.00  
   1600x900      60.00  
   1280x1024     75.00    60.00  
   1440x900      60.00  
   1400x900      60.00  
   1280x960      60.00  
   1368x768      60.00  
   1360x768      60.00  
   1280x800      60.00  
   1152x864      75.00    70.00    60.00  
   1280x720      60.00  
   1024x768      75.00    70.00    60.00  
   1024x576      60.00  
   960x600       60.00  
   832x624       75.00  
   960x540       60.00  
   800x600       75.00    72.00    60.00    56.00  
   840x525       70.00    60.00  
   864x486       60.00  
   700x525       70.00    60.00  
   800x450       60.00  
   640x512       75.00    60.00  
   720x450       60.00  
   700x450       60.00  
   640x480       75.00    73.00    60.00  
   684x384       60.00  
   680x384       60.00  
   640x400       60.00  
   576x432       75.00    70.00    60.00  
   640x360       60.00  
   512x384       75.00    70.00    60.00  
   512x288       60.00  
   416x312       75.00  
   480x270       60.00  
   400x300       75.00    72.00    60.00    56.00  
   432x243       60.00  
   320x240       75.00    73.00    60.00  
$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Device 9bc5 (rev 05)

Posso ver pelo xrandr que meu monitor é chamado de "padrão". Então eu tentei isso:

$ cvt 3840 1080
# 3840x1080 59.96 Hz (CVT) hsync: 67.16 kHz; pclk: 346.00 MHz
Modeline "3840x1080_60.00"  346.00  3840 4088 4496 5152  1080 1083 1093 1120 -hsync +vsync
$ xrandr --newmode "3840x1080_60.00"  346.00  3840 4088 4496 5152  1080 1083 1093 1120 -hsync +vsync
$ xrandr --addmode default "3840x1080_60.00"
$ xrandr --output default --mode "3840x1080_60.00"

A última linha me dá:

xrandr: Configure crtc 0 failed

Tentei aumentar o VideoRam para 512.000 (o dobro) para ter certeza de que havia espaço. Não tenho certeza do que fazer lá. Eu tenho 32G de RAM.

E TODOS os comandos xrandr me dão: xrandr: Failed to get size of gamma for output default e acho que é porque é um monitor fictício que não tem gama.

Atualmente estou trabalhando na sessão VNC. Preciso desligar o x11vnc para que o xrandx seja concluído? Estou perdendo o juízo.

Estou iniciando o x11vnc assim:

x11vnc -loop -forever -shared -repeat -noxdamage -xrandr -display :0 -clip 1920x1080+0+0

A caixa Linux está dentro da minha rede local, então não estou preocupado com autenticação/senhas.

Editar 27/05/2021:

Mais à espreita e encontrei algumas opções. Consegui obter uma tela dupla e criar duas instâncias x11vnc. Mas isso não é o ideal. A caixa do Linux ainda vê isso como uma única tela. Agora, existe uma maneira de pegar essa tela e dizer à caixa do Linux para dividi-la? Por exemplo, se eu maximizar uma janela no KDE ela não abrangerá ambas as telas locais?

Arquivo conf do Xorg:

Section "Monitor"
  Identifier "Monitor0"
EndSection

Section "Device"
  Identifier "Card0"
  Driver "dummy"
  VideoRam 512000
EndSection

Section "Screen"
  Identifier "Screen0"
  Device "Card0"
  Monitor "Monitor0"
  DefaultDepth 24
  SubSection "Display"
    Depth 24
    Virtual 3840 1080
  EndSubSection
EndSection
x11vnc -loop -forever -shared -repeat -noxdamage -xrandr -display :0 -rfbport 5900 -clip 1920x1080+0+0
x11vnc -loop -forever -shared -repeat -noxdamage -xrandr -display :0 -rfbport 5901 -clip 1920x1080+1920+0

Posso então conectar-me aos monitores VNC :0 e :1 e organizá-los em monitores locais e redimensionar as janelas para caber nesses monitores.

Quando uma janela de diálogo aparece, muitas vezes ela está no meio da "tela grande" do Linux, que para mim abrange os dois monitores ...

Editar 12/11/2021:

Uma solução:https://superuser.com/a/1188573/514658

O verdadeiro problema é não conseguir fazer com que meu visualizador VNC fique em tela cheia e ocupe apenas dois dos meus três monitores. A única opção disponível no visualizador é usar TODOS os monitores, o que bloqueia o uso do lado do Windows. DisplayFusion no link acima resolveu o problema. Agora posso arrastar perfeitamente entre meus dois monitores e não ficar preso na borda de um deles.

Editar 16/11/2021:

"RESOLVIDO": Em vez de usar o DisplayFusion, que é um grande martelo, mais pesquisas me levaram ao Windows PowerShell. Não há necessidade de um utilitário de terceiros. Eu só preciso mover/redimensionar uma janela específica para caber em dois dos meus três monitores em tela cheia. Aqui está:

Add-Type @"
  using System;
  using System.Runtime.InteropServices;

  public class Win32 {
    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
  }

  public struct RECT
  {
    public int Left;        // x position of upper-left corner
    public int Top;         // y position of upper-left corner
    public int Right;       // x position of lower-right corner
    public int Bottom;      // y position of lower-right corner
  }

"@

$h = (Get-Process vnc-E4_6_3-x86_win32_viewer).MainWindowHandle
[Win32]::MoveWindow($h, 1920, 0, 3840, 1080, $true )

Responder1

A configuração X a seguir funciona para mim em uma estação de trabalho sem cabeça e permite monitores fictícios duplos usando x11vnc + vncviewer. Ele usa driver fictício X (dummy_drv.so). Não tentei configurar usando o aplicativo Xvfb, que também pode funcionar. O KDE tem alguns bugs na movimentação de janelas.

# darwin
Section "Monitor"
    Identifier  "Monitor1"
    HorizSync   60.0-100.0
    VertRefresh 60-120
    Option "Primary" "True"
    Option "Enable" "True"
    Option "Position" "0 0"
EndSection

Section "Monitor"
    Identifier  "Monitor2"
    HorizSync   60.0-100.0
    VertRefresh 60-120
    Option "Primary" "False"
    Option "Enable" "True"
    Option "Position" "1280 0"
    Option "RightOf" "Monitor1"
EndSection

Section "Device"
    Identifier  "Device1"
    Driver      "dummy"
    VideoRam    512000
    # DUMMY0 and DUMMY1 are driver names guessed from
    # errors in /var/log/Xorg.0.log and also
    # checking xorg-server src pkg.
    Option "Monitor-DUMMY0" "Monitor1"
    Option "Monitor-DUMMY1" "Monitor2"
EndSection

Section "Screen"
    Identifier  "Screen1"
    Device      "Device1"
    Monitor     "Monitor1"
    DefaultDepth 24
    SubSection "Display"
            Modes "1280x1024"
    EndSubSection   
EndSection

Section "Screen"
    Identifier  "Screen2"
    Device      "Device1"
    Monitor     "Monitor2"
    DefaultDepth 24
    SubSection "Display"
            Modes "1280x1024"
    EndSubSection   
EndSection

Section "ServerLayout"
    Identifier "Layout 1"
    Screen 0 "Screen1"
    Screen 1 "Screen2" RightOf "Screen1"
EndSection
                
Section "ServerFlags"
    Option "DefaultServerLayout" "Layout 1"
    # XRANDR extension is more recent and can replace older XINERAMA extension.
    # dummy_drv.so can easily be recompiled from latest source to support XRANDR.
    # If XRANDR is supported by dummy_drv.so, set the following to false.
    # Ubuntu 20.04 dummy_drv.so don't support XRANDR yet,
    # so the following must be set to true.
    Option "Xinerama"  "False"
EndSection

informação relacionada