ある日突然再起動したらGNOMEが正しく起動しなくなった。下記のような感じ。
journalctlでgnomeに関係するログを確認した所、下記のエラーを確認。
# journalctl | grep gnome (一部抜粋) Mar 07 14:00:01 localhost gnome-session-binary[10083]: GLib-CRITICAL: PCRE library is compiled without UTF8 support Mar 07 14:00:01 localhost gnome-session[10083]: gnome-session-binary[10083]: GLib-CRITICAL: PCRE library is compiled without UTF8 support Mar 07 14:00:01 localhost gnome-session[10083]: gnome-session-binary[10083]: GLib-CRITICAL: PCRE library is compiled without UTF8 properties support Mar 07 14:00:01 localhost gnome-session-binary[10083]: GLib-CRITICAL: PCRE library is compiled without UTF8 properties support Mar 07 14:00:02 localhost gnome-shell[10265]: PCRE library is compiled without UTF8 support Mar 07 14:00:02 localhost gnome-shell[10265]: PCRE library is compiled without UTF8 properties support Mar 07 14:00:02 localhost gnome-shell[10265]: PCRE library is compiled with incompatible options Mar 07 14:00:02 localhost gnome-shell[10265]: PCRE library is compiled with incompatible options Mar 07 14:00:02 localhost gnome-shell[10265]: JS ERROR: Error: Argument 'id' (type utf8) may not be null _getLocaleLayout@resource:///org/gnome/shell/misc/keyboardManager.js:137:42 wrapper@resource:///org/gnome/gjs/modules/_legacy.js:82:22 _init@resource:///org/gnome/shell/misc/keyboardManager.js:53:34 wrapper@resource:///org/gnome/gjs/modules/_legacy.js:82:22 _Base.prototype._construct@resource:///org/gnome/gjs/modules/_legacy.js:18:5 Class.prototype._construct/newClass@resource:///org/gnome/gjs/modules/_legacy.js:114:32 getKeyboardManager@resource:///org/gnome/shell/misc/keyboardManager.js:26:28 _init@resource:///org/gnome/shell/ui/status/keyboard.js:345:33 wrapper@resource:///org/gnome/gjs/modules/_legacy.js:82:22 _Base.prototype._construct@resource:///org/gnome/gjs/modules/_legacy.js:18:5 Class.prototype._construct/newClass@resource:///org/gnome/gjs/modules/_legacy.js:114:32 getInputSourceManager@resource:///org/gnome/shell/ui/status/keyboard.js:786:31 _init@resource:///org/gnome/shell/misc/inputMethod.js:23:36 wrapper@resource:///org/gnome/gjs/modules/_legacy.js:82:22 _initializeUI@resource:///org/gnome/shell/ui/main.js:180:19 start@resource:///org/gnome/shell/ui/main.js:133:5
今回の場合運良くsyslogにログがありました。
「GLib-CRITICAL: PCRE library is compiled without UTF8 support」と言っており、なぜかPCREライブラリ(libpcre)がUTF8サポート無しでコンパイルされているという。
ちょっとlddでgnome-shellのリンク状況を確認。
# ldd /usr/bin/gnome-shell | grep pcre libpcre.so.1 => /usr/local/lib/libpcre.so.1 (0x00007f3fda6eb000) #<--★
/usr/local/lib/libpcre.so.1を参照していた。
実はこの環境ではpcreをコンパイルでインストールされており、その際にUTF8 Supportのオプションを入れていなかった…というのが原因だった。
更にインストールされた際にldconfigコマンドを実施しなかった為、ldキャッシュが更新されずインストール直後は/usr/lib64以下にあるシステム標準のlibpcreを参照していて問題が発生しなかった。しかし再起動を行った際にldキャッシュが更新されてしまい、今回の問題が表面化した。その為原因となる操作から問題が発生するまで時間差があった。
システムが用意したライブラリは/usr/localには配置されないので、とりあえず/usr/local/lib以下のlibpcre関連は削除しましょう。ただし後からインストールしたソフトウェアが使えなくなる可能性もあるので、要注意。
# rm /usr/local/lib/libpcre*