26 January 2020

(Ubuntu) XnViewMPをflatpakでインストールすると、外部プログラムで画像を開けない

flatpakはサンドボックス内でプログラムを動作させるため、ユーザディレクトリ(/home/user)以外にアクセスすることは「通常は」出来ない。

Sandbox Permissions
No access to any host files except the runtime, the app and ~/.var/app/$APPID. Only the last of these is writable.
・ No access to the network.
・ No access to any device nodes (apart from /dev/null, etc).
No access to processes outside the sandbox.
・ Limited syscalls. For instance, apps can’t use nonstandard network socket types or ptrace other processes.
・ Limited access to the session D-Bus instance - an app can only own its own name on the bus.
・ No access to host services like X11, system D-Bus, or PulseAudio.

https://docs.flatpak.org/en/latest/sandbox-permissions.html

セキュリティを高めたり、他のプロセスに悪影響を与えないための仕組みだが、XnView の 「プログラムから開く (Open With ...)」を使って、外部の画像編集ソフト(Gimpなど)を起動することが出来ない。

flatpakでXnViewの導入までの流れを段階を追って説明し、最低限の設定まで行った記録…

flatpakのインストール

Ubuntu 18.04にはflatpakはデフォルトでインストールされていないため、まずはflatpak本体をインストールする

$ sudo apt-get install flatpak

次に、リポジトリを追加する。flatpakの公式Webより、「Get Setup」 → Ubuntu を選択すると、リポジトリの追加方法が書かれている。

$ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

※ 実際にflatpak上でプログラムを実行するユーザ権限でリポジトリを追加すればよい

コンピューターを再起動して、アプリケーションソフトのインストールに進む

flatpakでアプリを検索してインストールする

XnViewを検索する

$ flatpak search xnview
Application ID       Version Branch Remotes Description
com.xnview.XnViewMP  0.93.1  stable flathub 画像を表示し管理するツールです
com.xnview.XnSketch  1.18    stable flathub Turn your photos into cartoon or sketch images       
com.xnview.XnRetro   1.26    stable flathub Create stunning images with vintage or instant effect
com.xnview.XnConvert 1.80    stable flathub Easily batch process images and edit metadata

XnViewMPをインストールする。インストール時には、searchコマンドで表示されているパッケージのダウンロード元「flathub」を指定しないといけない。

XnViewMP以外にも、freedesktopなどシステム関連のパッケージも同時にインストールされる

$ flatpak install flathub com.xnview.XnViewMP

インストール状況を再確認する

$ flatpak list
Ref                                                Options       
com.xnview.XnViewMP/x86_64/stable                  system,current
org.freedesktop.Platform.VAAPI.Intel/x86_64/18.08  system,runtime
org.freedesktop.Platform.html5-codecs/x86_64/18.08 system,runtime
org.freedesktop.Platform/x86_64/18.08              system,runtime
org.gtk.Gtk3theme.Ambiance/x86_64/3.22             system,runtime
 
$ flatpak info com.xnview.XnViewMP
Ref: app/com.xnview.XnViewMP/x86_64/stable
ID: com.xnview.XnViewMP
Arch: x86_64
Branch: stable
Origin: flathub
Collection ID: org.flathub.Stable
Date: 2019-03-26 08:33:34 +0000
Subject: Rename desktop file (f605b9cf)
Commit: 9fe6e2073ab1997f8d5c165da86dde732313494539fd28bb92f491413dabcac2
Parent: b66e7358bf6016b2dc86e7dcd2dabdd03e9c2427790819020231d8a44f368fd7
Location: /var/lib/flatpak/app/com.xnview.XnViewMP/x86_64/stable/9fe6e2073ab1997f8d5c165da86dde732313494539fd28bb92f491413dabcac2
Installed size: 191.1 MB
Runtime: org.freedesktop.Platform/x86_64/18.08
Sdk: org.freedesktop.Sdk/x86_64/18.08

画像ファイルのあるディレクトリをアクセス可能にする

まず、サンドボックス内で動作するXnViewMPがどのような権限を持つか、初期値を確認

$ flatpak info --show-permissions com.xnview.XnViewMP
[Context]
shared=network;ipc;
sockets=x11;wayland;
devices=dri;
filesystems=xdg-run/dconf;home;~/.config/dconf:ro;xdg-run/gvfs:ro;
 
[Session Bus Policy]
ca.desrt.dconf=talk
org.gtk.vfs.*=talk
org.gtk.vfs=talk
 
[Environment]
DCONF_USER_CONFIG_DIR=.config/dconf

外部ドライブのマウントポイント /media をアクセス可能にする。この処理は管理者権限で行う

$ sudo flatpak override --filesystem=/media com.xnview.XnViewMP
 
$ flatpak override --show com.xnview.XnViewMP
[Context]
filesystems=/media;
 
$ flatpak info --show-permissions com.xnview.XnViewMP
[Context]
shared=network;ipc;
sockets=x11;wayland;
devices=dri;
filesystems=xdg-run/dconf;/media;home;~/.config/dconf:ro;xdg-run/gvfs:ro;
 
[Session Bus Policy]
ca.desrt.dconf=talk
org.gtk.vfs.*=talk
org.gtk.vfs=talk
 
[Environment]
DCONF_USER_CONFIG_DIR=.config/dconf

※ 与えた許可を「すべて」取り消す方法は

$ sudo flatpak override --reset com.xnview.XnViewMP

外部プログラムが実行できない…

権限を最大限与えても

$ sudo flatpak override --filesystem=host com.xnview.XnViewMP
$ sudo flatpak override --socket=system-bus com.xnview.XnViewMP
$ sudo flatpak override --socket=session-bus com.xnview.XnViewMP
$ sudo flatpak override --device=all com.xnview.XnViewMP

XnViewMPからGimpで画像ファイルを開くことは出来なかった…