golangの日記

Go言語を中心にプログラミングについてのブログ

Ubuntu snap の Firefox が起動しない。 XPCOMGlueLoad error for file /snap/firefox/2356/usr/lib/firefox/libmozgtk.so: libgtk-3.so.0: cannot open shared object file: No such file or directory Couldn't load XPCOM.

default-gray.png


Firefox を起動しようとターミナルから $ firefox を実行すると

XPCOMGlueLoad error for file /snap/firefox/2356/usr/lib/firefox/libmozgtk.so:
libgtk-3.so.0: cannot open shared object file:
No such file or directory Couldn't load XPCOM.

というエラーが出て起動しなくなったので、その原因と解決方法。





Ubuntu のバージョン

$ cat /etc/lsb-release
  DISTRIB_ID=Ubuntu
  DISTRIB_RELEASE=22.04
  DISTRIB_CODENAME=jammy
  DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS"

Firefox のパス

$ type firefox
  firefox is hashed (/snap/bin/firefox)

$ ls -l /snap/bin/firefox
  lrwxrwxrwx 1 root root 13 Feb 16 12:19 /snap/bin/firefox -> /usr/bin/snap


エラーの内容をみると libgtk-3.so.0 というライブラリが開けないというものなので locatelibgtk-3.so.0 が存在するか確認するも何故かバッチリ在る

$ locate libgtk-3.so.0
  /snap/gnome-42-2204/56/usr/lib/x86_64-linux-gnu/libgtk-3.so.0
  /snap/gnome-42-2204/56/usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2404.31
  /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
  /usr/lib/x86_64-linux-gnu/libgtk-3.so.0.2404.29


ライブラリはあるので $ snap run firefox ではなく /snap 以下にあるバイナリを直接実行

$ /snap/firefox/current/usr/lib/firefox/firefox

すると、firefox は何ら問題なく起動する。


原因

リスト表示($ snap list)すると、gnome パッケージの Notes の項目が broken になっている。snap run firefox で起動すると snap の gnome-3-xx の何れかに在る libgtk-3.so.0 を使うようで、以前にストレージ容量を増やすため 古い snap パッケージ削除祭り をしたときに必要ないだろうと、削除してしまったのが原因かもしれない。

gnome-3-26-1604 ... broken
gnome-3-28-1804 ... broken
gnome-3-34-1804 ... broken
gnome-3-38-2004 ... broken


解決法

以下のスクリプトを実行して broken なパッケージを削除してインストールし直す

#!/bin/sh
set -x

_func_main() {
    local PKGS="`snap list | awk '/broken/{print $1}'`"
    for v in $PKGS; do
        sudo snap remove "$v"
    done
    for v in $PKGS; do
        sudo snap install "$v"
    done
}

_func_main