X11転送を使用したOpenGLレンダリング

X11転送を使用したOpenGLレンダリング

SSH -Yを介して接続されたリモートサーバーで実行可能ファイルを実行しようとしています。実行可能ファイルがOpenGLを使用しているようです。

サーバーはUbuntuを実行し、ローカルシステムはOSXを実行します。

ssh -Yは通常X11を介して自分のローカルコンピュータのディスプレイを開きます。これは他のアプリケーション(firefox、matlabなど)でもうまく機能します。

今回は次のようなメッセージをいただきました。

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request:  GLXBadContext
  Major opcode of failed request:  149 (GLX)
  Minor opcode of failed request:  6 (X_GLXIsDirect)
  Serial number of failed request:  35
  Current serial number in output stream:  34
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  149 (GLX)
  Minor opcode of failed request:  24 (X_GLXCreateNewContext)
  Value in failed request:  0x0
  Serial number of failed request:  34
  Current serial number in output stream:  35

私もglxinfoを実行し(フォーラムで見つけたことを試みていました)、これを得ました。

name of display: localhost:11.0
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request:  GLXBadContext
  Major opcode of failed request:  149 (GLX)
  Minor opcode of failed request:  6 (X_GLXIsDirect)
  Serial number of failed request:  23
  Current serial number in output stream:  22

この問題を解決するのに役立つ人はいますか?

ありがとうございます!

答え1

2021年5月5日に修正:XQuartz 2.8.0がリリースされると、設定パスorg.macosforge.xquartz.X11がから変更されているようですorg.xquartz.X11。同じ指示がまだ適用されます。将来から来た場合は、既存のパスを新しいパスに置き換えます。


ここにある回答は修正されましたが、職場から隔年でこの質問が出たときに今後の参考として使用できる別の回答を提出します。 :)

これは、Xが(SSH、Dockerなどを介して)渡されると頻繁に発生します。多くのX11サーバー(XQuartsやUbuntuの標準X11サーバーなど)でデフォルトで無効になっているOpenGL描画(iglx)を許可する必要があります。これに関して見ることができる他のログは次のとおりです。

XRequest.155: GLXBadContext 0x500003a
XRequest.155: BadValue (integer parameter out of range for operation) 0x0
XRequest.155: GLXBadContext 0x500003b
[xcb] Unknown sequence number while processing queue
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
../../src/xcb_io.c:259: poll_for_event: Assertion `!xcb_xlib_threads_sequence_lost' failed.

修正はiglxを有効にすることです。まず、使用しているXQuartsのバージョンがこの機能をサポートしていることを確認してください。この記事を書く時点の最新バージョンはこれですが、もはや使用されていないので、将来的にはそうではないかもしれません。私のバージョンはですXQuartz 2.7.11 (xorg-server 1.18.4)

次に、実行して設定さdefaults write org.macosforge.xquartz.X11 enable_iglx -bool trueれていることを確認できます。

$ defaults read org.macosforge.xquartz.X11
{
    "app_to_run" = "/opt/X11/bin/xterm";
    "cache_fonts" = 1;
    "done_xinit_check" = 1;
    "enable_iglx" = 1; ####### this should be truthy
    "login_shell" = "/bin/sh";
    "no_auth" = 0;
    "nolisten_tcp" = 0;
    "startx_script" = "/opt/X11/bin/startx -- /opt/X11/bin/Xquartz";
}

最後に、xquartz(またはマシン全体)を再起動してください。セキュリティと認証を無効にして再実行する必要があるかもしれませんxhost +(分離されたコンピュータには適していますが、インターネットにさらされているコンピュータには危険です)。これで、期待どおりにGUIアプリケーションを実行できます。役に立ったことを願っています!

答え2

皆さんの意見や提案をもとに、次のような方法で行うことができると思います。ランニング:

quartz-wm --help

これは次のように出力されます

usage: quartz-wm OPTIONS
Aqua window manager for X11.

--version                 Print the version string
--prefs-domain <domain>   Change the domain used for reading preferences
                          (default: org.xquartz.X11)

最後の行にはdefaultsドメインが表示されます。この場合、以下を使用して確認できます。

defaults read org.xquartz.X11

そして変えて

defaults write org.xquartz.X11 enable_iglx -bool true

今Zquartzを再起動する場合(終了またはログアウトしてから再度ログインまたは再起動して)、私はXquartz xtermセッションでsshセッションを開始する必要がありました。これは私に次のことを与えます:

nicola@raspy3:~ $ glxinfo                                                                                                                                                                      
name of display: localhost:10.0                                                                                                                                                                
libGL error: No matching fbConfigs or visuals found                                                                                                                                            
libGL error: failed to load driver: swrast                                                                                                                                                     
display: localhost:10  screen: 0                                                                                                                                                               
direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)                                                                                                            
server glx vendor string: SGI                                                                                                                                                                  
server glx version string: 1.4                                                                                                                                                                 
server glx extensions:                                                                                                                                                                         
    GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_visual_info,                                                                                                                          
    GLX_EXT_visual_rating, GLX_OML_swap_method, GLX_SGIS_multisample,                                                                                                                          
    GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group,                                                                                                                         
    GLX_SGI_make_current_read                                                                                                                                                                  

したがって、swastメッセージはまだ存在しますが、現在GLは機能しています。

PS:1行のコードで必要な設定を作成します。

defaults write `quartz-wm --help | awk '/default:.*X11/ { gsub(/\)/, "", $2); print $2}'` enable_iglx -bool true

答え3

Mac OS Mojaveでデフォルトを使用してターミナルアプリケーションに書き込んorg.macports.X11 enable_iglx -bool trueだ後、同じターミナルでXquartz +extension GLX`を実行しました。

その後、glxgearsを実行してラスタ操作を実行できますが、ディスプレイはメイン/ Retinaディスプレイの代わりに外部モニタの左上隅に配置され、サイズ変更/移動のためのフレームは描画されません。

これは、Nvidiaグラフィックスカードの不都合なドライバーサポートと1990年代のLinuxデスクトップを実行しようとしたことを思い出させます。 :)

freedesktop.orgのバグストアを確認した結果、Xquartz / X11はまだRetinaディスプレイをサポートしていないようです。いくつかのトリックがありますが、数年前、私のMacのXQuartzでWiresharkを実行することがどれほど過酷だったかを思い出させます。私はX11配信が正常に機能し、フレームを再描画するのに約3〜5分かかることを望んでいません。バラよりhttps://gitlab.freedesktop.org/xorg/xserver/-/issues/187

関連情報