Nixpkgs: Alacritty won't start - found no glX extensions

Created on 21 Feb 2020  Â·  12Comments  Â·  Source: NixOS/nixpkgs

Describe the bug

Since last update on nixos-unstable, I can't launch Alacritty. I get this error:

Alacritty encountered an unrecoverable error:
         Error creating GL context; Received multiple errors. Errors: `[OsError("Could not create EGL display object"), OsError("`glXQueryExtensionsString` found no glX extensions")]`

cc @filalex77 @Mic92

To Reproduce
Steps to reproduce the behavior:

  1. run alacritty

Metadata

  • system: "x86_64-linux"
  • host os: Linux 5.5.4, NixOS, 20.09.git.e2b4abe3c8f (Nightingale)
  • multi-user?: yes
  • sandbox: yes
  • version: nix-env (Nix) 2.3.3
  • channels(karol): ""
  • channels(root): ""
  • nixpkgs: /etc/nixos/nixpkgs
bug

Most helpful comment

I also recommend using tools like home-manager over nix-env to maintain packages. This usually avoids having to remember updating packages.

All 12 comments

It might be the case that it does not find your opengl driver.
The same version works on my system (TM).

$ alacritty  --version
alacritty 0.4.1

First of all verify that alacritty finds your opengl driver.

╭─[~]
╰─ % strace -f -o /tmp/alacritty alacritty

╭─[~]
╰─ % grep opengl /tmp/alacritty
12661 openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 7
12661 openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d/50_mesa.json", O_RDONLY) = 7
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/haswell/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 stat("/run/opengl-driver/lib/tls/haswell/x86_64", 0x7ffdff5fd160) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/haswell/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 stat("/run/opengl-driver/lib/tls/haswell", 0x7ffdff5fd160) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 stat("/run/opengl-driver/lib/tls/x86_64", 0x7ffdff5fd160) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 stat("/run/opengl-driver/lib/tls", 0x7ffdff5fd160) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/haswell/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 stat("/run/opengl-driver/lib/haswell/x86_64", 0x7ffdff5fd160) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/haswell/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 stat("/run/opengl-driver/lib/haswell", 0x7ffdff5fd160) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 stat("/run/opengl-driver/lib/x86_64", 0x7ffdff5fd160) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = 7
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/dri/tls/i965_dri.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
12661 openat(AT_FDCWD, "/run/opengl-driver/lib/dri/i965_dri.so", O_RDONLY|O_CLOEXEC) = 8

My result, but I'm not sure how to interpret it...

19732 openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 7
19732 openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d/50_mesa.json", O_RDONLY) = 7
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/haswell/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 stat("/run/opengl-driver/lib/tls/haswell/x86_64", 0x7ffd83e90630) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/haswell/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 stat("/run/opengl-driver/lib/tls/haswell", 0x7ffd83e90630) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 stat("/run/opengl-driver/lib/tls/x86_64", 0x7ffd83e90630) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/tls/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 stat("/run/opengl-driver/lib/tls", 0x7ffd83e90630) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/haswell/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 stat("/run/opengl-driver/lib/haswell/x86_64", 0x7ffd83e90630) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/haswell/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 stat("/run/opengl-driver/lib/haswell", 0x7ffd83e90630) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 stat("/run/opengl-driver/lib/x86_64", 0x7ffd83e90630) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = 7
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = 7
19732 openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)

Oh, and I have a previous version of alacritty:

alacritty  --version
alacritty 0.4.0

It should load at least one graphics driver from /run/opengl-driver/lib/dri (i915_dri.so in my case). It does not do so on your machine. I am not an expert on graphic cards but somebody else might able to help you if you also share your details on your graphic card (Nvidia, Intel integrated graphic card etc).

Ok, thanks @Mic92 ! I have Intel HD Graphics 530, but not sure which driver corresponds to it... Will rollback to the previous generation of Nixos and check.

BTW, can't run those commands either:

➜  ~ glxinfo                                                                                                                                                                   ~
name of display: :0.0
Error: couldn't find RGB GLX visual or fbconfig

➜  ~ glxgears                                                                                                                                                                  ~
Error: couldn't get an RGB, Double-buffered visual

Do you have this set? https://github.com/Mic92/dotfiles/blob/master/nixos/modules/intel-graphics.nix#L5 We also have https://github.com/NixOS/nixos-hardware/ which might help getting opengl to work for some devices.

