我有一个通过nix
构建的私有仓库(如果重要的话,repo是一个Haskell + Stack项目)。特别是,这个repo有一些低级别的图形依赖,包括(在顶层):
buildInputs = with pkgs; [ mesa
xorg.pixman
wayland-protocols
wayland
xorg.libX11
dbus
weston
];
我正在构建此repo的系统是Arch Linux机器(在程序包管理器外部安装了nix
)。
该程序编译良好,但是当我启动它时,我得到了灵魂破坏的运行时错误:
Loading module '/nix/store/98ipsxd20n5nw71q1kjpb5kyr55ysx7y-weston-2.0.0/lib/libweston-2/x11-backend.so'
Loading module '/nix/store/98ipsxd20n5nw71q1kjpb5kyr55ysx7y-weston-2.0.0/lib/libweston-2/gl-renderer.so'
EGL client extensions: EGL_EXT_client_extensions EGL_EXT_platform_base
EGL_KHR_client_get_all_proc_addresses EGL_KHR_debug
EGL_EXT_platform_wayland EGL_EXT_platform_x11
EGL_MESA_platform_gbm
libEGL warning: DRI2: failed to authenticate
libEGL warning: DRI2: failed to open swrast (search paths /run/opengl-driver/lib/dri)
failed to initialize display
EGL error state: EGL_NOT_INITIALIZED (0x3001)
Socket: wayland-0
program-name: user error (Failed compiling shader Shader {shaderID = 0})
问题在于它在/run/opengl-driver/lib/dri
中搜索,这是一条NixOS特定路径。事实上 - 当我在我的二级NixOS系统上构建和启动这个程序时,它编译并运行得很好。
在非NixOS系统上修复此问题的可怕黑客就是运行:
sudo ln -s /nix/store/*-mesa-noglu-*-drivers /run/opengl-driver
问题:这个问题是否有更优雅的Nixish解决方案?