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:
alacrittyMetadata
"x86_64-linux"Linux 5.5.4, NixOS, 20.09.git.e2b4abe3c8f (Nightingale)yesyesnix-env (Nix) 2.3.3""""/etc/nixos/nixpkgsIt 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.
Most helpful comment
I also recommend using tools like home-manager over
nix-envto maintain packages. This usually avoids having to remember updating packages.