My hardware-configuration.nix:

  boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "sd_mod" "rtsx_pci_sdmmc" ];
  boot.kernelModules = [ "kvm-intel" ];
  boot.extraModulePackages = [ ];
  boot.blacklistedKernelModules = ["mei_wdt"];

I rollbacked to previous working NixOS generation and I have this:

➜  ~ glxinfo | grep -i vendor                                                                                                              ~
server glx vendor string: SGI
client glx vendor string: Mesa Project and SGI
    Vendor: Intel Open Source Technology Center (0x8086)
OpenGL vendor string: Intel Open Source Technology Center

strace for alacritty (working now):

2610  openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 8
2610  openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d/50_mesa.json", O_RDONLY) = 8
2610  openat(AT_FDCWD, "/run/opengl-driver/lib/tls/haswell/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610  stat("/run/opengl-driver/lib/tls/haswell/x86_64", 0x7ffd6b7bea10) = -1 ENOENT (No such file or directory)
2610  openat(AT_FDCWD, "/run/opengl-driver/lib/tls/haswell/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610  stat("/run/opengl-driver/lib/tls/haswell", 0x7ffd6b7bea10) = -1 ENOENT (No such file or directory)
2610  openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610  stat("/run/opengl-driver/lib/tls/x86_64", 0x7ffd6b7bea10) = -1 ENOENT (No such file or directory)
2610  openat(AT_FDCWD, "/run/opengl-driver/lib/tls/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610  stat("/run/opengl-driver/lib/tls", 0x7ffd6b7bea10) = -1 ENOENT (No such file or directory)
2610  openat(AT_FDCWD, "/run/opengl-driver/lib/haswell/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610  stat("/run/opengl-driver/lib/haswell/x86_64", 0x7ffd6b7bea10) = -1 ENOENT (No such file or directory)
2610  openat(AT_FDCWD, "/run/opengl-driver/lib/haswell/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610  stat("/run/opengl-driver/lib/haswell", 0x7ffd6b7bea10) = -1 ENOENT (No such file or directory)
2610  openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610  stat("/run/opengl-driver/lib/x86_64", 0x7ffd6b7bea10) = -1 ENOENT (No such file or directory)
2610  openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = 8
2610  openat(AT_FDCWD, "/run/opengl-driver/lib/dri/tls/i965_dri.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
2610  openat(AT_FDCWD, "/run/opengl-driver/lib/dri/i965_dri.so", O_RDONLY|O_CLOEXEC) = 9
2617  write(1, " alacritty_opengl.log\t\t\t drivers"..., 50 <unfinished ...>
2618  read(13, " alacritty_opengl.log\t\t\t drivers"..., 65536) = 90

Seems like i965_dri.so is being used. I have this in /run/opengl-driver/lib/dri/

-r-xr-xr-x 6 root root 13968872 Jan  1  1970 i915_dri.so*
-r-xr-xr-x 6 root root 13968872 Jan  1  1970 i965_dri.so*
-r-xr-xr-x 9 root root 17878056 Jan  1  1970 kms_swrast_dri.so*
-r-xr-xr-x 9 root root 17878056 Jan  1  1970 nouveau_dri.so*
-r-xr-xr-x 4 root root 10185608 Jan  1  1970 nouveau_drv_video.so*
-r-xr-xr-x 6 root root 13968872 Jan  1  1970 nouveau_vieux_dri.so*
-r-xr-xr-x 6 root root 13968872 Jan  1  1970 r200_dri.so*
-r-xr-xr-x 9 root root 17878056 Jan  1  1970 r300_dri.so*
-r-xr-xr-x 9 root root 17878056 Jan  1  1970 r600_dri.so*
-r-xr-xr-x 4 root root 10185608 Jan  1  1970 r600_drv_video.so*
-r-xr-xr-x 6 root root 13968872 Jan  1  1970 radeon_dri.so*
-r-xr-xr-x 9 root root 17878056 Jan  1  1970 radeonsi_dri.so*
-r-xr-xr-x 4 root root 10185608 Jan  1  1970 radeonsi_drv_video.so*
-r-xr-xr-x 9 root root 17878056 Jan  1  1970 swrast_dri.so*
-r-xr-xr-x 9 root root 17878056 Jan  1  1970 virtio_gpu_dri.so*
-r-xr-xr-x 9 root root 17878056 Jan  1  1970 vmwgfx_dri.so*

So I'll add i965 to kernelModules and see if it works.

I tried with kernelModule i965, and pkgs.vaapiIntel to opengl, still the same. I'll try more stuff this weekend, thanks @Mic92 for your help!

I'm getting the same error but I've got an AMD RS880.

But on my current generation (nixpkgs e2b4abe3c8f) it tries all of these:

openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 7
openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d/50_mesa.json", O_RDONLY) = 7
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls/x86_64/x86_64", 0x7fff4815d530) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls/x86_64", 0x7fff4815d530) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls/x86_64", 0x7fff4815d530) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls", 0x7fff4815d530) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/x86_64/x86_64", 0x7fff4815d530) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/x86_64", 0x7fff4815d530) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/x86_64", 0x7fff4815d530) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)

But on my previous nixos generation (nixpkgs 8130f3c1c2b) using alacritty 0.4.1 it is working properly.

openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 7
openat(AT_FDCWD, "/run/opengl-driver/share/glvnd/egl_vendor.d/50_mesa.json", O_RDONLY) = 7
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls/x86_64/x86_64", 0x7ffcb8826270) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls/x86_64", 0x7ffcb8826270) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls/x86_64", 0x7ffcb8826270) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/tls/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/tls", 0x7ffcb8826270) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/x86_64/x86_64", 0x7ffcb8826270) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/x86_64", 0x7ffcb8826270) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/x86_64/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/run/opengl-driver/lib/x86_64", 0x7ffcb8826270) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/libGLX_mesa.so.0", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/run/opengl-driver/lib/dri/tls/r600_dri.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/opengl-driver/lib/dri/r600_dri.so", O_RDONLY|O_CLOEXEC) = 8

I experienced a similar problem with glxinfo, glxgears, and steam installed by nix-env. Forcibly upgrading them by nix-env -u ... --always fixed the issue.

It seems that the problem was caused by the application and its dependencies linking to an older version of glibc than what /run/opengl-driver/lib/libGLX_mesa.so.0 links to, though I'm not entirely sure how all of this works.

$ objdump -x glxgears-fail | grep glibc
  RUNPATH              [...]:/nix/store/qn76sklvyalzw9ilnxz6sh0020gl2qn6-glibc-2.27/lib
$ objdump -x glxgears-ok | grep glibc
  RUNPATH              [...]:/nix/store/8g1v3sf0xvf044sz1b4kcrg1i86z9bh7-glibc-2.30/lib
objdump -x /run/opengl-driver/lib/libGLX_mesa.so.0 | grep glibc
  RUNPATH              [...]:/nix/store/1ncwrl8bplq3xhmj8pxfkx4y0i90vmnx-glibc-2.30/lib:[...]

When LD_DEBUG=files is given, glxgears-fail produces the following output:

$ env LD_DEBUG=files ./glxgears-fail
[...]
      3828: file=libGLX_mesa.so.0 [0];  dynamically loaded by /nix/store/ym4x1sv39xgsc4hvhdnmavbwy4yg2wsc-libglvnd-1.2.0/lib/libGLX.so.0 [0]
      3828: file=libGLX_mesa.so.0 [0];  generating link map
      3828:   dynamic: 0x00007f7339a124c0  base: 0x00007f7339998000   size: 0x00000000000846e8
      3828:     entry: 0x00007f73399b4ee0  phdr: 0x00007f7339a15000  phnum:                 10
[...]
      3828: /nix/store/qn76sklvyalzw9ilnxz6sh0020gl2qn6-glibc-2.27/lib/libm.so.6: error: version lookup error: version `GLIBC_2.29' not found (required by /run/opengl-driver/lib/libGLX_mesa.so.0) (fatal)
      3828:
      3828: file=/run/opengl-driver/lib/libGLX_mesa.so.0 [0];  destroying link map

I confirm that nix-env -u ... --always fixes the problem.

There is a thread on discourse that explains the reasons behind this kind of problems with libGL:
https://discourse.nixos.org/t/libgl-undefined-symbol-glxgl-core-functions/512/6

I'll close this issue as there is apparently no solution.

I also recommend using tools like home-manager over nix-env to maintain packages. This usually avoids having to remember updating packages.

Was this page helpful?
0 / 5 - 0 ratings