Автор Тема: P8 - nvidia(optimus) ,bumblebee, glxinfo - на что вешать багу?  (Прочитано 1271 раз)

Оффлайн ASte

  • Мастер
  • ***
  • Сообщений: 1 550
Конфигурация - ноутбук с двумя картами - Nvidia(optimus) + intel
Один ноутбук на Broadwell, второй - Ivy Bridge. Воспроизводится на обоих. Оба обновлены до P8.

Установлены проприетарный драйвер nvidia+bumblebeed.
Проверял на ядрах 4.1.21-std-def, 4.4.14-std-def, 4.5.7-un-def, 4.6.3-un-def - воспроизводится во всех случаях.

Вот такая последовательность:
$ glxinfo | grep OpenGL
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 5500 (Broadwell GT2)
OpenGL core profile version string: 4.3 (Core Profile) Mesa 12.0.1
OpenGL core profile shading language version string: 4.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 12.0.1
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
$ optirun glxinfo | grep OpenGL
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce 840M/PCIe/SSE2
OpenGL version string: 4.5.0 NVIDIA 361.45.11
OpenGL shading language version string: 4.50 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
$ glxinfo | grep OpenGL
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:  31
  Current serial number in output stream:  32
Что-то ломается внутри системы после переключения графики со встроенной на дискретную. Лечится перезагрузкой.

Обнаружил в общем то случайно, так как в основном сижу на intel-овской графике, но после самостоятельной сборки модуля nvidia для 4.6.3-un-def
решил проверить его работоспособность...

Оффлайн БарсSc

  • alt linux team
  • ***
  • Сообщений: 1 089
  • Intel_i7/nVidia_Optimus, AMD Ryzen 3 2200
Баги (30450, 30451) висят, реакции нет. Для KDE4 скрипт во вложении, запускается вручную двойным кликом, по анологии можно переделать под другие окружения или для запуска из консольки. Скрипт переключает библиотеки после отработки bumblebee.
« Последнее редактирование: 15.07.2016 08:47:46 от БарсSc »

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Напишите письмо Михаилу Ефремову - может у него какие-то соображения по этому поводу есть.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 925
    • Домашняя страница
    • Email
Ефремов в отпуске. Лучше в баги написать.
Андрей Черепанов (cas@)

Оффлайн ASte

  • Мастер
  • ***
  • Сообщений: 1 550
БарсSc
Я правильно понимаю, что этот скрипт должен выполниться после  завершения optirun при условии что в этот момент не выполняются другие  экземпляры optirun?
Если так то можно попробовать написать wrapper вокруг optirun.

Оффлайн ASte

  • Мастер
  • ***
  • Сообщений: 1 550
Создаем например в /opt два таких файла.
В предположении что пользователь в sudoers.
Далее возможны вариации в зависимости от предпочтений.
$ cat /opt/repair_glx
#!/bin/bash
/bin/echo "Переключаем на библиотеки intel_gpu"
/bin/ln -sf /usr/lib/X11/libEGL.so.1 /etc/X11/lib77libEGL.so.1;
/bin/ln -sf /usr/lib/X11/libGL.so.1 /etc/X11/lib/libGL.so.1;
/bin/ln -sf /usr/lib/X11/libglx.so /etc/X11/lib/libglx.so;
/bin/ln -sf /usr/lib64/X11/libEGL.so.1 /etc/X11/lib64/libEGL.so.1;
/bin/ln -sf /usr/lib64/X11/libGL.so.1 /etc/X11/lib64/libGL.so.1;
/bin/ln -sf /usr/lib64/X11/libglx.so /etc/X11/lib64/libglx.so;
/bin/ln -sf /usr/lib64/X11/libGLESv2.so.2 /etc/X11/lib64/libGLESv2.so.2

$ cat /opt/opti-run
#!/bin/bash
/usr/bin/optirun $1 $2 $3 $4 $5 $6 $7 $8 $9
/bin/sleep 2s
/bin/ps -A | /bin/grep optirun
if [ "$?" ==   "1" ]
then
    /usr/bin/sudo /opt/repair_glx
/usr/bin/glxinfo | /bin/grep OpenGL;
/bin/sleep 5s
fi
« Последнее редактирование: 15.07.2016 22:37:15 от ASte »

Оффлайн БарсSc

  • alt linux team
  • ***
  • Сообщений: 1 089
  • Intel_i7/nVidia_Optimus, AMD Ryzen 3 2200
БарсSc
Я правильно понимаю, что этот скрипт должен выполниться после  завершения optirun при условии что в этот момент не выполняются другие  экземпляры optirun?
Если так то можно попробовать написать wrapper вокруг optirun.
Да, правильно поняли (optirun/primusrun). Экспериментируйте, о результатах напишите, если несложно )
« Последнее редактирование: 15.07.2016 19:08:43 от БарсSc »

Оффлайн ASte

  • Мастер
  • ***
  • Сообщений: 1 550
А выше и есть результат экспериментов - два скрипта в /opt
Один проверяет после завершения optirun нет ли еще процессов с таким именем в памяти - если есть то скрипт завершает работу
если нет то через sudo (или через su - тут кому как нравится) вызывает второй скрипт который переключает библиотеки обратно на интел.

А вариации там уже - можно переименовать optirun в другое имя и свой скрипт назвать optirun. Можно в sudoers отключить запрос пароля для скрипта который переключает библиотеки. Можно ему suid бит поставить и запускать вообще без su и без sudo...