Місце за замовчуванням для значків індикаторів, що не замовчуються?
Немає місця за замовчуванням, де зберігаються ці значки. Будь-яка програма (-девелопер) може зберігати їх там, де це вважається відповідним.
Однак хороша новина полягає в тому, що індикатори зазвичай не встановлюють нескінченні списки файлів і зображень. Ми можемо обмежити наш пошук, окрім того, як шукати код), дивлячись на висновок команди:
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”:
У випадку з Radiotray я знайшов такі .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
Якщо нам справді потрібно це з’ясувати, шукаючи код
... ми можемо переглядати (всередині) встановлені файли на відповідність рядка "icon". Багато показників написані на одній із мов скриптів (наприклад python
), що означає, що вони дуже добре шукають.
Приклад
Знову використовуючи radiotray
приклад
dpkg-query -L radiotray | xargs grep icon
у висновку ми знаходимо ао:
/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
. (Дивіться тут, як python знаходить його модулі, розділ Підкаталоги )
У цьому модулі ми можемо прочитати розділ:
# 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
, я знайшов точні піктограми, які використовував індикатор:
... що, здається, доводить, що ці іконки генеруються на льоту; При закритті owncloud каталог і його піктограми зникають.
Виявилося, що можна змінити піктограму індикатора, замінивши ці значки:
що доводить, що це справді значки, які ми шукали.
Однак для автоматизації того, що я робив вручну, знадобиться сценарій / обгортка, оскільки ім'я створеної каталогів змінюється щоразу, коли запускається owncloud. Найзручнішим варіантом, звичайно, буде те, що код власного клієнта-клієнта буде змінено.
Дивіться також нашу дискусію тут .
Далі буде...
dpkg -L
робить те саме?