Varsayılan olmayan gösterge simgeleri için varsayılan konum?
Bu simgelerin depolandığı varsayılan bir konum yoktur. Herhangi bir uygulama (-developer) bunları uygun görüldüğü yerlerde saklayabilir.
Ancak iyi haber, göstergelerin genellikle sonsuz dosya ve görüntü listesi yüklememesidir. Aramamızı komutun çıktısına bakarak (koda bakmak dışında) sınırlayabiliriz:
dpkg-query -L <packagename>
Benim örneğimde
dpkg-query -L placesfiles
bu diğerleri arasında aşağıdaki görüntüleri çıktılar:
/opt/placesfiles/images/dir_icon.png
/opt/placesfiles/images/placesfiles64.png
/usr/share/pixmaps/placesfiles.png
... bu da aramayı oldukça sınırlandıracaktı.
Adamdan 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”:
Radiotray durumunda , aşağıdaki .png
dosyaları buldum (çalışıyor 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
Biz ise gerçekten kod ararken, bulmak gerekir
... "icon" dizesinin eşleşmeleri için yüklenmiş dosyaları (içeride) arayabiliriz. Göstergelerin çoğu, senaryo dillerinden birinde (örneğin python
) yazılmıştır , bu da çok iyi arama yapabildikleri anlamına gelir.
Bir örnek
Yine radiotray
örneği kullanarak
dpkg-query -L radiotray | xargs grep icon
çıktıda ao buluyoruz:
/usr/lib/python2.7/dist-packages/radiotray/SysTrayGui.py
self.icon.set_from_file(APP_ICON_CONNECT)
Dosyaya bakarak SysTrayGui.py
şunları görebiliriz:
from lib.common import APPNAME, APPVERSION, APP_ICON_ON, APP_ICON_OFF, APP_ICON_CONNECT, APP_INDICATOR_ICON_ON, APP_INDICATOR_ICON_OFF
Bundan, bahsedilen simgelerin common
(alt) dizinin içindeki modülde tanımlandığı sonucuna varabiliriz lib
. (Bkz buraya piton o modülleri nasıl bulduğu, bölüm alt dizinleri )
Bu modülde bölümü okuyabiliriz:
# 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"
...ve işte buradayız...
İstisnai durumlar
Tüm göstergelerimin pratikte, yukarıdaki yöntemleri kullanarak ilgili simgeleri bulmayı başardım.
Bununla birlikte, görüntüleri kodla birlikte tek bir yürütülebilir dosyada derlemek mümkün görünmektedir. Bu gibi durumlarda ayrı bir görüntü bulamayacağınızı veya kodu düzenlemeden ve yeniden derlemeden bunları değiştiremeyeceğinizi açıklamaya gerek yoktur.
Owncloud vakası böyle bir durum gibi görünüyor. Yukarıdaki yöntem (ler) kullanılarak içeride bir dizi simge yüklendiğini gösterdi /usr/share/icons/hicolor/<size>/apps
. Bu simgelerin hiçbiri ubuntu üzerindeki göstergede kullanılmaz .
OP bu soruyu daha önce (ve sonra) oldukça çalıştı. Bunlardan biri koşmaktı:
gdbus call --session --dest com.canonical.indicator.application --object-path /com/canonical/indicator/application/service --method com.canonical.indicator.application.service.GetApplications
... bize oldukça faydalı bilgiler veriyor. Çıktıda bir bölüm vardı:
('146028888067', 2, 'org.kde.StatusNotifierItem-22055-1', '/StatusNotifierItem/menu', '/tmp/iconcache-50ePXx', '', '', '', 'owncloud', 'ownCloud')
Dizine bakarak /tmp/iconcache-50ePXx
, gösterge tarafından kullanılan kesin simgeleri buldum:
... bu simgelerin anında oluşturulduğunu kanıtlıyor gibi görünüyor; owncloud'u kapatmak dizini ve simgelerini yok eder.
Aşağıdaki simgeleri değiştirerek göstergenin simgesini değiştirmek mümkün oldu:
ki bunlar gerçekten aradığımız ikonlar.
Ancak manuel olarak yaptığım şeyi otomatikleştirmek için, kendi dizinin her başlatıldığında oluşturulan dizinin adı değiştiği için bir komut dosyası / paketleyici gerektirir. En uygun seçenek elbette owncloud-istemcisinin kodunun değiştirilmesidir.
Ayrıca buradaki tartışmamıza bakın .
Devam edecek...
dpkg -L
Aynı şeyi yapmıyor mu ?