โมเดลการแจกจ่ายแอปพลิเคชัน 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
การใช้สคริปต์
เมื่อฉันติดตั้ง 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 ทั่วไป แต่โครงการนี้ทำงานได้ดีสำหรับฉันจนถึงตอนนี้ ลองใช้หรือแบ่งปันโซลูชันที่กำหนดเองของคุณในความคิดเห็น!