Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Khởi chạy Flatpaks từ thiết bị đầu cuối Linux của bạn

Mô hình phân phối ứng dụng Flatpak đang giúp các nhà phát triển nhắm mục tiêu đến Linux theo một cách mới và dễ dàng, đồng thời nó giúp người dùng Linux cài đặt nhiều ứng dụng hơn mà không cần lo lắng về phiên bản Linux họ đang chạy. Đó là một công nghệ thú vị và trên hệ thống Fedora Silverblue của tôi, đó là phương pháp cài đặt gói mặc định. Tất cả các ứng dụng máy tính để bàn của tôi trên Silverblue và một số ứng dụng yêu thích của tôi mà tôi sử dụng trên Slackware đang chạy dưới dạng Flatpaks.

Tuy nhiên, có một điều khiến Flatpak hơi khó xử trong một số trường hợp, đó là cách đặt tên của nó. Ví dụ:khi tôi cài đặt Emacs dưới dạng Flatpak, nó được đăng ký trên hệ thống của tôi với tên org.gnu.emacs . Điều này được thực hiện, rõ ràng, vì sợ làm tắc tên của một ứng dụng cấp hệ thống hiện có — nếu tôi đã cài đặt Emacs, thì sự khác biệt giữa /usr/bin/emacs và cài đặt Flatpak của Emacs? Vì lý do này, một Flatpak như Emacs được cài đặt vào một cái gì đó như (sẵn sàng cho nó) theo đường dẫn này:

/var/lib/flatpak/app/org.gnu.emacs/current/active/export/bin/org.gnu.emacs

Nó không được liên kết tượng trưng từ /usr/bin hoặc /opt , vị trí không được thêm vào đường dẫn của người dùng và việc khởi chạy Flatpak yêu cầu lời gọi như sau:

$ flatpak run org.gnu.emacs

Đó là rất nhiều gõ so với chỉ nhập emacs .

Tên khó nhớ

Lược đồ đặt tên Flatpak cũng giả định rằng bạn sử dụng Flatpak thường xuyên đủ để nhớ tên DNS ngược của gói. Ngoài cấu trúc, không có tiêu chuẩn nào để đặt tên cho Flatpak, vì vậy một Flatpak có thể sử dụng camel-case, chẳng hạn như org.libreoffice.LibreOffice , trong khi người khác có thể sử dụng kết hợp, chẳng hạn như org.gimp.GIMP .

Một số tên cũng dễ nhớ hơn những tên khác. Ví dụ:org.glimpse_editor.Glimpse dễ nhớ chỉ nếu bạn nhớ trang web của nó là https://glimpse-editor.org, chứ không phải là glse.org và dấu gạch dưới thay thế cho dấu gạch ngang.

Theo quan điểm của các nhà phát triển Flatpak, đây không phải là vấn đề vì Flatpaks được thiết kế để khởi chạy từ máy tính để bàn. Bạn không cần phải nhớ org.gnu.emacs vì bạn luôn có thể khởi chạy nó từ Hoạt động GNOME hoặc K-Menu của bạn hoặc một trình khởi chạy đồ họa tương tự.

Điều này thường đúng, nhưng đôi khi việc khởi chạy ứng dụng từ một thiết bị đầu cuối sẽ thuận tiện hơn vì bạn đã sử dụng thiết bị đầu cuối. Cho dù tôi muốn một hình ảnh trong Glimpse hay một tệp văn bản trong Emacs hoặc một tệp nhạc trong VLC, tôi thường xuyên quá bận rộn trong thiết bị đầu cuối để "thả" ra màn hình (mặc dù chỉ cần một phím!), Hãy khởi chạy ứng dụng, nhấp qua các menu để mở tệp, sau đó nhấp qua hệ thống tệp của tôi để tìm tệp tôi muốn mở.

Chỉ nhanh hơn khi gõ lệnh theo sau tệp tôi muốn mở. Nhưng nếu tôi phải nhập flatpak run org.something.app , nó không phải.

Sử dụng bí danh Bash để khởi chạy Flatpak

Giải pháp rõ ràng cho tất cả điều này là bí danh Bash. Với bí danh Bash, bạn có thể gán bất kỳ lệnh tùy ý nào cho gần như bất kỳ từ nào bạn muốn. Có nhiều bí danh Bash phổ biến mà gần như mọi người dùng Linux đều có trên hệ thống của họ, do lựa chọn có ý thức hoặc do bản phân phối đặt trước chúng:

