Linuxワークステーション

Linuxワークステーション

かなり調べた後、同僚のためにこの質問を投稿します。彼は、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 が配置されている場所) で:

    デフォルトサーバ引数="+iglx"

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

    xserverコマンド=X -core +iglx

  • KDEを起動する前に、例えば.kde/env/igl.shで

    LIBGL_ALWAYS_INDIRECT=1 をエクスポートする

どれも機能しません。

答え1

Linuxワークステーション

奇妙なことに、多くのバージョンではGDMは提供していない+iglxのような引数を渡す方法Xorg。これに応じて、新しいX.orgバージョンでは、IndirectGLXオプション(参照サンプルxorg.confテキスト)。

そのオプションがない場合、回避策として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 が実行中の場合は再起動します。(入力ミスに注意してください。ドメイン名と変数名のエラー チェックはありません。) 最近のバージョンでは、より単純な を使用しますorg.xquartz.X11

関連情報