मुझे गैर-डिफ़ॉल्ट स्थिति मेनू (उर्फ संकेतक) द्वारा उपयोग की जाने वाली आइकन फाइलें कैसे मिलती हैं?


9

मैं कुछ गैर-डिफ़ॉल्ट स्थिति मेनू (जिसे एप्लिकेशन संकेतक या संकेतक एप्लेट भी कहा जाता है) द्वारा उपयोग किए जाने वाले आइकन का स्थान ढूंढना चाहूंगा ।

यहां छवि विवरण दर्ज करें

ये आइकन छवि फ़ाइलें कहाँ स्थित हैं?

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

जवाबों:


9

गैर-डिफ़ॉल्ट संकेतक आइकन के लिए डिफ़ॉल्ट स्थान?

कोई डिफ़ॉल्ट स्थान नहीं है जहां ये आइकन संग्रहीत हैं। कोई भी एप्लिकेशन (-डॉलर) उन्हें स्टोर कर सकता है जहां इसे उपयुक्त माना जाता है।

हालांकि , अच्छी खबर यह है कि संकेतक आमतौर पर फ़ाइलों और छवियों की अंतहीन सूची स्थापित नहीं करते हैं। हम अपनी खोज को कमांड के आउटपुट में देख कर (कोड को देखने के अलावा) सीमित कर सकते हैं:

dpkg-query -L <packagename>

मेरे उदाहरण में

dpkg-query -L placesfiles

यहां छवि विवरण दर्ज करें

यह दूसरों के बीच में होगा, निम्न चित्र आउटपुट करें:

/opt/placesfiles/images/dir_icon.png
/opt/placesfiles/images/placesfiles64.png
/usr/share/pixmaps/placesfiles.png

... जिससे खोज काफी सीमित हो जाएगी।

आदमी से dpkg-query:

   -l, --list [package-name-pattern...]
          List packages matching given pattern. If no package-name-pattern
          is  given,  list all packages in /var/lib/dpkg/status, excluding
          the ones marked as not-installed (i.e.  those  which  have  been
          previously purged). Normal shell wildcard characters are allowed
          in package-name-pattern. Please note you will probably  have  to
          quote  package-name-pattern to prevent the shell from performing
          filename expansion. For example this will list all package names
          starting with “libc6”:

रेडियट्रे के मामले में , मुझे निम्नलिखित .pngफाइलें मिली (चल रही dpkg-query -L radiotray | grep png):

/usr/share/radiotray/images/radiotray_connecting.png
/usr/share/radiotray/images/radiotray_on.png
/usr/share/radiotray/images/radiotray_off.png
/usr/share/radiotray/images/radiotray.png
/usr/share/pixmaps/radiotray.png

हम तो वास्तव में कोड खोज, पता लगाने के लिए की जरूरत है

... हम स्ट्रिंग "आइकन" के मैचों के लिए (अंदर) स्थापित फ़ाइलों के माध्यम से देख सकते हैं। कई संकेतक स्क्रिप्ट (भाषाओं python) में से एक में लिखे गए हैं , जिसका अर्थ है कि वे बहुत अच्छी तरह से खोज करने में सक्षम हैं।

एक उदाहरण

फिर से radiotrayउदाहरण का उपयोग करते हुए

dpkg-query -L radiotray | xargs grep icon

आउटपुट में हम ao पाते हैं:

/usr/lib/python2.7/dist-packages/radiotray/SysTrayGui.py 
                 self.icon.set_from_file(APP_ICON_CONNECT)

फ़ाइल में देखते हुए SysTrayGui.py, हम देख सकते हैं:

from lib.common import APPNAME, APPVERSION, APP_ICON_ON, APP_ICON_OFF, APP_ICON_CONNECT, APP_INDICATOR_ICON_ON, APP_INDICATOR_ICON_OFF

इससे, हम यह उल्लेख कर सकते हैं कि उल्लेखित चिह्न common(उप) निर्देशिका के अंदर मॉड्यूल में परिभाषित किए गए हैं lib। ( यहां देखें कि अजगर कैसे इसे मॉड्यूल, अनुभाग उपनिर्देशिका पाता है )

इस मॉड्यूल में, हम अनुभाग पढ़ सकते हैं:

# Media path
if os.path.exists(os.path.abspath('../data/images/')):
    IMAGE_PATH = os.path.abspath('../data/images/')
