गैर-डिफ़ॉल्ट संकेतक आइकन के लिए डिफ़ॉल्ट स्थान?
कोई डिफ़ॉल्ट स्थान नहीं है जहां ये आइकन संग्रहीत हैं। कोई भी एप्लिकेशन (-डॉलर) उन्हें स्टोर कर सकता है जहां इसे उपयुक्त माना जाता है।
हालांकि , अच्छी खबर यह है कि संकेतक आमतौर पर फ़ाइलों और छवियों की अंतहीन सूची स्थापित नहीं करते हैं। हम अपनी खोज को कमांड के आउटपुट में देख कर (कोड को देखने के अलावा) सीमित कर सकते हैं:
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
एक ही काम नहीं करता है?