명령줄에서 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'

관련 정보