इंस्टॉलर / पैकेज मैनेजर के बिना लिनक्स एप्लिकेशन आइकन वितरित करना


1

पृष्ठभूमि की कहानी:

में चाहता हूं:

  1. एक एप्लिकेशन को एक साधारण TAR के रूप में वितरित करें जिसे उपयोगकर्ता निकालते हैं और चलाते हैं
  2. उस ऐप के लिए एक उचित ऐप आइकन होना चाहिए।

कोई पैकेज चरनी, कोई sudo, कोई इंस्टॉलर स्क्रिप्ट।

मैं मानक और विभिन्न लेखों से देखता हूं कि ऐप आइकन को एक .desktopफ़ाइल की आवश्यकता होती है, जिसे निष्पादन योग्य (यूजी) और ऐप आइकन के लिए पूर्ण पथ की आवश्यकता होती है । मैं यह भी देखता हूं कि उबंटू एकता (शायद अन्य) .desktopफाइलों में समर्थन करती है~/.local/share/applications

विंडोज़ इसे आइकनों को एग्जीक्यूटिव्स में एम्बेड करके सपोर्ट करता है। मैक ओएस एक्स में उन अनुप्रयोगों के लिए एक रिश्तेदार निर्देशिका संरचना है जिसमें आइकन शामिल हैं।

"हैकिश" समाधान:

मेरा "हैकिश" समाधान ऐप स्टार्टअप पर है, यह पता लगाएं कि क्या myApp.desktopफ़ाइल मौजूद है ~/.local/share/applications/, और यदि नहीं, तो इसे लिखें (पूर्ण निष्पादन योग्य और आइकन के लिए पूर्ण पथ सहित), एक नई myApp प्रक्रिया लॉन्च करें और बाहर निकलें।

उम्मीद है, नई myApp प्रक्रिया ऐप आइकन को उठाएगी। और कभी-कभी ऐसा करता है।

समस्या:

यह समस्या है, मुझे sleep 2नई प्रक्रिया शुरू करने से पहले कुछ सेकंड चाहिए। यदि मैं करता हूं, तो आइकन उठाया जाता है। अगर मैं नहीं करता हूं, तो मेरे ऐप के लिए कोई आइकन नहीं है।

मैंने सोने (साथ gtk-update-icon-cache /usr/share/icons/hicolor) के बजाय GTK आइकन कैश को फिर से लोड करने की कोशिश की है, लेकिन यह चाल नहीं करता है।

किसी को भी पता है कि मैं इस देरी से कैसे बच सकता हूं और यह सुनिश्चित कर सकता हूं कि नई लिखी गई .desktopफाइल को उठाया जाए? (मैं फ्लश कर रहा हूं और फ़ाइल बंद कर रहा हूं।) या मेरे हैकिश समाधान की तुलना में बेहतर विचार है?

अद्यतन: दिलचस्प है, एक सादे स्क्रिप्ट का परीक्षण करना जो .desktopफ़ाइल लिखता है (या तो मैन्युअल या xdg- डेस्कटॉप-मेनू के साथ ) और एप्लिकेशन लॉन्च करता है, इसमें 2 सेकंड की देरी भी होती है या आइकन दिखाई नहीं देगा। चित्त आकर्षण करनेवाला।


यदि आप सभी उपयोगकर्ताओं के लिए इंस्टॉल करना चाहते हैं, तो आपको /usrनिर्देशिका में फ़ाइलों की प्रतिलिपि बनाने के लिए रूट विशेषाधिकारों की आवश्यकता होगी जब तक कि आप साझा सॉफ़्टवेयर के लिए गैर-मानक पथ का उपयोग न करें या केवल उन क्षेत्रों तक पहुंच की अनुमति न दें, जो आमतौर पर पढ़े / निष्पादित होते हैं। आप .bundleVMware और अन्य द्वारा उपयोग किए गए प्रारूप की जांच करना पसंद कर सकते हैं, हालांकि मैं याद नहीं कर सकता कि यह पासवर्ड के लिए संकेत देता है या नहीं।
AFH

"यदि आप सभी उपयोगकर्ताओं के लिए इंस्टॉल करना चाहते हैं, तो आपको / usr निर्देशिका में फ़ाइलों को कॉपी करने के लिए रूट विशेषाधिकारों की आवश्यकता होगी" - सही है, और अगर मैं आगे बढ़ता हूं और एक इंस्टॉलर स्क्रिप्ट बनाता हूं, तो यह पूछ सकता है, तो .desktop फ़ाइल सेटअप करें। लेकिन मुझे इंस्टॉलर स्क्रिप्ट पसंद नहीं हैं, उन लोगों ने डाउनलोड किए गए इंटरनेट को रूट के लिए पूछ रहे हैं। इसलिए "सरलता" निकालने और चलाने के लिए मेरा अनुरोध। यदि .bundleप्रारूप स्वयं-निकालने वाले इंस्टॉलर की तरह है, तो मैं एक इंस्टॉलर स्क्रिप्ट पर विचार करूंगा, इसलिए मैं इससे बचना पसंद करूंगा। आपके सुझाव के लिए धन्यवाद!
जेफ वार्ड

मैंने .bundleकई बार VMware स्थापित किया है और इस बात से प्रभावित हुआ कि यह सब कितनी आसानी से हो गया। यह सब विभिन्न लिनक्स के बजाय जायके, संभाल करने के लिए लगता है .deb, .rpmआदि विशेष रूप से वितरण समूहों से जुड़े होते हैं जो,,। यह मूल रूप से एम्बेडेड बायनेरिज़ के साथ एक विशाल स्क्रिप्ट फ़ाइल है, और इसे बनाने के लिए उपकरण होने चाहिए। तो यह है एक इंस्टॉलर स्क्रिप्ट है, लेकिन एक बहुत लचीला एक - और यह मूल डेस्क टॉप और आवेदन मेनू शॉर्ट-कट जोड़ने था। एक tarसंग्रह को एक ज्ञात स्थान पर निकालने की आवश्यकता होगी: मुझे पूरा यकीन है कि आप $HOME/इसके भीतर पथों का उपयोग नहीं कर सकते ।
AFH

1
पैकेज का उपयोग नहीं करना खराब शैली है। आमतौर पर आपको आरपीएम और डिबेट कम से कम प्रदान करना चाहिए।
नेल्स

जवाबों:


1

Gtk_window_set_icon या समान का उपयोग करें (इसमें एक _from_file संस्करण और ग्लेड एकीकरण है)।

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


ओह, दिलचस्प है, मैं इस पर ध्यान दूंगा, धन्यवाद!
जेफ वार्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.