Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

เปิด Flatpaks จากเทอร์มินัล Linux ของคุณ

โมเดลการแจกจ่ายแอปพลิเคชัน Flatpak ช่วยให้นักพัฒนากำหนดเป้าหมายไปที่ Linux ด้วยวิธีใหม่และง่ายดาย และยังช่วยให้ผู้ใช้ Linux ติดตั้งแอปพลิเคชันได้มากขึ้นโดยไม่ต้องกังวลว่าพวกเขากำลังใช้ Linux เวอร์ชันใดอยู่ มันเป็นเทคโนโลยีที่น่าตื่นเต้น และในระบบ Fedora Silverblue ของฉัน มันเป็นวิธีการติดตั้งแพ็คเกจเริ่มต้น แอปพลิเคชันเดสก์ท็อปทั้งหมดของฉันบน Silverblue และหลายสิ่งที่ฉันโปรดปรานบน Slackware กำลังทำงานเป็น Flatpaks

มีสิ่งหนึ่งที่ทำให้ Flatpak งุ่มง่ามเล็กน้อยในบางกรณี และนั่นคือรูปแบบการตั้งชื่อของมัน ตัวอย่างเช่น เมื่อฉันติดตั้ง Emacs เป็น Flatpak จะมีการลงทะเบียนในระบบของฉันเป็น org.gnu.emacs . เห็นได้ชัดว่าสิ่งนี้ทำเสร็จแล้วเพราะกลัวว่าจะปิดบังชื่อของแอปพลิเคชันระดับระบบที่มีอยู่—ถ้าฉันติดตั้ง Emacs แล้ว ความแตกต่างระหว่าง /usr/bin/emacs คืออะไร และการติดตั้ง Flatpak ของ Emacs? ด้วยเหตุผลนี้ Flatpak เช่น Emacs จึงถูกติดตั้งในเส้นทางนี้ (เตรียมตัวให้พร้อม):

/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 ยังถือว่าคุณใช้ Flatpak บ่อยพอที่จะจำชื่อ DNS ย้อนกลับของแพ็คเกจได้ นอกจากโครงสร้างแล้ว ยังไม่มีมาตรฐานในการตั้งชื่อ Flatpak ดังนั้น Flatpak ตัวเดียวจึงสามารถใช้ camel-case ได้ เช่น org.libreoffice.LibreOffice ในขณะที่อีกคนหนึ่งอาจใช้การผสมผสาน เช่น org.gimp.GIMP .

บางชื่อจำง่ายกว่าชื่ออื่นเช่นกัน ตัวอย่างเช่น org.glimpse_editor.Glimpse จำง่าย เท่านั้น หากคุณจำได้ว่าเว็บไซต์ของมันคือ https://glimse-editor.org แทนที่จะเป็นเหลือบของ org และขีดล่างจะแทนที่เส้นประ

จากมุมมองของนักพัฒนา Flatpak นี่ไม่ใช่ปัญหาเพราะ Flatpaks ตั้งใจให้เปิดใช้งานจากเดสก์ท็อป คุณไม่จำเป็นต้องจำ org.gnu.emacs เพราะคุณสามารถเปิดใช้งานได้จากกิจกรรม GNOME หรือ K-Menu หรือตัวเรียกใช้งานกราฟิกที่คล้ายกันเสมอ

สิ่งนี้เป็นจริงบ่อยครั้งเพียงพอ แต่บางครั้งก็สะดวกกว่าในการเปิดแอปพลิเคชันจากเทอร์มินัล เนื่องจากคุณใช้เทอร์มินัลอยู่แล้ว ไม่ว่าฉันต้องการรูปภาพใน Glimpse หรือไฟล์ข้อความใน Emacs หรือไฟล์เพลงใน VLC ฉันมักจะยุ่งมากในเทอร์มินัลที่จะ "ปล่อย" ไปที่เดสก์ท็อป (แม้ว่าจะอยู่ห่างออกไปเพียงปุ่มเดียว!) ก็ตาม แอปพลิเคชัน คลิกผ่านเมนูเพื่อเปิดไฟล์ จากนั้นคลิกผ่านระบบไฟล์ของฉันเพื่อค้นหาไฟล์ที่ฉันต้องการเปิด

พิมพ์คำสั่งตามด้วยไฟล์ที่ต้องการเปิดได้เร็วกว่า แต่ถ้าฉันต้องพิมพ์ flatpak run org.something.app มันไม่ใช่

