labs.yukke.org BLOG

【X Window】nVidiaドライバのGLXが有効になっていないときの直し方

2018-08-19
タグ: Linux, X.org, nVidia, GLX

先日、艦これの第2期がリリースされ、早速Firefoxで起動してみたところ、これがめちゃくちゃ動作が鈍く、CPUもすべてのコアで100%利用している状態でした。config:supportでFirefoxの状態を確認してみたところ、GLX利用にnVidiaのドライバを参照しておらず、ソフトウエアエミュレーションで動いていました。

X Window system の起動ログを調べてみたところ、以下のようにnVidiaが提供するGLXモジュールの読み込みに失敗していました。

(EE) NVIDIA(0): Failed to initialize the GLX module; please check in your X
(EE) NVIDIA(0):     log file that the GLX module has been loaded in your X
(EE) NVIDIA(0):     server, and that the module is the NVIDIA GLX module.  If
(EE) NVIDIA(0):     you continue to encounter problems, Please try
(EE) NVIDIA(0):     reinstalling the NVIDIA driver.

Google先生に効いてみたところ、Debianのメーリングリストに解決策がありました。曰く、X Window System を司る X.org が ver.1.20 からエクステンションを読むファイルパスの変更があったが、nVidiaドライバパッケージがインストールするGLXエクステンションは、変更先に展開サれていなかったことが問題とのことで、変更されたパスにGLXエクステンションのファイルをコピーするか、シンボリックリンクを作成することで改善できるそうです。

なお、私の環境であるDebianでは、glxエクステンションに関して切り替えが用意にできるよう、update-alternativeに似たupdate-glxというコマンドが別途用意されており、それが作成する/etc/alternatives/glx--linux-libglx.soにシンボリックリンクを作成することで、対応しました。

sudo mv /usr/lib/xorg/modules/extensions/libglx.so{,.old} 
# ↑すでに存在していることがあるので、そのファイルの名前を変更

sudo ln -s /etc/alternatives/glx--linux-libglx.so /usr/lib/xorg/modules/extensions/libglx.so 

X Window System を一度ログインしなおして、X Window Systemの起動ログを確認したところ、上記のようなエラーは出力されていませんでしたので、問題なくGLXの初期化ができました。そして、Firefoxを起動してconfig:supportで状態を確認したところ、NVidiaのドライバにアクセスしていました。艦これを起動してみたところ、軽快に動作するようになり、CPU使用率も10%程度で落ち着きました。