else:
    IMAGE_PATH = '%s/%s/images' % (datadir, APPDIRNAME)

# Images
APP_ICON = os.path.join(IMAGE_PATH, 'radiotray.png')
APP_ICON_ON = os.path.join(IMAGE_PATH, 'radiotray_on.png')
APP_ICON_OFF = os.path.join(IMAGE_PATH, 'radiotray_off.png')
APP_ICON_CONNECT = os.path.join(IMAGE_PATH, 'radiotray_connecting.gif')
APP_INDICATOR_ICON_ON = "radiotray_on"
APP_INDICATOR_ICON_OFF = "radiotray_off"
APP_INDICATOR_ICON_CONNECT = "radiotray_connecting"

... और यहाँ हम हैं ...

असाधारण स्थितियों

मेरे सभी संकेतकों के व्यावहारिक के साथ, मैं ऊपर दिए गए विधि (ओं) का उपयोग करके संबंधित आइकन खोजने में कामयाब रहा।

हालाँकि, संभव हो सकता है कि कोड के साथ छवियों को एक ही निष्पादन योग्य में संकलित किया जाए। यह समझाने की आवश्यकता नहीं है कि ऐसे मामलों में आपको एक अलग छवि नहीं मिलेगी, और न ही आप कोड को संपादित किए बिना और पुन: लिखने के बिना उन्हें बदल पाएंगे।

स्वयं के मामले का मामला ऐसा प्रतीत होता है। उपरोक्त विधि का उपयोग करके पता चला कि आइकन का एक सेट अंदर स्थापित किया गया था /usr/share/icons/hicolor/<size>/apps। हालांकि इनमें से कोई भी चिह्न ubuntu के संकेतक में उपयोग नहीं किया गया है

ओपी ने पहले (और बाद में) कुछ काम किए, उन्होंने यह सवाल पूछा। उनमें से एक को चलाना था:

gdbus call --session --dest com.canonical.indicator.application --object-path /com/canonical/indicator/application/service --method com.canonical.indicator.application.service.GetApplications

... जो हमें कुछ उपयोगी जानकारी देता है। आउटपुट में एक खंड शामिल है:

('146028888067', 2, 'org.kde.StatusNotifierItem-22055-1', '/StatusNotifierItem/menu', '/tmp/iconcache-50ePXx', '', '', '', 'owncloud', 'ownCloud')

निर्देशिका को देखते हुए /tmp/iconcache-50ePXx, मुझे संकेतक द्वारा उपयोग किए गए सटीक आइकन मिले:

यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें

... जो ये साबित करता है कि ये चिह्न मक्खी पर उत्पन्न होते हैं; क्लोजिंग ऑनलॉउड डायरेक्टरी और उसके आइकॉन को गायब कर देता है।

यह इन आइकनों को बदलकर संकेतक के आइकन को बदलना संभव हो गया है:

यहां छवि विवरण दर्ज करें

जो यह साबित करता है कि वास्तव में वे आइकन हैं जिनकी हम तलाश कर रहे थे।

हालांकि जो मैंने मैन्युअल रूप से किया था, उसे स्वचालित करने के लिए, एक स्क्रिप्ट / आवरण की आवश्यकता होगी, क्योंकि निर्मित निर्देशिका का नाम हर बार जब भी लॉन्च किया जाता है तो उसे बदल दिया जाता है। सबसे सुविधाजनक विकल्प यह होगा कि खुद के क्लायंट-कोड को बदल दिया जाएगा।

हमारी चर्चा यहाँ भी देखें ।

जारी रहती है...


dpkg -Lएक ही काम नहीं करता है?
कज़ वुल्फ

@KazWolfe जाहिरा तौर पर, यहाँ हालांकि इसका उल्लेख नहीं किया गया है: manpages.ubuntu.com/manpages/precise/man1/dpkg.1.html
याकूब व्लिजम

धन्यवाद, यह रेडियट्रेक आइकॉन को खोजने में मददगार है। मैं अपने स्क्रीनशॉट से अपने खुद के मोनोक्रोम आइकन ( उदाहरण के लिए GitHub पर अपने खुद के स्रोत कोड से ) के बाद हूँ - और यह परिणामों के साथ नहीं है dpkg-query -Lfind / -name state-ok -type fलगता है के साथ खोज रुक गई है, लेकिन मैं इसे रात भर चलाना छोड़ दूंगा।
टॉम ब्रॉसमैन

