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?dpkg-query -L
. Pencarian denganfind / -name state-ok -type f
tampilan terhenti tetapi saya akan membiarkannya berjalan semalaman./usr/share/icons/hicolor/<size>/apps
. Sayangnya, file .deb tidak dapat diinstal:Errors were encountered while processing:
Saya akan mencoba lagi nanti ...Ikon dan lokasi potensial mereka
Ada dua cara indikator menggunakan ikon:
/usr/share/pixmaps/
, meskipun ada kemungkinan beberapa penulis mengirim ikon indikator ke direktori lain. Jacob Vlijm, yang jawabannya ada di halaman ini dan yang juga penulis indikator SpaceView, misalnya, memilih untuk menempatkan ikon untuk indikator tersebut/opt/spaceview/icon
. Dengan jenis ikon ini sedikit rumit tetapi tidak rumit - gunakandpkg -L <package name>
ataucat /var/lib/dpkg/info/PACKAGE.list
dan cari file ikon, dengan.png
atau.svg
ekstensi. Ini yang paling khas/usr/share/icons
folder. Misalnya, dalam indikator saya seperti Indikator Udisks, saya sering mengandalkan apa yang ada di dalamnya/usr/share/icons/gnome
, karena ini adalah standar dan dilengkapi dengan instalasi Ubuntu. Jika Anda tidak menemukan ikon dari permintaandpkg
, kemungkinan paket menggunakan ikon standar.Pergi ke sumbernya
Jika indikator ditulis dalam Python atau Ruby, mencari melalui kode sumber untuk petunjuk bisa relatif mudah, karena ini adalah skrip, dan itu cukup untuk digunakan
grep
untuk mencari melalui kode sumber. Bahasa yang dikompilasi seperti C dan Vala tidak datang dengan kode sumber, jadi Anda harus mendapatkannya, baik melaluiapt-get source package-name
atau dari mana pun Anda memperoleh paket. (Pengguna petualang bisa menggunakanhexdump
atau mendekompilasi file yang dapat dieksekusi, tapi IMHO itu terlalu banyak bekerja hanya untuk rasa ingin tahu tentang ikon).CATATAN : jika ikon berada di salah satu direktori standar, seperti
/usr/share/icons/
atau/usr/share/pixmaps
, pembuat perangkat lunak dapat memilih untuk memanggil ikon hanya dengan nama, tanpa ekstensi. Misalnya, di saya,udisks-indicator
saya menggunakan baris ini untuk memanggil salah satu ikon standar:Perhatikan kekurangan
.svg
atau.png
ekstensi. Jadi, dalam hal ini, kami memiliki nama ikon, dan kami dapat menemukannya menggunakan perintah standar Linux sepertilocate
ataufind
.Cari menggunakan alat Linux standar
Jika Anda benar-benar ingin memiliki perintah untuk mencari ikon, cukup gunakan kombinasi sederhana ini:
Ini sebuah contoh. Saya tahu pasti bahwa indikator diskman menggunakan ikon khusus. Jadi apa yang diperintahkan perintah ini kepada kita?
Perhatikan
/usr/share/pixmaps/indicator-diskman.png
gambar terakhir, yang sebenarnya ditunjukkan oleh indikator di panel.Dan bagaimana jika indikator menggunakan ikon standar? Yah jelas tidak akan ada output:
Kesimpulan
Meskipun tidak ada standar yang ditetapkan, ada set tempat khas di mana ikon pergi, dan kita dapat menggunakan
dpkg
untuk menanyakan informasi tentang file apa yang datang dengan setiap paket tertentu. Akhirnya, mungkin itu bukan saran yang paling teknis, tetapi pertimbangkan untuk mengirim email kepada pengembang atau berhenti dengan IRC atau obrolan mereka, dan hanya bertanya kepada mereka "Hei, ikon apa yang digunakan indikator Anda?". Pengembang biasanya senang mendengar dari orang-orang yang menggunakan perangkat lunak mereka dan tidak keberatan menjawab pertanyaan cepat.sumber
/tmp
itu tidak praktis. Menyesuaikan mereka untuk sebagian besar aplikasi adalah mudah menggunakan jawaban Anda, karena mereka menggunakan set ikon yang terinstal.