web-dev-qa-db-ja.com

X仮想フレームバッファ画面は1024x768ではなく1024x9216です

VNC経由で画面にアクセスしたいUbuntuLinuxでX仮想フレームバッファーサーバーを実行しました。

これが私のステップです:

  1. Xvfb :1.0 -screen 0 1024x768x16 &

  2. x11vnc -storepasswdでパスワードを設定します。

  3. x11vnc -display :1.0 -usepw -forever -ncache 10 -autoport 5900 &

    Using X display :1.0
    rootwin: 0x1a9 reswin: 0x200001 dpy: 0x174f920
    ...
    Default visual ID: 0x21
    Read initial data from X display into framebuffer.
    initialize_screen: fb_depth/fb_bpp/fb_Bpl 16/16/2048
    rfbNewFramebuffer(0x1797f20, 0x0, 1024, 9216, 5, 1, 2)
    ...
    X display :1.0 is 16bpp depth=16 true color
    

次に、macOSからVNCサーバーにアクセスします。

open vnc://my-vnc-ip:5901/

ただし、フレームバッファーが広すぎます(1024x9216)。これは、同時に表示される12個の余分な画面があるためです。理想的には、1024x768画面のみのディスプレイを1つだけにしたいです。

表示されている画面を期待どおりの解像度で表示できるようにするには、どうすれば修正できますか?

2
kenorb

この問題は、-ncache(実験的​​)オプションが原因で発生したようです。削除すると修正されます。

デフォルトで有効になっている場合は、-noncacheを使用して無効にしてみてください。

有効にすると、基本的にクライアント側のキャッシュスキームがアクティブになり、ピクセルデータをVNCビューア側にオフスクリーンで保存して、より高速に取得できるようになり、どのVNCビューアでも機能するはずです。ただし、一部のクライアントでは正しく機能していないようです。

したがって、正しいコマンドは次のようになります。

x11vnc -display :1.0 -usepw -forever -autoport 5900

その他のncache以外の場合は、 -clipオプション が役立つ場合があります。


buntuフォーラムスレッド によると、これが-ncacheの仕組みです。

デスクトップの高さを通常の10倍にし、ウィンドウとそのセーブアンダーをキャッシュするために追加のフレームバッファーを使用します。

KRDCにその領域を表示しないようにすることができない場合(たとえば、ウィンドウのサイズを変更することによって)、x11vnc -ncacheでKRDCを使用することはできません。

したがって、今のところ-ncacheの唯一の「サポート」は、ビューアがスクロールバーを持ち、自動スクロールを無効にできることです。または、unix/macosxではssvncを使用します。

詳細については、 x11vncはピクセルデータのクライアント側キャッシュを実行できますか? を参照してください。

-ncache nのnは、キャッシュに使用するベースフレームバッファーサイズを超える増加の係数です。これは偶数の整数であり、良好な応答を実現するには、かなり大きく6〜12にする必要があります。これには通常、クライアント側とサーバー側の両方で約50〜100MBの追加のRAMが必要です。たとえば、n = 6の場合、1280x1024ディスプレイは1280x7168のフレームバッファーを使用します。行1024の下のすべてがピクセルバッファキャッシュ。

1
kenorb