@TomBrossman मुझे यकीन है कि हम पता लगा सकते हैं। मैं देखने के लिए खुद को स्थापित करूंगा।
याकूब Vlijm

1
@TomBrossman सर्वर अस्थायी रूप से डाउन हो सकता है, मुझे कुछ हिस्सों पर 404-नोट की त्रुटि नहीं मिली है। डाउनलोड की गई .deb फ़ाइल को देखते हुए, स्वयं क्लोकॉल्ड /usr/share/icons/hicolor/<size>/apps यद्यपि में कुछ आइकन स्थापित करता है । दुर्भाग्य से, .deb फ़ाइल स्थापित नहीं होती है: Errors were encountered while processing:मैं बाद में पुन : प्रयास करूँगा ...
याकूब Vlijm

4

प्रतीक और उनके संभावित स्थान

दो तरीके संकेतक संकेतक को रोजगार दे सकते हैं:

  • कस्टम आइकन। यह आमतौर पर अंदर चला जाता है /usr/share/pixmaps/, हालांकि यह संभव है कि कुछ लेखक अन्य निर्देशिकाओं के लिए संकेतक आइकन भेजें। जैकब व्लिजम, जिसका उत्तर इस पृष्ठ पर है और जो स्पेसव्यू संकेतक के लेखक भी हैं, उदाहरण के लिए, इस संकेतक के लिए आइकन रखना चाहते हैं /opt/spaceview/icon। इस प्रकार के आइकन के साथ यह थोड़ा मुश्किल है लेकिन जटिल नहीं है - एक आइकन फ़ाइल के लिए उपयोग करें dpkg -L <package name>या cat /var/lib/dpkg/info/PACKAGE.listखोजें, .pngया .svgविस्तार के साथ । ये सबसे विशिष्ट हैं
  • मानक, विषय-विशिष्ट आइकन। ये आमतौर पर /usr/share/iconsफ़ोल्डर में पाया जा सकता है । उदाहरण के लिए, मेरे संकेतक जैसे कि उडिसीस इंडिकेटर में, मैं अक्सर इस बात पर निर्भर करता हूं कि ये क्या हैं /usr/share/icons/gnome, क्योंकि ये मानक हैं और किसी भी Ubuntu इंस्टालेशन के साथ आते हैं। यदि आपको क्वेरी से कोई आइकन नहीं मिलता है dpkg, तो संभावना है कि पैकेज एक मानक आइकन का उपयोग करता है।

स्रोत पर जा रहे हैं

यदि पायथन या रूबी में एक संकेतक लिखा जाता है, तो सुराग के लिए स्रोत कोड की तलाश अपेक्षाकृत आसान हो सकती है, क्योंकि ये स्क्रिप्ट हैं, और grepस्रोत कोड के माध्यम से खोज करने के लिए इसका उपयोग करने के लिए पर्याप्त है । C और Vala जैसी संकलित भाषाएँ स्रोत कोड के साथ नहीं आती हैं, इसलिए आपको इसे प्राप्त करना होगा, या तो apt-get source package-nameजहाँ से या जहाँ से आपने पैकेज प्राप्त किया है। (साहसी उपयोगकर्ता hexdumpनिष्पादन योग्य फ़ाइल का उपयोग या विघटित कर सकते हैं , लेकिन IMHO यह सिर्फ एक आइकन के बारे में जिज्ञासा के लिए बहुत काम है)।

ध्यान दें : यदि कोई आइकन मानक निर्देशिकाओं में से किसी एक में रहता है, जैसे कि /usr/share/icons/या /usr/share/pixmaps, सॉफ़्टवेयर का लेखक बिना किसी एक्सटेंशन के बस नाम से आइकन को कॉल करना चुन सकता है। उदाहरण के लिए, मेरे में udisks-indicatorमैं मानक आइकनों में से एक को कॉल करने के लिए इस लाइन का उपयोग करता हूं:

self.app.set_icon("drive-harddisk-symbolic")

कमी .svgया .pngविस्तार पर ध्यान दें। इस प्रकार, इस मामले में, हमारे पास आइकन का एक नाम है, और हम इसे लिनक्स मानक कमांड जैसे locateया का उपयोग करके पता लगा सकते हैं find

