Местоположение по умолчанию для значков индикатора не по умолчанию?
Там нет места по умолчанию, где хранятся эти значки. Любое приложение (-developer) может хранить их там, где это будет сочтено целесообразным.
Тем не менее , хорошая новость заключается в том, что индикаторы обычно не устанавливают бесконечные списки файлов и изображений. Мы можем ограничить наш поиск (кроме просмотра кода) просмотром вывода команды:
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
Если нам действительно нужно это выяснить, ищем код
... мы можем просматривать (внутри) установленные файлы на предмет совпадения строки "значок". Многие из индикаторов написаны на одном из языков сценариев (например 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"
... и вот мы здесь ...
Исключительные ситуации
Используя практически все мои индикаторы, мне удалось найти соответствующие значки, используя метод (ы) выше.
Однако оказывается возможным собрать изображения вместе с кодом в один исполняемый файл. Не нужно объяснять, что в таких случаях вы не найдете отдельное изображение и не сможете заменить их без редактирования кода и перекомпиляции.
Случай owncloud, кажется, такой случай. Использование вышеупомянутого метода (ов) показало, что набор иконок был установлен внутри /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. Конечно, наиболее удобным вариантом будет изменение кода owncloud-client.
Смотрите также наше обсуждение здесь .
Продолжение следует...
dpkg -L
делает то же самое?