更新后 GLX 仅适用于 root (nvidia)

pio*_*rek 5 xorg opengl sudo graphics nvidia

今天我做了更新并glx停止为非 root 用户工作:

$ glxinfo
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:  81
  Current serial number in output stream:  82
Run Code Online (Sandbox Code Playgroud)

但是当我以 root 身份运行它时,一切都很好:

$ sudo glxinfo
name of display: :0
display: :0  screen: 0
direct rendering: Yes
server glx vendor string: NVIDIA Corporation
server glx version string: 1.4
server glx extensions:
    GLX_ARB_create_context, GLX_ARB_create_context_profile, 
...
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GT 430/PCIe/SSE2
OpenGL core profile version string: 4.2.0 NVIDIA 304.132
OpenGL core profile shading language version string: 4.20 NVIDIA via Cg compiler
...
Run Code Online (Sandbox Code Playgroud)

Ubuntu 14.04。但是这里的opensuse报告了同样的问题

$ uname -a
Linux xxx 4.4.0-45-generic #66~14.04.1-Ubuntu SMP Wed Oct 19 15:05:38 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

唯一未注释的行/etc/X11/Xwrapper.config

allowed_users=console
Run Code Online (Sandbox Code Playgroud)

并且没有具有该名称的组或用户。

英伟达设备权限:

$ ls -l /dev/nvid*
crw-rw-rw- 1 root root 195,   0 lis  5 00:24 /dev/nvidia0
crw-rw-rw- 1 root root 195, 255 lis  5 00:24 /dev/nvidiactl
Run Code Online (Sandbox Code Playgroud)

pio*_*rek 4

这个解决了我的问题:

显然,目前唯一的解决方案是降级到以前的驱动程序版本(304.131)。

您可以通过以下方式找到 Ubuntu 的 304.131 驱动程序:

  • 转到https://launchpad.net/ubuntu/+source/nvidia-graphics-drivers-304/+publishinghistory
  • 找到您需要的版本,然后点击版本号
  • 在下一页上,在“Builds”下查找您的 Ubuntu 版本,然后单击版本名称后面的amd64或链接i386
  • 在下一页上,在“构建文件”下查找以“nvidia-304_304.131”开头的 .deb 文件。下载该文件。
  • 打开终端并运行 sudo dpkg -i *path-to-downloaded-.deb-file* 以安装下载的版本

稍后只需锁定软件包版本:sudo apt-mark hold nvidia-304。当 nvidia 修复其驱动程序时,不要忘记解锁软件包:sudo apt-mark unhold nvidia-304