मानक लिनक्स टूल का उपयोग करके खोजें

यदि आप वास्तव में आइकन खोजने के लिए एक कमांड रखना चाहते हैं, तो बस इस सरल संयोजन का उपयोग करें:

dpkg -L <Package name here> | xargs file  | grep -i image

यहाँ एक उदाहरण है। मैं एक तथ्य के लिए जानता हूं कि संकेतक डिस्कमैन एक कस्टम आइकन का उपयोग करता है। तो यह कमांड हमें क्या बताती है?

$ dpkg -L indicator-diskman | xargs file  | grep -i image                                                                
/usr/share/indicator-diskman/images:                    directory
/usr/share/indicator-diskman/images/drive-harddisk.svg: SVG Scalable Vector Graphics image
/usr/share/indicator-diskman/images/media-optical.png:  PNG image data, 64 x 64, 8-bit/color RGBA, non-interlaced
/usr/share/indicator-diskman/images/disks.png:          PNG image data, 64 x 64, 8-bit gray+alpha, non-interlaced
/usr/share/indicator-diskman/images/locked.png:         PNG image data, 16 x 16, 8-bit/color RGBA, non-interlaced
/usr/share/indicator-diskman/images/lock.svg:           SVG Scalable Vector Graphics image
/usr/share/indicator-diskman/images/unlocked.png:       PNG image data, 16 x 16, 8-bit/color RGBA, non-interlaced
/usr/share/indicator-diskman/images/media-eject.svg:    SVG Scalable Vector Graphics image
/usr/share/indicator-diskman/images/disk.png:           PNG image data, 32 x 32, 8-bit/color RGBA, non-interlaced
/usr/share/pixmaps/indicator-diskman.png:               PNG image data, 64 x 64, 8-bit gray+alpha, non-interlaced

सूचना /usr/share/pixmaps/indicator-diskman.pngअंतिम छवि है, जो क्या सूचक वास्तव में पैनल पर शो है।

और क्या होगा यदि सूचक एक मानक आइकन का उपयोग करता है? जाहिर है कोई उत्पादन नहीं होगा:

$ dpkg -L udisks-indicator | xargs file  | grep -i image                                                                 

$

निष्कर्ष

जब कोई सेट मानक नहीं होता है, तो उन विशिष्ट स्थानों का सेट होता है जहां आइकन जाते हैं, और हम dpkgप्रत्येक विशिष्ट पैकेज के साथ क्या फाइलें आती हैं, इसके बारे में जानकारी का उपयोग करने के लिए उपयोग कर सकते हैं । अंत में, शायद यह सबसे तकनीकी सुझाव नहीं है, लेकिन डेवलपर्स को एक ईमेल भेजने या उनके आईआरसी या चैट द्वारा रोकने पर विचार करें, और बस उनसे पूछें "अरे, कौन सा आइकन आपके संकेतक का उपयोग करता है?"। डेवलपर्स आमतौर पर ऐसे लोगों से सुनकर प्रसन्न होते हैं जो अपने सॉफ़्टवेयर का उपयोग करते हैं और एक त्वरित प्रश्न का उत्तर देने में कोई आपत्ति नहीं करेंगे।


धन्यवाद, यह उत्तर भी बहुत उपयोगी था, लेकिन मेरा खुद का डेस्कटॉप सिंक आइकन के साथ कुछ अजीब कर रहा है और मुझे उम्मीद है कि यह भी पता चलेगा।
टॉम ब्रॉसमैन

@TomBrossman कुछ अजीब करके, वास्तव में आपका क्या मतलब है?
सेर्गेई कोलोडियाज़नी 20

खुदक्लाउड का डेस्कटॉप सिंक एप्लिकेशन उन आइकनों की एक श्रृंखला स्थापित करता है जो इसका उपयोग नहीं करता है। मैंने उन्हें अनुकूलित करने और बदलने की उम्मीद की थी, लेकिन चूंकि यह उन्हें उड़ान में उत्पन्न करता है, इसलिए यह /tmpव्यावहारिक नहीं है। अधिकांश एप्लिकेशन के लिए उन्हें कस्टमाइज़ करना आपके उत्तर का उपयोग करना आसान है, क्योंकि वे स्थापित आइकन सेट (एस) का उपयोग करते हैं।
टॉम ब्रॉसमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.