Lokasi default untuk ikon indikator non-standar?
Tidak ada lokasi default tempat ikon-ikon ini disimpan. Aplikasi apa pun (-developer) dapat menyimpannya di tempat yang dianggap tepat.
Namun , kabar baiknya adalah indikator biasanya tidak menginstal daftar file dan gambar yang tidak ada habisnya. Kami dapat membatasi pencarian kami dengan (selain melihat ke dalam kode) melihat ke dalam output dari perintah:
dpkg-query -L <packagename>
Dalam contoh saya tentang
dpkg-query -L placesfiles
ini akan antara lain, menampilkan gambar berikut:
/opt/placesfiles/images/dir_icon.png
/opt/placesfiles/images/placesfiles64.png
/usr/share/pixmaps/placesfiles.png
... Yang akan membuat pencarian sangat terbatas.
Dari manusia 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”:
Dalam kasus Radiotray , saya menemukan .png
file - file berikut (sedang berjalan 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
Jika kita benar - benar perlu mencari tahu, cari kodenya
... kita dapat melihat (dalam) file yang diinstal untuk menemukan kecocokan dari "ikon" string. Banyak indikator ditulis dalam salah satu bahasa skrip (seperti python
), yang berarti mereka sangat baik dicari.
Sebuah contoh
Lagi menggunakan radiotray
contoh
dpkg-query -L radiotray | xargs grep icon
dalam output kita temukan ao:
/usr/lib/python2.7/dist-packages/radiotray/SysTrayGui.py
self.icon.set_from_file(APP_ICON_CONNECT)
Melihat ke dalam file SysTrayGui.py
, kita dapat melihat:
from lib.common import APPNAME, APPVERSION, APP_ICON_ON, APP_ICON_OFF, APP_ICON_CONNECT, APP_INDICATOR_ICON_ON, APP_INDICATOR_ICON_OFF
Dari sini, kita dapat menyimpulkan ikon yang disebutkan didefinisikan dalam modul common
di dalam direktori (sub) lib
. (Lihat di sini bagaimana python menemukannya modul, bagian Subdirektori )
Dalam modul ini, kita dapat membaca bagian:
# 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"
... dan di sini kita ...
Situasi luar biasa
Dengan praktis semua indikator saya, saya berhasil menemukan ikon yang sesuai menggunakan metode (s) di atas.
Namun ternyata dimungkinkan, untuk mengkompilasi gambar bersama dengan kode menjadi satu executable. Tidak perlu menjelaskan bahwa dalam kasus seperti itu Anda tidak akan menemukan gambar yang terpisah, Anda juga tidak akan dapat menggantinya tanpa mengedit kode dan mengkompilasi ulang.
Kasus owncloud tampaknya merupakan kasus seperti itu. Menggunakan metode di atas (s) menunjukkan serangkaian ikon dipasang di dalamnya /usr/share/icons/hicolor/<size>/apps
. Namun, tidak satu pun dari ikon ini yang digunakan dalam indikator di ubuntu .
OP melakukan beberapa pekerjaan sebelum (dan setelah) dia menanyakan pertanyaan ini. Salah satunya adalah menjalankan:
gdbus call --session --dest com.canonical.indicator.application --object-path /com/canonical/indicator/application/service --method com.canonical.indicator.application.service.GetApplications
... yang memberi kami beberapa informasi berguna. Output termasuk bagian:
('146028888067', 2, 'org.kde.StatusNotifierItem-22055-1', '/StatusNotifierItem/menu', '/tmp/iconcache-50ePXx', '', '', '', 'owncloud', 'ownCloud')
Melihat ke direktori /tmp/iconcache-50ePXx
, saya menemukan ikon yang tepat yang digunakan oleh indikator:
... yang tampaknya membuktikan ikon-ikon ini dihasilkan dengan cepat; menutup owncloud membuat direktori dan ikonnya menghilang.
Ternyata dimungkinkan untuk mengubah ikon indikator dengan mengganti ikon-ikon ini:
yang membuktikan ini memang ikon yang kami cari.
Untuk mengotomatiskan apa yang saya lakukan secara manual, akan membutuhkan skrip / pembungkus, karena nama direktori yang dibuat berubah setiap kali owncloud diluncurkan. Opsi yang paling nyaman tentu saja adalah bahwa kode owncloud-client akan diubah.
Lihat juga diskusi kami di sini .
Bersambung...
dpkg -L
melakukan hal yang sama?