Ubuntu Weekly Recipe

第714回 Firefoxを含むsnapパッケージとの付き合い方

この記事を読むのに必要な時間:およそ 5.5 分

Ubuntu 22.04 LTSではFirefoxがsnapパッケージに完全に移行しました。実際に使ってみると,これまでといろいろ違う部分で戸惑っている人もいることでしょう。今回は改めてFirefoxを含むsnapパッケージの使い方について説明します。

snap版Firefoxは罠が多い

第710回のSnap版Firefoxを使用しないでやり過ごすでも解説したように,UbuntuのFirefoxパッケージは21.10からsnap版に移行し,22.04からDebianパッケージ版(debファイル版)が削除されました。

22.04のリリースまでにsnapに起因する多くの不具合が修正されたものの,まだたくさん残っている状態です。もしsnap版Firefoxで「うまく動かない」⁠何かおかしい」と感じ,なおかつそれが致命的であれば,とりあえず第710回にあるように他の手段を使うことをおすすめします。また,20.04を使い続けたり,Ubuntu以外のディストリビューションを使うという手もあるでしょう。ただしUbuntuの公式派生ディストリビューションは,22.04でsnap版Firefoxに移行しているため注意が必要です。

snapパッケージの作り方を解説した第654回snapパッケージング入門でも紹介しているように,snapは「ユニバーサルパッケージ」という扱いです。これはFlatpakなどと同じように,システムのファイルシステムからは独立したルートファイルシステムを持ち,AppArmorやseccompを使ってコンテナのような隔離環境の中でアプリケーションを動かします。

結果的に隔離されすぎて「これまで普通にできたことができなくなる」という問題を抱えているのです。代表的なものだけでも次のような制限があります。

  • ホームディレクトリの外および/mediaの外にはアクセスできない
  • ホームディレクトリの位置が決め打ち
  • ネットワーク共有ファイルを読み書きできない
  • システムに影響を与える拡張機能を動かせない
  • 起動に時間がかかる

たとえばFirefoxの場合なら,ファイルをホームディクトリ以外の任意の場所にダウンロードする際にエラーになります。他にもwgetコマンドなどで/tmp以下にダウンロードしたHTMLファイルを,Firefoxで開こうとしてもエラーになるでしょう。これに関しては,今のところよく使用するディレクトリをホームディクトリにbindマウントするぐらいしか手はありません。ちなみに/mediaの下であればアクセス可能です。

さらにホームディレクトリを/home以外の場所にしている場合はFirefox自体が起動しません。これはFirefoxと言うよりはsnap側の問題です。

また,Firefoxがシステムリソースから隔離された結果,Firefox上からKeePassXやGNOME Shellの拡張機能の管理などが動きません。これらに関しては将来的に解消される見込みですが,まだ対応時期までは不明です。ただしsnap化された利点として,修正されたら比較的すぐにUbuntu 22.04 LTSにも反映される見込みではあります。

Firefoxの起動時,特に初回の起動時は時間がかかります。これに関してはFirefox 100で多少緩和されていますが,フォントが多い場合など環境によって遅くなる原因が異なるため,あまり効かないかもしれません。Firefoxそのもののパフォーマンスが落ちているという話もあるものの,これもビルド時にLTO(Link Time Optimization)PGO(Profile Guided Optimization)が有効化されたFirefox 100でほとんど違いがなくなっています

ここまではsnapパッケージそのものの制限に近い問題です。しかしながら,snapの制限に起因していくつかの不具合も見つかっています。⁠名前を付けて保存」はホームディレクトリ以外には効かないのですが,エラーを表示せず単純に無視してしまいます。また,ホームディレクトリであっても,なぜか~/デスクトップ/にも保存できません

EvinceでPDFファイルを開いたとき,PDF上のURLをクリックしてもFirefoxが起動しません。フォントのファイルや設定を読み込めないことがあるようです。さまざまな事情から,一旦Waylandのサポートを切ってあります(XWaylandを経由して動きます⁠⁠。そのため,⁠任意倍率のスケーリング」使用時にフォントがにじんで表示されてしまうという問題も発生しています。

他にもいろいろsnap版Firefoxの問題が報告されていますが,総じて「広く使ってもらう」には時期尚早な状態で,なおかつ不具合報告と修正に対して人的リソースが全然足りていない状況です。期せずしてsnap版のFirefoxがsnapパッケージに対するネガティブキャンペーンになっています。

特にFirefoxをヘビーに使っている人は,当面はUbuntu 20.04 LTSを使い続けるか第710回を参照することを強くおすすめします。

snapパッケージの権限管理

さて,ユニバーサルパッケージは,仕組み上設けられている制約に対して,いくつかの権限管理によってリソースにアクセスできる口を設けています。具体的にはスマートフォンアプリの「権限」をイメージすると良いでしょう。リソースのうち現在デスクトップ向けとして最も活発に開発されているのが,Flatpakでも利用するXDG desktop portalです。これはデスクトップアプリケーションがアクセスするリソースを一通り揃えています。

XDG desktop portalはアプリケーション側がPortal APIを使えるように作り込んでいる必要があります。またGTKやQtを使っているならより便利なラッパーAPIもあるようです。ものによっては環境変数によってPortal APIの利用が有効化されるものもあります。

snapパッケージは,デスクトップアプリだけでなくサーバーデーモンやCLIツールにも利用できるため,OS上のデスクトップリソースだけでなく,パッケージ自身が提供するリソースなど,いくつかの追加リソースも利用できるようになっています。それがsnap interfacesです。リソースを提供する側が「slot」を用意し,それにリソースを利用する側が「plug」「connection」するという体裁を取っています。slotとplugの組み合わせを「interface」と呼んでいます。

snap interfacesはXDG desktop portalと異なり,アプリケーション側の対応は不要です。snap側が適切にどのリソースを見せるようにするかを判断します。アプリケーション側からはホストのリソースがそのまま見えるようになっています。snapシステム側が最初から用意しているinterfaceもありますし,アプリケーションが他のアプリケーション向けに新規のinterfaceを用意することも可能です。

ちなみにXDG desktop portalを利用しているアプリケーションはsnap interfacesのうちdesktop interfacesに接続している必要があります。

デスクトップアプリケーションの場合は,システム設定の「アプリケーション」から権限管理を変更できます。Ubuntu 22.04 LTSであれば最初にインストールされているアプリケーションのうちFirefoxとUbuntuソフトウェアのみがsnapパッケージなので,まずはFirefoxを開いてみると良いでしょう。

図1 Firefoxの権限設定。ほぼすべての権限が有効化されている

図1

ほぼすべての権限が有効化されており,個別にオン・オフが切り替えられます。またコマンドだとより細かいinterfaceの変更も可能です。次の方法で実際の接続状態が表示されます。

$ snap connections firefox

先ほど言及した「desktop interfaces」はシステム設定には表示されませんが,コマンドからなら接続の切り替えが可能になっています。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。