Flatpak অ্যাপ্লিকেশন ডিস্ট্রিবিউশন মডেল ডেভেলপারদের লিনাক্সকে একটি নতুন এবং সহজ উপায়ে টার্গেট করতে সাহায্য করছে, এবং লিনাক্স ইউজারদের আরও অ্যাপ্লিকেশন ইনস্টল করতে সাহায্য করছে যেস 버젼 অফ লিনাক্স তারা রান করছে সেটি চিন্তা না করেই। এটি একটি এক্সাইটিং টেকনোলজি, এবং আমার Fedora Silverblue সিস্টেমে, এটি ডিফল্ট প্যাকেজ ইনস্টলেশন মেথড। আমার সিলভারব্লুয়ের সব ডেস্কটপ অ্যাপ্লিকেশন এবং স্ল্যাকওয়ারে আমার কিছু ফেভারিট Flatpak হিসেবে রান করছে।
একটা জিনিস আছে যেটি Flatpak কে কিছু কেসে একটু অকওয়ার্ড বানায়, সেটি হলো এর নামকরণ স্কিম। উদাহরণস্বরূপ, যখন আমি Emacs Flatpak হিসেবে ইনস্টল করি, এটি মা সিস্টেমে org.gnu.emacs হিসেবে রেজিস্টার্ড হয়। এটা এমন করা হয়েছে, তা প্রমিত, একটি এক্সিস্টিং সিস্টেম-লেভেল অ্যাপ্লিকেশনের নাম ক্লবбер করার ভয়ে – যদি আমার Emacs ইতিমধ্যে ইনস্টল থাকে, তবে /usr/bin/emacs এবং Flatpak ইনস্টলেশন Emacs-এর মধ্যে ডিফারেন্সিয়েশন কী? এই কারণেই, 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 নামকরণ স্কিমটি ধরে নেয় আপনি একটি Flatpak যথেষ্ট ব্যবহার করেন এর রিভার্স DNS নাম মনে রাখতে। স্ট্রাকচারের বাইরে, Flatpak নামকরণের জন্য কোনো স্ট্যান্ডার্ড নেই, তাই একটি Flatpak ক্যামেল-কেস ব্যবহার করতে পারে, যেমন org.libreoffice.LibreOffice, আর একটি মিক্স ব্যবহার করতে পারে, যেমন org.gimp.GIMP।
কিছু নাম অন্যগুলোর চেয়ে সহজে মনে রাখা যায়। উদাহরণস্বরূপ, org.glimpse_editor.Glimpse মনে রাখা সহজ শুধু যদি আপনি মনে রাখেন এর ওয়েবসাইট https://glimpse-editor.org, glimpse.org নয়, এবং একটি আন্ডারস্কোর ড্যাশ রিপ্লেস করেছে।
Flatpak ডেভেলপারদের দৃষ্টিকোণ থেকে, এটি কোনো সমস্যা নয় কারণ Flatpak গুলো ডেস্কটপ থেকে লঞ্চ করার জন্যই উদ্দেশ্য। আপনাকে org.gnu.emacs মনে রাখতে হয় না কারণ আপনি সবসময় সেটি GNOME Activities বা আপনার K-Menu বা অন্য কোনো গ্রাফিক্যাল লঞ্চার থেকে লঞ্চ করতে পারেন।
এটা প্রায়শই সত্য, কিন্তু কখনো কখনো টার্মিনাল থেকে অ্যাপ্লিকেশন লঞ্চ করা বেশি কনভেনিয়েন্ট কারণ আপনি ইতিমধ্যে টার্মিনাল ব্যবহার করছেন। যাতে আমি Glimpse-এ একটি ইমেজ চাই, Emacs-এ একটি টেক্সট ফাইল, বা VLC-এ একটি মিউজিক ফাইল, আমি খুব কম সময় টার্মিনালে ব্যস্ত থাকি "ড্রপ" আউট করার জন্য ডেস্কটপে (যদিও সেটি শুধু এক কী দূরে!), অ্যাপ্লিকেশন লঞ্চ করতে, মেনু ক্লিক করে ফাইল খোলতে, এবং তারপর ফাইলসিস্টেম ক্লিক করে যে ফাইলটি খোলতে চাই সেটি খুঁজে বের করতে।
কমান্ড টাইপ করা এবং তারপর যে ফাইল খোলতে চাই সেটি টাইপ করা কফাস্ট। কিন্তু যদি আমাকে flatpak run org.something.app টাইপ করতে হয়, তবে সেটি ফাস্ট নয়।
Bash এলিয়াস ব্যবহার করে Flatpak লঞ্চ করা
এই সব সমস্যার ইয়হজুড সলিউশন হলো একটি Bash এলিয়াস। Bash এলিয়াস দিয়ে, আপনি যেকোনো আর্বিট্রারি কমান্ড যেকোনো শব্দে অ্যাসাইন করতে পারেন আপনার চাওয়া। অনেক কমন 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'
আপনি Flatpak-এর জন্যও এলিয়াস তৈরি করতে পারেন:
alias emacs='flatpak run org.gnu.emacs'
সমস্যা সমাধান!
Bash স্ক্রিপ্টিং-এর সাথে ভালো ইন্টারঅ্যাকশন
এলিয়াস ম্যানুয়ালি যোগ করার প্রসেস খুব লেবারিয়াস লাগতে দেরি নয়েছে আমার কাছে। এবং আমার জন্য, এটা টাস্ক নয় বরং প্রসেস। একটি এডিটর খুলা এবং একটি এলিয়াস যোগ করা রিমার্কেবলি কুইক, কিন্তু এটা আমার ওয়ার্কফ্লোতে একটি ব্রেক।
আমি আসলে চাই এমন কিছু যা আমি মানসিক এবং শারীরিকভাবে Flatpak ইনস্টল প্রসেসের শেষে প্রয়োজনীয়তা অনুযায়ী অ্যাপেন্ড করতে পারি। আমি ইনস্টল করা সব Flatpak-এর এলিয়াস দরকার নয়। উদাহরণস্বরূপ, আমার সিলভারব্লু সিস্টেমে 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
আমি Weather বা GNOME Calculator টার্মিনাল থেকে কখনো লঞ্চ করবো না। আমি Signal টার্মিনাল থেকে কখনো লঞ্চ করবো না, কারণ এটি একটি অ্যাপ্লিকেশন যা আমি দিনের শুরুতে খুলি এবং কখনো বন্ধ করি না।
তাই আমার নিজের জন্য ডিফাইন করা রিকোয়ারমেন্টগুলো:
- প্রয়োজনীয়তা অনুযায়ী এলিয়াস যোগ
- টার্মিনাল-ভিত্তিক কন্ট্রোল, যাতে এটি ফ্ল্যাটপ্যাক ইনস্টল প্রসেসের শেষে কমফরটেবলি ফিট করে
- একটা কাজ করুক এবং সেটি ভালো করুক
- Fedora, RHEL, Slackware, এবং যেকোনো অন্য ডিস্ট্রো যা আমি যেকোনো সপ্তাহে ব্যবহার করছি সেগুলোর সাথে পোর্টেবল
আমি যা সম্প্রতি সেটেল করেছি সেটি হলো একটি কাস্টম ছোট Bash স্ক্রিপ্ট যা আমি Flatpak-এর জন্য এলিয়াস যোগ করতে ব্যবহার করি যেগুলো আমি জানি আমি টার্মিনাল থেকে দ্রুত অ্যাক্সেস করতে চাই। এখানে স্ক্রিপ্টটি:
#!/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 -gt 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 ডেস্কটপ লিনাক্সের সাথে খুব ভালো ইন্টিগ্রেট করে, এবং তাদের পেছনে একটি স্ট্রং, রিপ্রডিউসিবল ইনফ্রাস্ট্রাকচার রয়েছে। সেগুলো রিলেটিভলি সহজে বিল্ড করা যায় এবং ব্যবহার করা একটি ব্রিজ। শুধু একটু যোগায়োগ দিয়ে, আপনি সেগুলো টার্মিনালে নামিয়ে আনতে পারেন যাতে আপনি সেগুলো যেভাবে আপনার জন্য ভালো কাজ করে সেভাবে ব্যবহার করতে পারেন। এর মতো আরো অনেক প্রজেক্ট থাকতে পারে এবং ডেভেলপমেন্টে কিছু থাকতে পারে যেগুলো একটি সিম্পল Bash স্ক্রিপ্টের চেয়ে অনেক বেশি অ্যাডভান্সড, কিন্তু এটিই আমার জন্য ভালো কাজ করছে। এটা ট্রাই করুন, বা কমেন্টসে আপনার কাস্টম সলিউশন শেয়ার করুন!