コマンドラインでflatpak okularを使用してファイルを開く方法は?

コマンドラインでflatpak okularを使用してファイルを開く方法は?

flatpakでokularエイリアスをインストールし、次のように設定しました。

alias okular="org.kde.okular"

端末で開くことができます。ただし、そのエイリアスを使用して端末でファイルを開こうとすると、次のようになります。

okular document.pdf

それではうまくいきません。私は何が間違っていましたか?

GUIを使用する代わりにokular flatpakを使用して端末でファイルを開く方法はありますか?

修正する:

だからこれを見つけました。協会:

--file-forwardingこのオプションを指定すると、残りの引数がスキャンされ、「@@」引数ペアの間に含まれるすべての引数がファイルパスとして解釈され、ドキュメントストアにエクスポートされ、コマンド結果のドキュメントパス形式で渡されます。 。 '@@u'と '@@'の間のパラメータはurisとして扱われ、すべてのファイル:uriがエクスポートされます。エクスポートは非​​永続的であり、アプリケーションに対する読み取りおよび書き込み権限を持ちます。

もちろん、これがokular flatpakを使用して端末でファイルを開く唯一の方法は、次のことを意味するわけではありません。

flatpak run okular.kde.org --file-forwarding @/home/user/documents/document.pdf@

開きたいすべてのPDFに対してこれを行うことはできません。別のPDFを開くときに長いコマンドを入力する必要がないようにエイリアスとして追加するにはどうすればよいですか?

答え1

flatpak与えられた(単一の)引数の前後に表示して追加する方法で呼び出されるシェル関数@(実行しないのでテストされていませんflatpak):

okular () {
    flatpak run org.kde.okular --file-forwarding "@$1@"
}

これは、一般的なエイリアスを入力する場所ならどこにでも行くことができ、次のように使用できます。

okular /home/user/documents/document.pdf

コマンドラインから。


関数が任意の数の引数を受け入れるようにするには、次のように使用できます。

okular () {
    for arg do
        set -- "$@" "@$arg@"
        shift
    done

    flatpak run org.kde.okular --file-forwarding "$@"
}

@このループは、各コマンドライン引数の先頭と末尾に追加されます。

これにより、次のように使用できます。

okular *.pdf

答え2

例は少し歪んでいます(ここではFirefoxを使用)。

flatpak run --file-forwarding org.mozilla.firefox @@ file.pdf @@

パスは相対的にすることができます。文書はそれ自体を含める必要があります(一部保存されたHTMLページには適用されません)。

答え3

@@既存の回答を試した後、正しい方法は先行パラメータと末尾パラメータを独自に持ち、すべてのファイルパラメータの周りにペアを使用するようです。

flatpak run --file-forwarding okular.kde.org @@ *.pdf @@

また、@@uファイルシステムパスはURLに変換されるため、file://両方を許可するアプリケーション(FirefoxやUngoogled ChromiumのFlatpakのコピーなど)がある場合は、@@u "$@" @@ラッパーでそれを使用してください。

ここに私が統合した概念証明があります。私のスクリプト私はFlatpakアプリケーションのランチャーラッパーを生成するために使用されます。

# Add this to the end of your $PATH
BIN_DIR=~/.local/bin/flatpak

# Remove any stale launch scripts
rm -f "$BIN_DIR"/*
mkdir -p "$BIN_DIR"

for X in $(flatpak list --columns=ref); do
    app_command="$(flatpak info -m "$X" | grep command= | cut -d= -f2)"
    cmd_path="$BIN_DIR"/"$app_command"

    if [ -n "$app_command" ]; then
        # Unset LD_PRELOAD to silence gtk-nocsd errors and support file
        # forwarding so you can sandbox browsers and still open local files
        printf '#!/bin/sh\nunset LD_PRELOAD\nexec flatpak run --file-forwarding "%s" @@u "$@" @@' "$X" >"$cmd_path"
        chmod +x "$cmd_path"
    fi
done

重要なバージョンの注意事項のリストからわかるように、URLを拒否するか、ローカルパスをfile://URLに強制変換することから選択する必要があるため、完璧ではありませんが、私が持っているアプリではうまくいきます。

(正しい解決策は、PythonやRustなどでラッパージェネレータを再構築し、Exec関連.desktopファイルのキーを解析して各アプリケーションが望むものを見つけることです。)

答え4

まあ…あなたは解決策を見つけました。

エイリアスの場合、これは標準のLinuxエントリなので(つまり、flatpakには関係ありません)、次のように機能します。

alias okular='echo flatpak run okular.kde.org --file-forwarding'

関連情報