Рабочая станция Linux

Рабочая станция Linux

Задаю этот вопрос коллеге после довольно долгого исследования. Он хочет подключиться к старому серверу Centos 4 через ssh -X(или -Y) и запустить там какое-нибудь приложение X. Раньше оно работало нормально в течение многих лет, но недавние обновления (как на 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не заметив ничего необычного. Что я могу попробовать диагностировать дальше?

EDIT: В любой современной версии 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 добавьте:

    Параметр "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

Ничего из этого не работает.

решение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.

Связанный контент