การใช้ชื่อแทน Bash เพื่อเปิดใช้ Flatpak

ทางออกที่ชัดเจนสำหรับทั้งหมดนี้คือนามแฝง Bash ด้วยนามแฝง Bash คุณสามารถกำหนดคำสั่งใดก็ได้ให้กับเกือบทุกคำที่คุณต้องการ มีนามแฝง Bash ทั่วไปมากมายที่ผู้ใช้ Linux เกือบทุกคนมีในระบบ ไม่ว่าจะด้วยตัวเลือกที่มีสติหรือเนื่องจากการแจกจ่ายตั้งค่าไว้ล่วงหน้า:

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

แก้ปัญหาได้แล้ว!

การโต้ตอบที่ดีขึ้นกับสคริปต์ทุบตี

กระบวนการเพิ่มนามแฝงด้วยตนเองใช้เวลาไม่นานเพื่อให้รู้สึกว่าลำบากเกินไปสำหรับฉัน และสำหรับฉัน มันไม่ใช่งาน แต่เป็นกระบวนการ การเปิดเอดิเตอร์และการเพิ่มนามแฝงนั้นรวดเร็วมาก แต่ก็เป็นอุปสรรคในการทำงานของฉัน

สิ่งที่ฉันต้องการจริงๆ คือสิ่งที่ฉันสามารถผนวกเข้ากับกระบวนการติดตั้ง Flatpak เริ่มต้นได้ ทั้งทางร่างกายและจิตใจ ตามความจำเป็น . ไม่ใช่ Flatpaks ทั้งหมดที่ฉันติดตั้งต้องใช้นามแฝง ตัวอย่างเช่น นี่คือรายการ Flatpaks บางส่วนในระบบ Silverblue ของฉัน:

$ 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

ฉันจะไม่เปิด Weather หรือ GNOME Calculator จากเทอร์มินัล ฉันจะไม่เปิด Signal จากเทอร์มินัลด้วย เพราะเป็นแอปพลิเคชันที่ฉันเปิดเมื่อเริ่มต้นวันและไม่เคยปิดเลย

ดังนั้นข้อกำหนดที่ฉันกำหนดไว้สำหรับตัวเองคือ:

  • เพิ่มนามแฝงได้ตามต้องการ
  • การควบคุมโดยใช้เทอร์มินัล จึงเข้ากันได้อย่างสบายเมื่อสิ้นสุดกระบวนการติดตั้ง Flatpak ของฉัน
  • ทำสิ่งหนึ่งและทำได้ดี
  • พกพาได้ทั่วทั้ง Fedora, RHEL, Slackware และ distro อื่น ๆ ที่ฉันใช้ทุกสัปดาห์

วิธีแก้ปัญหาที่ฉันเพิ่งตัดสินใจไปเมื่อเร็วๆ นี้คือสคริปต์ Bash แบบกำหนดเองที่ฉันใช้เพื่อเพิ่มนามแฝงสำหรับ Flatpaks ฉันรู้ว่าต้องการเข้าถึงอย่างรวดเร็วจากเทอร์มินัล นี่คือสคริปต์:

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

การใช้สคริปต์

เปิด Flatpaks จากเทอร์มินัล Linux ของคุณ

เมื่อฉันติดตั้ง 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 ทำได้ง่าย

Flatpaks ทำงานร่วมกับเดสก์ท็อป Linux ได้เป็นอย่างดี และมีโครงสร้างพื้นฐานที่แข็งแกร่งและสามารถทำซ้ำได้ พวกมันค่อนข้างง่ายในการสร้างและใช้งานง่าย ด้วยความพยายามเพียงเล็กน้อย คุณก็สามารถนำมันลงมาที่เครื่องเทอร์มินัล เพื่อให้คุณสามารถใช้งานได้ตามวิธีการที่เหมาะสมที่สุดสำหรับคุณ อาจมีโครงการอื่น ๆ เช่นนี้อยู่หลายโครงการและอาจมีบางโครงการที่กำลังพัฒนาที่ล้ำหน้ากว่าสคริปต์ Bash ทั่วไป แต่โครงการนี้ทำงานได้ดีสำหรับฉันจนถึงตอนนี้ ลองใช้หรือแบ่งปันโซลูชันที่กำหนดเองของคุณในความคิดเห็น!