Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

अपने Linux टर्मिनल से Flatpaks कैसे लॉन्च करें

Flatpak एप्लिकेशन वितरण मॉडल डेवलपर्स को एक नए और आसान तरीके से Linux को लक्षित करने में मदद कर रहा है, और यह Linux उपयोगकर्ताओं को इस चिंता के बिना अधिक एप्लिकेशन इंस्टॉल करने में मदद कर रहा है कि वे Linux का कौन सा संस्करण चला रहे हैं। यह एक रोमांचक तकनीक है, और मेरे Fedora Silverblue सिस्टम पर, यह डिफ़ॉल्ट पैकेज इंस्टॉलेशन विधि है। Silverblue पर मेरे सभी डेस्कटॉप एप्लिकेशन और कई पसंदीदा जिन्हें मैं Slackware पर उपयोग करता हूं, Flatpaks के रूप में चल रहे हैं।

एक चीज है जो कुछ मामलों में 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 नामकरण योजना यह भी मानती है कि आप Flatpak का पर्याप्त उपयोग करते हैं ताकि पैकेज का रिवर्स DNS नाम याद रख सकें। संरचना के अलावा, Flatpak के नामकरण के लिए कोई मानक नहीं है, इसलिए एक Flatpak कैमल-केस का उपयोग कर सकता है, जैसे org.libreoffice.LibreOffice, जबकि दूसरा मिश्रण का उपयोग कर सकता है, जैसे org.gimp.GIMP।

कुछ नाम दूसरों की तुलना में याद रखने में आसान हैं। उदाहरण के लिए, org.glimpse_editor.Glimpse याद रखना आसान है केवल यदि आपको याद है कि इसकी वेबसाइट https://glimpse-editor.org है, न कि glimpse.org, और अंडरस्कोर डैश को बदल देता है।

Flatpak डेवलपर्स के दृष्टिकोण से, यह कोई समस्या नहीं है क्योंकि Flatpaks को डेस्कटॉप से लॉन्च करने का इरादा है। आपको org.gnu.emacs याद रखने की आवश्यकता नहीं है क्योंकि आप इसे हमेशा GNOME Activities या अपने K-Menu या एक समान ग्राफिकल लॉन्चर से लॉन्च कर सकते हैं।

यह अक्सर पर्याप्त सच होता है, लेकिन कभी-कभी टर्मिनल से एप्लिकेशन लॉन्च करना अधिक सुविधाजनक होता है क्योंकि आप पहले से ही टर्मिनल का उपयोग कर रहे हैं। चाहे मुझे Glimpse में एक छवि चाहिए या Emacs में एक टेक्स्ट फ़ाइल या VLC में एक संगीत फ़ाइल, मैं टर्मिनल में बहुत व्यस्त होता हूं "डेस्कटॉप पर ड्रॉप" करने के लिए (भले ही यह सिर्फ एक कुंजी दूर हो!), एप्लिकेशन लॉन्च करें, फ़ाइल खोलने के लिए मेनू के माध्यम से क्लिक करें, और फिर अपनी फाइलसिस्टम के माध्यम से क्लिक करके वह फ़ाइल ढूंढें जिसे मैं खोलना चाहता हूं।

कमांड के बाद वह फ़ाइल टाइप करना जिसे मैं खोलना चाहता हूं, बस तेज़ है। लेकिन अगर मुझे flatpak run org.something.app टाइप करना है, तो यह नहीं है।

Flatpak लॉन्च करने के लिए Bash aliases का उपयोग करना

इस सब का स्पष्ट समाधान एक Bash alias है। Bash alias के साथ, आप लगभग किसी भी शब्द को कोई भी मनमाना कमांड असाइन कर सकते हैं। कई सामान्य Bash aliases हैं जो लगभग हर 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 के लिए aliases भी बना सकते हैं:

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

समस्या हल!

Bash स्क्रिप्टिंग के साथ बेहतर इंटरैक्शन

मैन्युअली aliases जोड़ने की प्रक्रिया को बहुत मेहनती लगने में ज्यादा समय नहीं लगा। और मेरे लिए, यह कार्य नहीं बल्कि प्रक्रिया है। एक एडिटर खोलना और एक alias जोड़ना उल्लेखनीय रूप से त्वरित है, लेकिन यह मेरे वर्कफ़्लो में एक ब्रेक है।

मैं वास्तव में कुछ ऐसा चाहता हूं जिसे मैं मानसिक और शारीरिक रूप से प्रारंभिक Flatpak इंस्टॉल प्रक्रिया के अंत में आवश्यकतानुसार जोड़ सकूं। मेरे द्वारा इंस्टॉल किए गए सभी Flatpaks को alias की आवश्यकता नहीं होती। उदाहरण के लिए, यहाँ मेरे Silverblue सिस्टम पर Flatpaks की एक आंशिक सूची है:

