Múltiples monitores ficticios en Linux remoto sin cabeza para VNC a múltiples monitores locales

Múltiples monitores ficticios en Linux remoto sin cabeza para VNC a múltiples monitores locales

Presento la derrota. He estado intentando configurar mi caja Linux remota para que tenga dos monitores ficticios para poder usar varios monitores locales para VNC. Me sorprende que nadie más haya necesitado ayuda con esto para encontrar algo en la web.

También intenté crear un monitor en la caja de Linux que tenga el doble de ancho. Luego use x11vnc para recortar un área para cada pantalla. Pero tengo problemas para crear un monitor tan grande con el controlador ficticio.

Tengo instalado un adaptador de gráficos que tiene dos DisplayPorts pero no planeo usarlo. Cuando estaba usando el adaptador real, tenía un comportamiento lento. Cuando probé el muñeco, respondió muy bien. Así que espero crear otro muñeco.

Estoy usando KDE DM.

He visto muchos ejemplos del uso de VIRTUAL1 pero no puedo hacerlo funcionar con el controlador ficticio. Intenté agregar la opción "VirtualHeads" "2" a la configuración pero el controlador ficticio no la reconoce.

He visto sugerencias sobre el uso de Xvfb, pero el controlador ficticio lo ha desaprobado desde 2016.

Aquí hay algunos detalles.

$ 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á vacío

Lo siguiente se obtuvo de la búsqueda en Internet. Una vez que lo hice funcionar, dejé de modificarlo, por lo que puede tener fallas, pero eso no parece afectarme.

/usr/share/X11/xorg.conf.d/dummy-1920x1080.conf tiene lo siguiente que me da mi single 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)

Puedo ver en xrandr que mi monitor se llama "predeterminado". Entonces probé esto:

$ 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"

La última línea me da:

xrandr: Configure crtc 0 failed

Intenté aumentar VideoRam a 512000 (el doble) para asegurarme de tener espacio. No estoy seguro de qué hacer allí. Tengo 32G de ram.

Y TODOS los comandos xrandr me dan: xrandr: Failed to get size of gamma for output default y supongo que es porque es un monitor ficticio que no tiene gamma.

Actualmente estoy trabajando dentro de la sesión de VNC. ¿Necesito cerrar x11vnc para que se complete xrandx? Estoy al final de mi ingenio.

Estoy iniciando x11vnc así:

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

La caja de Linux está dentro de mi red local, por lo que no me preocupa la autenticación/contraseñas.

Editar 2021-05-27:

Más al acecho y encontré algunas opciones. Pude obtener una pantalla de doble ancho y luego crear dos instancias x11vnc. Pero esto no es óptimo. La máquina Linux todavía ve esto como una sola pantalla. Ahora, ¿hay alguna manera de tomar esa pantalla y decirle al cuadro de Linux que la divida? Por ejemplo, si maximizo una ventana en KDE, ¿no abarcará ambas pantallas locales?

Archivo de configuración de 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

Luego puedo conectarme a pantallas VNC :0 y :1 y organizarlas en monitores locales y cambiar el tamaño de las ventanas para que se ajusten a esos monitores.

Cuando aparece una ventana de diálogo, muchas veces está en medio de la "pantalla grande" de Linux que, para mí, abarca ambos monitores...

Editar 2021-11-12:

Una solución:https://superuser.com/a/1188573/514658

El verdadero problema es no poder hacer que mi visor VNC pase a pantalla completa y solo abarque dos de mis tres monitores. La única opción disponible en el visor es usar TODOS los monitores, lo que luego bloquea mi uso del lado de Windows. DisplayFusion en el enlace de arriba funcionó. Ahora puedo desplazarme sin problemas entre mis dos monitores y no quedarme atascado en el borde de uno.

Editar 2021-11-16:

"SOLUCIONADO": En lugar de usar DisplayFusion, que es un gran martillo, más búsquedas me llevaron a Windows PowerShell. No es necesaria una utilidad de terceros. Solo necesito mover/cambiar el tamaño de una ventana específica para que quepa en dos de mis tres monitores en pantalla completa. Aquí lo tienes:

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 )

Respuesta1

La siguiente configuración X me funciona en una estación de trabajo sin cabeza y permite monitores duales ficticios usando x11vnc + vncviewer. Utiliza un controlador ficticio X (dummy_drv.so). No he intentado configurar usando la aplicación Xvfb, que también puede funcionar. Sin embargo, KDE tiene algunos errores al mover ventanas.

# 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

información relacionada