リモートのヘッドレス Linux 上の複数のダミー モニター (VNC からローカルの複数のモニターへ)

リモートのヘッドレス Linux 上の複数のダミー モニター (VNC からローカルの複数のモニターへ)

負けを認めます。リモート Linux ボックスを 2 つのダミー モニターに設定して、複数のローカル モニターを使用して VNC で接続できるようにしようとしています。Web で何かを見つけるのに、これについて助けを必要としている人が他にいないことに驚いています。

Linux ボックスで 2 倍の幅のモニターを作成することも試みました。次に、x11vnc を使用して各ディスプレイの領域をクリップします。ただし、ダミー ドライバーでその大きさのモニターを作成すると問題が発生します。

2 つの 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 (倍) に増やしてみました。何をすればいいのかわかりません。RAM は 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-05-27編集:

さらに調べてみると、いくつかのオプションが見つかりました。ダブルワイドスクリーンを取得して、2 つの x11vnc インスタンスを作成することができました。しかし、これは最適ではありません。Linux ボックスは、これをまだ 1 つのスクリーンとして認識しています。では、そのスクリーンを取得して Linux ボックスに分割するように指示する方法はありますか? たとえば、KDE ​​でウィンドウを最大化しても、両方のローカル スクリーンにまたがることはありませんか?

Xorg conf ファイル:

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編集:

解決策は1つ:https://superuser.com/a/1188573/514658

本当の問題は、VNC ビューアをフルスクリーンにできず、3 つのモニターのうち 2 つしか表示できないことです。ビューアで使用できる唯一のオプションは、すべてのモニターを使用することですが、これでは Windows 側の使用がブロックされます。上記のリンクにある DisplayFusion が役立ちました。これで、2 つのモニター間をシームレスにドラッグでき、一方のモニターの端に引っかかることがなくなりました。

2021-11-16編集:

「解決済み」: 大きなハンマーである DisplayFusion を使用する代わりに、さらに検索した結果、Windows PowerShell にたどり着きました。サードパーティのユーティリティは必要ありません。3 台のモニターのうち 2 台にフル スクリーンで収まるように、特定のウィンドウを移動/サイズ変更するだけです。これがその方法です。

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

関連情報