Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

Linux 터미널에서 Flatpaks 시작

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

스크립트 사용

Linux 터미널에서 Flatpaks 시작

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 스크립트보다 훨씬 더 발전된 개발 중인 몇 가지가 있을 것입니다. 하지만 이 프로젝트는 지금까지 저에게 잘 작동했습니다. 사용해 보거나 댓글에 맞춤형 솔루션을 공유하세요!