ある日突然再起動したら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*