VNC에서 로컬 다중 모니터로의 원격 헤드리스 Linux의 다중 가상 모니터

VNC에서 로컬 다중 모니터로의 원격 헤드리스 Linux의 다중 가상 모니터

네가 이겼다. 여러 로컬 모니터를 사용하여 VNC를 통해 연결할 수 있도록 원격 Linux 시스템에 두 개의 가상 모니터를 갖도록 구성하려고 했습니다. 아무도 웹에서 무언가를 찾는 데 도움이 필요하지 않다는 사실이 놀랍습니다.

또한 Linux 시스템에서 이중 너비 모니터를 만들어 보았습니다. 그런 다음 x11vnc를 사용하여 각 모니터의 영역을 잘라냅니다. 하지만 가상 드라이버를 사용하여 이렇게 큰 디스플레이를 만드는 데 문제가 있습니다.

두 개의 DisplayPort가 있는 그래픽 어댑터를 설치했지만 사용할 계획이 없습니다. 실제 어댑터를 사용할 때 응답하지 않는 문제가 있었습니다. 가상 어댑터를 사용하려고 하면 반응이 매우 좋습니다. 그래서 다른 가상 어댑터를 만들고 싶습니다.

저는 KDE DM을 사용하고 있습니다.

VIRTUAL1을 사용하는 예를 많이 보았지만 가상 드라이버와 함께 작동하도록 할 수는 없습니다. 구성에 "VirtualHeads" "2" 옵션을 추가하려고 시도했지만 가상 드라이버가 이를 인식하지 못했습니다.

Xvfb를 사용하라는 제안을 보았지만 2016년부터 가상 드라이버에서 더 이상 사용되지 않습니다.

다음은 몇 가지 세부정보입니다.

$ 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가 비어 있습니다.

다음 내용은 인터넷 검색을 통해 수집되었습니다. 일단 작동하게 되면 결함이 있을 수 있으므로 조정을 중단했지만 그것은 나를 괴롭히지 않는 것 같습니다.

/usr/share/X11/xorg.conf.d/dummy-1920x1080.conf에는 단일 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)

xrandr에서 내 모니터가 "default"라고 불리는 것을 볼 수 있습니다. 그래서 나는 이것을 시도했습니다 :

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

마지막 줄은 나에게 다음을 제공합니다:

xrandr: Configure crtc 0 failed

공간이 있는지 확인하기 위해 VideoRam을 512000(이중)으로 늘려 보았습니다. 거기에서 무엇을 해야할지 잘 모르겠습니다. 32G 메모리가 있습니다.

모든 xrandr 명령은 다음을 제공합니다. xrandr: Failed to get size of gamma for output default 감마가 없는 가상 디스플레이이기 때문이라고 생각합니다.

현재 VNC 세션에서 작업 중입니다. xrandx를 완료하려면 x11vnc를 닫아야 합니까? 나는 어찌할 바를 모르고 있다.

다음과 같이 x11vnc를 시작합니다.

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

Linux 상자는 내 로컬 네트워크 내에 있으므로 인증/비밀번호는 신경 쓰지 않습니다.

2021년 5월 27일에 수정됨:

더 많이 숨어 있었고 몇 가지 옵션을 찾았습니다. 더블 와이드 스크린을 확보한 다음 두 개의 x11vnc 인스턴스를 생성할 수 있었습니다. 그러나 이것은 최적이 아닙니다. Linux 시스템에서는 여전히 단일 화면으로 표시됩니다. 이제 해당 화면을 가져오고 Linux 상자에 분할하도록 지시하는 방법이 있습니까? 예를 들어, KDE에서 창을 최대화하면 두 개의 로컬 화면에 걸쳐 있지 않습니까?

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

그런 다음 VNC에 연결하여 :0 및 :1을 표시하고 이를 로컬 모니터에 정렬하고 해당 모니터에 맞게 창 크기를 조정할 수 있습니다.

대화 상자 창이 나타나면 여러 번 Linux "큰 화면"의 중간에 나타납니다. 저에게는 두 모니터에 걸쳐 있었습니다.

2021년 11월 12일에 수정됨:

한 가지 해결책:https://superuser.com/a/1188573/514658

진짜 문제는 VNC 뷰어를 전체 화면으로 전환할 수 없고 모니터 3개 중 2개에서만 가능하다는 것입니다. 뷰어에서 사용할 수 있는 유일한 옵션은 모든 모니터를 사용하는 것인데, 이로 인해 Windows 쪽을 사용할 수 없습니다. 위 링크의 DisplayFusion이 작동했습니다. 이제 한 모니터의 가장자리에 갇히지 않고 두 모니터 사이를 원활하게 드래그할 수 있습니다.

2021년 11월 16일에 수정됨:

"해결됨": (큰 망치인) DisplayFusion을 사용하는 대신 추가 검색을 통해 Windows PowerShell을 찾았습니다. 타사 유틸리티가 필요하지 않습니다. 세 대의 모니터 중 두 대의 전체 화면에 맞게 특정 창을 이동/크기 조정하면 됩니다. 여기있어:

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 )

답변1

다음 X 구성은 헤드리스 워크스테이션에서 작동하며 x11vnc + vncviewer를 사용하여 듀얼 가상 모니터를 활성화합니다. X 더미 드라이버(dummy_drv.so)를 사용합니다. Xvfb 앱을 사용하여 설정을 시도하지 않았지만 작동할 수도 있습니다. 그러나 KDE에는 창 이동과 관련된 몇 가지 버그가 있습니다.

# 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

관련 정보