web-dev-qa-db-ja.com

新しいクライアントで、間接レンダリングを使用したX転送が失敗する

かなりの調査の後、同僚にこの質問を投稿する。彼はssh -X(または-Y)を介して古いCentos 4サーバーに接続し、そこでXアプリケーションを実行したいと考えています。以前は何年も問題なく動作していましたが、彼のクライアントPCに対する最近の更新(Centos 7とUbuntuの両方)により、これは不可能になりました。彼のアプリはハングし、単にglxgearsを実行しようとするとクラッシュします。

X Error of failed request:  BadValue (integer parameter out of range for operation)
Major opcode of failed request:  150 (GLX)
Minor opcode of failed request:  3 (X_GLXCreateContext)
Value in failed request:  0x0
Serial number of failed request:  19
Current serial number in output stream:  21

それは本当にクライアントのバージョンの問題です。クライアント側で以前のCentos 6に戻すと、再び機能します。サーバー側のX11ログには何もありません。異常なことに気付かずにstrace glxgearsを実行しました。これをさらに診断するにはどうすればよいですか?

編集:現代のLinuxでは、間接レンダリングコンテキストを強制する次の試みは失敗します:

glxinfo -i
name of display: :0
X Error of failed request:  BadValue (integer parameter out of range for operation)
Major opcode of failed request:  154 (GLX)
Minor opcode of failed request:  24 (X_GLXCreateNewContext)
Value in failed request:  0x0
Serial number of failed request:  39
Current serial number in output stream:  40

以下を試して、間接レンダリングを再度有効にしました。私が間違っていない限り、これらはすべてクライアントマシンで実行する必要があります。

  • 追加する/etc/X11/xorg.confのセクションScreenまたはDevice:

    オプション "AllowIndirectGLXProtocol" "True"

  • / usr/bin/startx(またはstartxがある場所):

    defaultserverargs = "+ iglx"

  • /usr/share/lightdm/lightdm.conf.d/50-xserver-command.confで、次の行を変更します。

    xserver-command = X -core + iglx

  • kDEを起動する前、たとえば.kde/env/igl.sh

    lIBGL_ALWAYS_INDIRECT = 1をエクスポート

それらのどれも動作しません。

7
dargaud

Linuxワークステーション

逆に、多くのバージョンの GDMは提供していません+iglxのような引数をXorgに渡す方法です。それに応じて、新しいX.orgバージョンには IndirectGLXオプション があります( example xorg.conf text も参照)。

そのオプションがない場合は、回避策として Xorg自体をシェルスクリプトでラップする

mv /usr/bin/Xorg /usr/bin/Xorg.original
echo -e '#!/usr/bin/env bash\nexec /usr/bin/Xorg.original "$@" +iglx' > /usr/bin/Xorg
chmod +x /usr/bin/Xorg
chcon --type=bin_t /usr/bin/Xorg

macOSワークステーション(XQuartz)

とにかく走れ

defaults write org.macosforge.xquartz.X11 enable_iglx -bool true

xQuartzが実行されている場合は再起動します。 (タイプミスに注意:ドメイン名と変数名のエラーチェックはありません。)

4
Davis Herring