GNU/Linux >> Belajar Linux >  >> Ubuntu

Bagaimana Menemukan File Ikon yang Digunakan Oleh Menu Status Non-default (alias Indikator)?

Saya ingin mencari lokasi ikon yang digunakan oleh beberapa menu status non-default (juga disebut indikator aplikasi atau applet indikator).

Di mana file gambar ikon ini berada?

Dalam tangkapan layar saya, saya memiliki ownCloud dan Radiotray, tetapi saya ingin jawaban umum yang tidak spesifik untuk ikon-ikon khusus ini. Saya tidak tahu nama file atau jenis file sehingga pencarian sulit.

Jawaban yang Diterima:

Lokasi default untuk ikon indikator non-default?

Tidak ada lokasi default tempat ikon-ikon ini disimpan. Aplikasi apa pun (-developer) dapat menyimpannya di tempat yang dianggap sesuai.

Namun , kabar baiknya adalah indikator biasanya tidak menginstal daftar file dan gambar yang tak ada habisnya. Kita dapat membatasi pencarian kita dengan (selain melihat ke dalam kode) melihat ke dalam output dari perintah:

dpkg-query -L <packagename>

Dalam contoh saya

dpkg-query -L placesfiles

ini antara lain akan menampilkan gambar berikut:

//eadn-wc01-5196795.nxedge.io/opt/placesfiles/images/dir_icon.png
//eadn-wc01-5196795.nxedge.io/opt/placesfiles/images/placesfiles64.png
//eadn-wc01-5196795.nxedge.io/usr/share/pixmaps/placesfiles.png

…Yang akan membuat pencarian menjadi sangat terbatas.

Dari man 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 Radioray , saya menemukan .png berikut ini file (menjalankan dpkg-query -L radiotray | grep png ):

//eadn-wc01-5196795.nxedge.io/usr/share/radiotray/images/radiotray_connecting.png
//eadn-wc01-5196795.nxedge.io/usr/share/radiotray/images/radiotray_on.png
//eadn-wc01-5196795.nxedge.io/usr/share/radiotray/images/radiotray_off.png
//eadn-wc01-5196795.nxedge.io/usr/share/radiotray/images/radiotray.png
//eadn-wc01-5196795.nxedge.io/usr/share/pixmaps/radiotray.png

Jika kita benar-benar perlu mencari tahu, cari kodenya

...kita dapat melihat melalui (di dalam) file yang diinstal untuk menemukan kecocokan dari "ikon" string. Banyak indikator ditulis dalam salah satu bahasa skrip (seperti python ), yang berarti dapat ditelusuri dengan sangat baik.

Contoh

Sekali lagi menggunakan radiotray contoh

dpkg-query -L radiotray | xargs grep icon

dalam output kami menemukan a.o.:

/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 bahwa ikon yang disebutkan didefinisikan dalam modul common di dalam direktori (sub) lib . (Lihat di sini bagaimana python menemukan modulnya, 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 inilah kami…

Situasi luar biasa

Dengan praktis semua indikator saya, saya berhasil menemukan ikon yang sesuai menggunakan metode di atas.

Terkait:Temukan file yang hampir duplikat di folder?

Namun ternyata dimungkinkan, untuk mengkompilasi gambar bersama dengan kode menjadi satu yang dapat dieksekusi. Tidak perlu dijelaskan bahwa dalam kasus seperti itu Anda tidak akan menemukan gambar terpisah, Anda juga tidak akan dapat menggantinya tanpa mengedit kode dan mengkompilasi ulang.

Kasus owncloud tampaknya menjadi kasus seperti itu. Menggunakan metode di atas menunjukkan sekumpulan ikon dipasang di dalam /usr/share/icons/hicolor/<size>/apps . Tak satu pun dari ikon ini yang digunakan dalam indikator di ubuntu .

OP melakukan beberapa pekerjaan sebelum (dan sesudah) 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 informasi yang cukup berguna. Outputnya 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 persis yang digunakan oleh indikator:

… yang tampaknya membuktikan bahwa ikon-ikon ini dihasilkan dengan cepat; menutup owncloud membuat direktori dan ikonnya hilang.

Ternyata ikon indikator dapat diubah dengan mengganti ikon berikut:

yang membuktikan bahwa ini memang ikon yang kami cari.

Untuk mengotomatisasi 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 klien owncloud akan diubah.

Bersambung…


Ubuntu
  1. Cara memeriksa file besar di konsol

  2. Bagaimana Cara Menggunakan Gui Untuk Mencari File Di Gnome?

  3. Bagaimana Menemukan File Di Sektor Tertentu?

  1. Bagaimana Menemukan Nama File Png yang Digunakan Pada Peluncur Desktop?

  2. Bagaimana menemukan semua file yang jarang di Linux

  3. Bagaimana menemukan direktori terbesar atau file terbesar?

  1. Menemukan File di Command Line (Cara)

  2. Cara Menemukan File di CentOS 8 di Command Line

  3. Linux:Bagaimana Menemukan Driver Perangkat yang Digunakan Untuk Perangkat?