Flatpak 응용 프로그램 배포 모델은 개발자가 새롭고 쉬운 방법으로 Linux를 대상으로 하도록 돕고 있으며 Linux 사용자가 실행 중인 Linux 버전에 대해 걱정하지 않고 더 많은 응용 프로그램을 설치할 수 있도록 지원합니다. 이것은 흥미로운 기술이며 제 Fedora Silverblue 시스템에서는 기본 패키지 설치 방법입니다. Silverblue의 모든 데스크톱 애플리케이션과 Slackware에서 즐겨 사용하는 몇 가지가 Flatpak으로 실행되고 있습니다.
하지만 Flatpak을 어떤 경우에는 조금 어색하게 만드는 한 가지가 있습니다. 바로 이름 지정 체계입니다. 예를 들어 Emacs를 Flatpak으로 설치하면 시스템에 org.gnu.emacs
로 등록됩니다. . 이것은 분명히 기존 시스템 수준 응용 프로그램의 이름을 방해하는 것을 두려워하여 수행됩니다. 이미 Emacs가 설치되어 있다면 /usr/bin/emacs
의 차이점은 무엇입니까? 그리고 Emacs의 Flatpak 설치? 이러한 이유로 Emacs와 같은 Flatpak은 다음과 같은 경로에 설치됩니다(준비):
/var/lib/flatpak/app/org.gnu.emacs/current/active/export/bin/org.gnu.emacs
/usr/bin
에서 심볼릭 링크되지 않았습니다. 또는 /opt
, 위치가 사용자 경로에 추가되지 않고 Flatpak을 시작하려면 다음과 같은 호출이 필요합니다.
$ flatpak run org.gnu.emacs
emacs
를 입력하는 것과 비교하면 많은 입력이 필요합니다. .
이름은 기억하기 어렵습니다.
Flatpak 명명 체계는 또한 패키지의 역방향 DNS 이름을 기억할 만큼 충분히 자주 Flatpak을 사용한다고 가정합니다. 구조 외에 Flatpak의 이름을 지정하는 표준이 없으므로 하나의 Flatpak은 org.libreoffice.LibreOffice
와 같은 낙타 대소문자를 사용할 수 있습니다. , 다른 사람은 org.gimp.GIMP
와 같은 혼합을 사용할 수 있습니다. .
일부 이름도 다른 이름보다 기억하기 쉽습니다. 예를 들어, org.glimpse_editor.Glimpse
만 기억하기 쉽습니다. 웹사이트가 https://glimpse-editor.org가 아니라 sneak.org이고 밑줄이 대시를 대체한다는 것을 기억한다면.
Flatpak 개발자의 관점에서 Flatpak은 데스크탑에서 시작하기 위한 것이기 때문에 문제가 되지 않습니다. org.gnu.emacs
를 기억할 필요가 없습니다. GNOME 활동이나 K-Menu 또는 이와 유사한 그래픽 실행 프로그램에서 항상 실행할 수 있기 때문입니다.
이것은 충분히 사실이지만 때로는 이미 터미널을 사용하고 있기 때문에 터미널에서 응용 프로그램을 시작하는 것이 더 편리합니다. Glimpse의 이미지를 원하든 Emacs의 텍스트 파일을 원하든 VLC의 음악 파일을 원하든 저는 터미널에서 너무 바빠서 데스크탑으로 "드롭"할 수 없는 경우가 많습니다(단 하나의 키 거리에 있음에도 불구하고!), 실행 응용 프로그램에서 메뉴를 클릭하여 파일을 연 다음 내 파일 시스템을 클릭하여 열려는 파일을 찾습니다.
명령 다음에 열려는 파일을 입력하는 것이 더 빠릅니다. 하지만 flatpak run org.something.app
를 입력해야 한다면 , 그렇지 않습니다.
Bash 별칭을 사용하여 Flatpak 시작
이 모든 것에 대한 확실한 해결책은 Bash 별칭입니다. Bash 별칭을 사용하면 원하는 거의 모든 단어에 임의의 명령을 할당할 수 있습니다. 거의 모든 Linux 사용자가 시스템에 가지고 있는 일반적인 Bash 별칭은 의식적인 선택에 의해 또는 배포판에서 미리 설정하기 때문에 많이 있습니다.
$ grep alias ~/.bashrc
alias cp='cp -v'
alias rm='/usr/bin/local/trashy'
alias mv='mv -v'
alias ls='ls --color'
alias ll='ls -l --color'
alias lh='ll -h'
Flatpaks에 대한 별칭도 만들 수 있습니다.
alias emacs='flatpak run org.gnu.emacs'
문제가 해결되었습니다!
Bash 스크립팅과의 더 나은 상호 작용
별칭을 수동으로 추가하는 과정이 너무 힘들게 느껴지기까지 오랜 시간이 걸리지 않았습니다. 그리고 저에게 그것은 작업이 아니라 과정입니다. 편집기를 열고 별칭을 추가하는 것은 놀라울 정도로 빠르지만 내 작업 흐름에 방해가 됩니다.
내가 정말로 원하는 것은 필요에 따라 초기 Flatpak 설치 프로세스에 정신적, 육체적으로 추가할 수 있는 것입니다. . 내가 설치하는 모든 Flatpak에 별칭이 필요한 것은 아닙니다. 예를 들어, 내 Silverblue 시스템에 있는 Flatpak의 일부 목록은 다음과 같습니다.
$ find /var/lib/flatpak/app/* -maxdepth 0 -type d | tail -n5
/var/lib/flatpak/app/org.gnome.baobab
/var/lib/flatpak/app/org.gnome.Calculator
/var/lib/flatpak/app/org.gnome.Calendar
/var/lib/flatpak/app/org.gnome.Characters
/var/lib/flatpak/app/org.gnome.clocks
/var/lib/flatpak/app/org.gnome.Contacts
/var/lib/flatpak/app/org.gnome.eog
/var/lib/flatpak/app/org.gnome.Evince
/var/lib/flatpak/app/org.gnome.FileRoller
/var/lib/flatpak/app/org.gnome.font-viewer
/var/lib/flatpak/app/org.gnome.gedit
/var/lib/flatpak/app/org.gnome.Logs
/var/lib/flatpak/app/org.gnome.Maps
/var/lib/flatpak/app/org.gnome.NautilusPreviewer
/var/lib/flatpak/app/org.gnome.Rhythmbox3
/var/lib/flatpak/app/org.gnome.Screenshot
/var/lib/flatpak/app/org.gnome.Weather
/var/lib/flatpak/app/org.gnu.emacs
/var/lib/flatpak/app/org.signal.Signal
터미널에서 날씨 또는 그놈 계산기를 실행하지 않을 것입니다. Signal은 하루를 시작할 때 열고 닫지 않는 애플리케이션이기 때문에 터미널에서도 Signal을 실행하지 않을 것입니다.
따라서 내가 정의한 요구 사항은 다음과 같습니다.
- 필요에 따라 별칭 추가
- 터미널 기반 제어이므로 Flatpak 설치 프로세스가 끝날 때 편안하게 맞습니다.
- 한 가지 일을 잘 하고 있습니다.
- Fedora, RHEL, Slackware 및 내가 우연히 사용하게 된 다른 모든 배포판에서 이식 가능
내가 최근에 결정한 솔루션은 내 터미널에서 빠르게 액세스하고 싶은 Flatpak의 별칭을 추가하는 데 사용하는 맞춤형 작은 Bash 스크립트입니다. 스크립트는 다음과 같습니다.
#!/bin/sh
# GPLv3 appears here
# gnu.org/licenses/gpl-3.0.md
# vars
SYMRC=.bashrc.d
SYMDIR=$HOME/$SYMRC
SYMFILE=flatpak_aliases
# exit on errors
set -e
# this is where the aliases lives
if [ ! -d $SYMDIR ]; then
mkdir "${SYMDIR}"
touch "${SYMDIR}"/"${SYMFILE}"
fi
sourcer() {
echo 'Run this command to update your shell:'
echo ". ${SYMDIR}/${SYMFILE}"
}
lister() {
cat "${SYMDIR}"/"${SYMFILE}"
}
adder() {
grep "alias ${ARG}\=" "${SYMDIR}"/"${SYMFILE}" && i=1
[[ $VERBOSE ]] && echo "$i"
if [ $i > 0 ]; then
echo "Alias for ${ARG} already exists:"
grep "alias ${ARG}=" "${SYMDIR}"/"${SYMFILE}"
exit
else
echo "alias ${ARG}='${COMMAND}'" >> "${SYMDIR}"/"${SYMFILE}"
[[ $VERBOSE ]] && echo "Alias for ${ARG} added"
sourcer
fi
unset i
}
remover() {
echo "Removing stuff."
sed -i "/alias ${ARG}\=/d" "${SYMDIR}"/"${SYMFILE}"
sourcer
}
# arg parse
while [ True ]; do
if [ "$1" = "--help" -o "$1" = "-h" ]; then
echo " "
echo "$0 add --command 'flatpak run org.gnu.emacs' emacs \# create symlink for emacs"
echo "$0 add --command 'flatpak run org.gnu.emacs -fs' emacs-fs \# create symlink for emacs in fullscreen"
echo "$0 remove emacs \# remove emacs symlink"
echo "$0 list \# list all active flatpak symlinks"
echo " "
exit
elif [ "$1" = "--verbose" -o "$1" = "-v" ]; then
VERBOSE=1
shift 1
elif [ "$1" = "list" ]; then
MODE="list"
shift 1
elif [ "$1" = "add" ]; then
MODE="add"
shift 1
elif [ "$1" = "remove" ]; then
MODE="remove"
shift 1
elif [ "$1" = "--command" -o "$1" = "-c" ]; then
COMMAND="${2}"
shift 2
else
break
fi
done
#create array, retain spaces
ARG=( "${@}" )
case $MODE in
add)
adder
;;
list)
lister
;;
remove)
remover
;;
*)
echo "You must specify an action <list|add|remove>"
exit 1
esac
스크립트 사용
Flatpak을 설치할 때 터미널에서 시작하려고 할 때 다음 스크립트로 프로세스를 완료합니다.
$ flatpak install org.gnu.emacs
$ pakrat add -c 'flatpak run org.gnu.emacs' emacs
Alias for emacs added.
Run this command to update your shell:
. ~/.bashrc.d/flatpak_aliases
$ . ~/.bashrc.d/flatpak_aliases
별칭이 이미 있는 경우 검색되고 새 별칭이 생성되지 않습니다.
별칭도 제거할 수 있습니다.
$ pakrat remove emacs
이것은 Flatpak을 제거하지 않고 전용 flatpak_aliases
에서만 작동합니다. 파일.
모든 Flatpak 별칭은 ~/.bashrc.d/flatpak_aliases
에 추가됩니다. , 이러한 방식의 코드를 .bashrc
에 배치하여 셸이 시작될 때 자동으로 소싱할 수 있습니다. 또는 .bash_profile
또는 .profile
파일:
if [ -d ~/.bashrc.d ]; then
for rc in ~/.bashrc.d/*; do
if [ -f "$rc" ]; then
. "$rc"
fi
done
fi
unset rc
Flatpak 출시가 쉬워졌습니다
Flatpak은 데스크탑 Linux와 정말 잘 통합되며, 강력하고 재현 가능한 인프라를 갖추고 있습니다. 그들은 상대적으로 구축하기 쉽고 사용하기 쉽습니다. 조금만 더 노력하면 터미널로 가져와 가장 적합한 방법으로 사용할 수 있습니다. 이와 같은 다른 여러 프로젝트가 있고 아마도 간단한 Bash 스크립트보다 훨씬 더 발전된 개발 중인 몇 가지가 있을 것입니다. 하지만 이 프로젝트는 지금까지 저에게 잘 작동했습니다. 사용해 보거나 댓글에 맞춤형 솔루션을 공유하세요!