
Ich stelle diese Frage für einen Kollegen, nachdem ich ziemlich viel recherchiert habe. Er möchte sich über ssh -X
(oder -Y
) mit einem alten Centos 4-Server verbinden und dort eine X-Anwendung ausführen. Das lief jahrelang einwandfrei, aber die jüngsten Updates (sowohl für Centos 7 als auch für Ubuntu) seiner Client-PCs machen dies nun unmöglich. Seine App hängt einfach und der Versuch, sie einfach auszuführen, glxgears
fü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 mit der Client-Version. Wenn ich clientseitig auf die frühere Version Centos 6 zurücksetze, funktioniert es wieder. Im X11-Protokoll auf der Serverseite steht nichts. Ich habe es ausgeführt, strace glxgears
ohne etwas Ungewöhnliches zu bemerken. Was kann ich versuchen, um dies weiter zu diagnostizieren?
BEARBEITEN: Unter jedem modernen Linux schlägt der folgende Versuch, einen indirekten Rendering-Kontext zu erzwingen, fehl:
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 Rendering wieder zu aktivieren. Wenn ich mich nicht irre, müssen all diese Schritte auf dem Client-Rechner durchgeführt werden:
In den Abschnitten „Screen“ oder „Device“ von /etc/X11/xorg.conf fügen Sie Folgendes hinzu:
Option „AllowIndirectGLXProtocol“ „True“
in /usr/bin/startx (oder wo auch immer startx liegt):
Standardserverargs="+iglx"
in /usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf ändern Sie die Zeile:
xserver-Befehl=X -core +iglx
vor dem Start von KDE, beispielsweise in .kde/env/igl.sh
exportiere LIBGL_ALWAYS_INDIRECT=1
Nichts davon funktioniert.
Antwort1
Linux-Workstation
Paradoxerweise viele Versionen vonGDM bietet nicht+iglx
eine Möglichkeit, Argumente wie an zu übergeben Xorg
. Als Reaktion darauf haben neue X.org-Versionen eineIndirectGLX
Möglichkeit(siehe auchBeispieltextxorg.conf
).
Wenn diese Option nicht vorhanden ist, gibt es einen Workaround:Xorg
sich selbst mit einem Shell-Skript umschließen:
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)
Lauf einfach
defaults write org.macosforge.xquartz.X11 enable_iglx -bool true
und starten Sie XQuartz neu, wenn es ausgeführt wird. (Achten Sie auf Tippfehler: Es gibt keine Fehlerprüfung für die Domänen- und Variablennamen.) Neuere Versionen verwenden das einfachere org.xquartz.X11
.