$ 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 को टर्मिनल से लॉन्च नहीं करूंगा, क्योंकि यह एक ऐसा एप्लिकेशन है जिसे मैं अपने दिन की शुरुआत में खोलता हूं और कभी बंद नहीं करता।

इसलिए, मैंने अपने लिए जो आवश्यकताएं परिभाषित की हैं वे हैं:

  • आवश्यकतानुसार alias का जोड़
  • टर्मिनल-आधारित नियंत्रण, ताकि यह मेरे Flatpak इंस्टॉल प्रक्रिया के अंत में आराम से फिट हो सके
  • एक काम करे और उसे अच्छी तरह से करे
  • Fedora, RHEL, Slackware, और किसी भी अन्य डिस्ट्रीब्यूशन पर पोर्टेबल जिसे मैं किसी दिए सप्ताह में उपयोग कर रहा हूं

मैं हाल ही में जिस समाधान पर पहुंचा हूं वह एक कस्टम छोटी Bash स्क्रिप्ट है जिसका उपयोग मैं उन Flatpaks के लिए aliases जोड़ने के लिए करता हूं जिन्हें मैं जानता हूं कि मैं अपने टर्मिनल से जल्दी एक्सेस करना चाहता हूं। यहाँ स्क्रिप्ट है:

#!/bin/sh
# GPLv3 appears here
# gnu.org/licenses/gpl-3.0.md

# vars
SYMRC=.bashrc.d
SYMDIR=$HOME/$SYMRC
SYMFILE=flatpak_aliases

# त्रुटियों पर बाहर निकलें
set -e

# यह वह जगह है जहां aliases रहते हैं
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

यदि कोई alias पहले से मौजूद है, तो इसका पता चल जाता है, और कोई नया alias नहीं बनाया जाता।

मैं एक alias को हटा भी सकता हूं:

$ pakrat remove emacs

यह Flatpak को नहीं हटाता और केवल समर्पित flatpak_aliases फ़ाइल पर काम करता है।

सभी Flatpak aliases को ~/.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 स्क्रिप्ट की तुलना में कहीं अधिक उन्नत हैं, लेकिन यह अब तक मेरे लिए अच्छा काम कर रहा है। इसे आज़माएं, या टिप्पणियों में अपना कस्टम समाधान साझा करें!

  1. एंड्रॉइड लॉकस्क्रीन से पसंदीदा ऐप्स आसानी से लॉन्च करें एंड्रॉइड लॉकस्क्रीन से पसंदीदा ऐप्स आसानी से लॉन्च करें

    यह लॉलीपॉप यूजर्स के लिए है (एक वक्तव्य जो अब कमरे में मौजूद ज्यादातर लोगों को नाराज या दुखी नहीं करता। #बियॉन्डफ्रैगमेंटेशन)। लॉलीपॉप की मेरी पसंदीदा विशेषताओं में से एक है लॉकस्क्रीन पर नोटिफिकेशन। मैं गैर-जरूरी नोटिफिकेशन को झट से स्वाइप कर सकता हूं और महत्वपूर्ण नोटिफिकेशन को फोन अनलॉक किए बिना

  1. अपने एंड्रॉइड डिवाइस पर साइडबार से ऐप्स कैसे लॉन्च करें अपने एंड्रॉइड डिवाइस पर साइडबार से ऐप्स कैसे लॉन्च करें

    एंड्रॉइड डिवाइस पर ऐप्स लॉन्च करने के कई तरीके हो सकते हैं। आप अपने होमस्क्रीन पर उपलब्ध ऐप शॉर्टकट का उपयोग करके ऐप्स लॉन्च कर सकते हैं, या आप बस ऐप ड्रॉअर खोलकर ऐप लॉन्च कर सकते हैं; दोनों आपके लिए काम कर देते हैं। जब आप ऐप्स को फायर अप करने के लिए इन तरीकों का उपयोग कर रहे होंगे, तो अब आपके लिए ऐ

  1. टर्मिनल के माध्यम से macOS पर Anaconda को अनइंस्टॉल करने के लिए चरण-दर-चरण मार्गदर्शिका टर्मिनल के माध्यम से macOS पर Anaconda को अनइंस्टॉल करने के लिए चरण-दर-चरण मार्गदर्शिका

    यदि आपने Anaconda, शक्तिशाली मैनेजर इंस्टॉल किया है, और अब इसे अनइंस्टॉल करना चाहते हैं, तो यहां है। यह पोस्ट चर्चा करेगी कि Anaconda को कैसे हटाएं और अन्य महत्वपूर्ण फ़ाइलों के लिए जगह खाली करें। Anaconda का एक साफ अनइंस्टॉल करने के लिए, हम कुछ तरीकों का उपयोग करेंगे। तो, बिना किसी देरी के, चलिए शु