X Die Weiterleitung mit indirektem Rendering schlägt bei neueren Clients fehl

7

Diese Frage für einen Kollegen nach einiger Recherche stellen. Er möchte über ssh -X(oder -Y) eine Verbindung zu einem alten Centos 4-Server herstellen und dort eine X-Anwendung ausführen. Früher lief es jahrelang einwandfrei, aber die jüngsten Updates (sowohl auf Centos 7 als auch auf Ubuntu) für seine Client-PCs machen dies jetzt unmöglich. Seine App hängt nur und der Versuch, einfach zu rennen, glxgearsführt zu einem Absturz:

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

Es ist wirklich ein Problem der Version des Clients. Wenn Sie auf der Clientseite auf frühere Centos 6 zurückgreifen, funktioniert es wieder. Das X11-Protokoll auf der Serverseite enthält nichts. Ich rannte, strace glxgearsohne etwas Außergewöhnliches zu bemerken. Was kann ich versuchen, dies weiter zu diagnostizieren?

BEARBEITEN: Unter jedem modernen Linux schlägt der folgende Versuch fehl, einen indirekten Renderkontext zu erzwingen:

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

Ich habe Folgendes versucht, um das indirekte Rendern wieder zu aktivieren. Sofern ich mich nicht irre, müssen alle diese Aufgaben auf dem Client-Computer ausgeführt werden:

  • In den Abschnitten Bildschirm oder Gerät von /etc/X11/xorg.conf fügen Sie Folgendes hinzu:

    Option "AllowIndirectGLXProtocol" "True"

  • in / usr / bin / startx (oder wo immer startx sich befindet):

    defaultserverargs = "+ iglx"

  • In /usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf ändern Sie die Zeile:

    xserver-command = X -core + iglx

  • vor dem Start von KDE, zum Beispiel in .kde / env / igl.sh

    export LIBGL_ALWAYS_INDIRECT = 1

Keine dieser Arbeiten.

Dargaud
quelle
3
Ich bin mir ziemlich sicher, dass das Problem von neueren X-Servern herrührt, die indirektes GLX standardmäßig deaktivieren. "glxinfo -i" schlägt auch lokal fehl und keine der Problemumgehungen scheint zu funktionieren.
Dargaud
Welchen Desktop Manager verwenden Sie? lightdm oder kdm? Sie scheinen die Einstellung für lightdm zu ändern, sind sich aber sicher, dass Sie lightdm anstelle des Standard-Desktop-Managers für KDE verwenden, der kdm ist?
Lie Ryan
1
Benötigt die App, die Ihr Kollege tatsächlich ausführen möchte, GL? Wenn nicht, scheinen Glxgears-Fehler wie ein roter Hering. Zweitens müssen sich Ihre ersten drei Problemumgehungen auf dem Computer befinden, auf dem der X- Server ausgeführt wird (der Ihr Desktop / Laptop ist), der vierte muss sich jedoch in der Umgebung des betreffenden X-Clients befinden (der auf dem Remote-Server ausgeführt wird). . Die X-Terminologie fühlt sich rückwärts an, also seien Sie bitte vorsichtig damit, sonst werden wir alle verwirrt sein!
Jamey Sharp
1
Ich hatte die knifflige Terminologie notiert und die ersten 3 richtig gemacht, aber die letzte auf der falschen Maschine. Was glxgears als roten Hering betrifft, ist es durchaus möglich, aber die Fehlermeldungen sind identisch, und da das Programm, das er ausführen muss, eine riesige, nicht mehr unterstützte kommerzielle Blackbox ist, ist es meine bisher beste Wahl, Tests durchzuführen.
Dargaud
1
Wir haben gerade alte Versionen von CentOS (6) und Ubuntu (14.10) mit "glxinfo -i" getestet, und wenn sie funktionieren, funktioniert seine Software. Also wird er von nun an nur noch in einer VM mit einem alten Betriebssystem arbeiten. Ich halte den Fall für abgeschlossen, auch wenn die Lösung auf neueren Linux-Geräten nirgends zu finden ist.
Dargaud

Antworten:

4

Linux-Workstation

Paradoxerweise viele Versionen bieten GDM nicht eine Möglichkeit , Argumente zu übergeben , wie +iglxzu Xorg. Als Reaktion darauf haben neue X.org - Versionen eine IndirectGLXOption (siehe auch Beispiel xorg.confText ).

In Ermangelung dieser Option ist es eine Abhilfe der Verpackung Xorgselbst mit einem Shell - Skript :

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 Workstation (XQuartz)

Renn einfach

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

und starten Sie XQuartz neu, wenn es ausgeführt wird. (Vorsicht vor Tippfehlern: Es gibt keine Fehlerprüfung bei den Domänen- und Variablennamen.)

Davis Herring
quelle