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'