
かなり調べた後、同僚のためにこの質問を投稿します。彼は、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
。