$ 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'

Bạn cũng có thể tạo bí danh cho Flatpaks:

alias emacs='flatpak run org.gnu.emacs'

Vấn đề đã được giải quyết!

Tương tác tốt hơn với Bash scripting

Quá trình thêm bí danh theo cách thủ công không mất nhiều thời gian khiến tôi cảm thấy quá tốn công sức với tôi. Và đối với tôi, đó không phải là nhiệm vụ mà là quá trình. Mở trình chỉnh sửa và thêm bí danh rất nhanh, nhưng đó là một bước đột phá trong quy trình làm việc của tôi.

Những gì tôi thực sự muốn là thứ mà tôi có thể, về mặt tinh thần và thể chất, thêm vào quá trình cài đặt Flatpak ban đầu nếu cần . Không phải tất cả các Flatpaks tôi cài đặt đều yêu cầu bí danh. Ví dụ:đây là danh sách một phần các Flatpaks trên hệ thống Silverblue của tôi:

$ 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

Tôi sẽ không bao giờ khởi chạy Máy tính Thời tiết hoặc GNOME từ thiết bị đầu cuối. Tôi cũng sẽ không bao giờ khởi chạy Signal từ thiết bị đầu cuối, vì đó là ứng dụng tôi mở vào đầu ngày và không bao giờ đóng.

Do đó, các yêu cầu tôi đã xác định cho bản thân là:

  • Bổ sung bí danh khi cần thiết
  • Điều khiển dựa trên thiết bị đầu cuối, vì vậy nó vừa vặn thoải mái khi kết thúc quá trình cài đặt Flatpak của tôi
  • Làm một việc và làm tốt việc đó
  • Di động trên Fedora, RHEL, Slackware và bất kỳ bản phân phối nào khác mà tôi tình cờ sử dụng vào bất kỳ tuần nào

Giải pháp mà tôi đã giải quyết gần đây là một tập lệnh Bash nhỏ tùy chỉnh mà tôi sử dụng để thêm bí danh cho Flatpaks mà tôi biết rằng tôi muốn truy cập nhanh chóng từ thiết bị đầu cuối của mình. Đây là tập lệnh:

#!/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

Sử dụng tập lệnh

Khởi chạy Flatpaks từ thiết bị đầu cuối Linux của bạn

Khi tôi cài đặt một Flatpak mà tôi muốn khởi chạy từ thiết bị đầu cuối, tôi kết thúc quá trình với tập lệnh sau:

$ 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

Nếu bí danh đã tồn tại, bí danh đó sẽ được phát hiện và không có bí danh mới nào được tạo.

Tôi cũng có thể xóa bí danh:

$ pakrat remove emacs

Thao tác này không loại bỏ Flatpak và chỉ hoạt động trên flatpak_aliases chuyên dụng tệp.

Tất cả các bí danh Flatpak đều được thêm vào ~/.bashrc.d/flatpak_aliases , bạn có thể tự động tạo nguồn khi trình bao của bạn được khởi chạy bằng cách đặt mã này vào .bashrc của bạn hoặc .bash_profile hoặc .profile tệp:

if [ -d ~/.bashrc.d ]; then
  for rc in ~/.bashrc.d/*; do
    if [ -f "$rc" ]; then
      . "$rc"
    fi
  done
fi

unset rc

Khởi chạy Flatpak thật dễ dàng

Flatpaks tích hợp thực sự tốt với Linux dành cho máy tính để bàn và chúng có một cơ sở hạ tầng mạnh mẽ, có thể tái tạo đằng sau chúng. Chúng tương đối dễ xây dựng và dễ sử dụng. Chỉ cần thêm một chút nỗ lực, bạn có thể đưa chúng xuống thiết bị đầu cuối để có thể sử dụng chúng theo cách nào phù hợp nhất với bạn. Có thể có một số dự án khác như thế này ngoài kia và có thể là một số dự án đang được phát triển nâng cao hơn nhiều so với một tập lệnh Bash đơn giản, nhưng điều này đang hoạt động tốt đối với tôi cho đến nay. Hãy dùng thử hoặc chia sẻ giải pháp tùy chỉnh của bạn trong phần bình luận!