![명령줄에서 flatpak okular를 사용하여 파일을 여는 방법은 무엇입니까?](https://linux55.com/image/135661/%EB%AA%85%EB%A0%B9%EC%A4%84%EC%97%90%EC%84%9C%20flatpak%20okular%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%97%AC%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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'