現象
X11 の GLXモジュールが動かない。 x11-toolkits/nanogui を利用したプログラムを動かそうとすると、 GLXモジュールが有効でないから動かないよという感じのメッセージが出てくる。
NVIDIAのGPUを使っていたけど、ほかのGPUに変えた場合にこの問題に当たりがち。
エラーメッセージ
GLX モジュールが動いていないと言われるので GLX で /var/log/Xorg.0.log を検索すると、 私の場合はこういうログがあった。
[ 76.231] (II) LoadModule: "glx" [ 76.281] (II) Loading /usr/local/lib/xorg/modules/extensions/libglx.so [ 77.680] (II) Module glx: vendor="NVIDIA Corporation" [ 77.680] compiled for 4.0.2, module version = 1.0.0 [ 77.680] Module class: X.Org Server Extension [ 77.680] (II) NVIDIA GLX Module 390.144 Wed Jun 2 22:59:08 UTC 2021 ... [ 79.604] (II) Initializing extension GLX [ 79.604] (EE) Failed to initialize GLX extension (Compatible NVIDIA X driver not found)
ここで「あれ? NVIDIAのGPUから乗り換えたのに」と思えていれば解決は早かったのだろうが、 StackExchangeのQ&A で説明を見るまではなんでか理解していなかった。
対処法
x11/nvidia-driver* と x11-servers/xorg-server をアンインストールして、 x11-servers/xorg-server をインストールしなおす。
これでうまく行くはずだけど、それでもログのエラーメッセージが変わらなかったら、 /usr/local/lib/xorg/modules/extensions/.xorg/libglx.so を /usr/local/lib/xorg/modules/extensions/libglx.so にコピーすればよい。
要するに、/usr/local/lib/xorg/modules/extensions/libglx.so が nvidia-server のもので、 xorg ではなくてそちらがロードされてしまうのが問題なのだ。
そうすると /var/log/Xorg.0.log のメッセージは次のようになるはず。
[ 74.516] (II) LoadModule: "glx" [ 74.520] (II) Loading /usr/local/lib/xorg/modules/extensions/libglx.so [ 75.449] (II) Module glx: vendor="X.Org Foundation" [ 75.449] compiled for 1.20.14, module version = 1.0.0 [ 75.449] ABI class: X.Org Server Extension, version 10.0 ... [ 77.773] (II) Initializing extension GLX [ 77.778] (II) AIGLX: Loaded and initialized radeonsi [ 77.778] (II) GLX: Initialized DRI2 GL provider for screen 0