Emplacement par défaut pour les icônes d'indicateur non par défaut?
Il n'y a aucun emplacement par défaut où ces icônes sont stockées. Toute application (-developer) peut les stocker là où cela est jugé approprié.
Cependant , la bonne nouvelle est que les indicateurs n'installent généralement pas de listes infinies de fichiers et d'images. Nous pouvons limiter notre recherche en (outre la recherche dans le code) en regardant la sortie de la commande:
dpkg-query -L <packagename>
Dans mon exemple de
dpkg-query -L placesfiles
ce serait entre autres, la sortie des images suivantes:
/opt/placesfiles/images/dir_icon.png
/opt/placesfiles/images/placesfiles64.png
/usr/share/pixmaps/placesfiles.png
... Ce qui rendrait la recherche assez limitée.
De l'homme 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”:
Dans le cas de Radiotray , j'ai trouvé les .png
fichiers suivants (en cours d'exécution 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
Si nous avons vraiment besoin de le savoir, en recherchant le code
... nous pouvons rechercher dans les fichiers installés (à l'intérieur) les correspondances de la chaîne "icon". De nombreux indicateurs sont écrits dans l'un des langages de script (comme python
), ce qui signifie qu'ils sont très bien consultables .
Un exemple
En utilisant à nouveau l' radiotray
exemple
dpkg-query -L radiotray | xargs grep icon
en sortie on retrouve ao:
/usr/lib/python2.7/dist-packages/radiotray/SysTrayGui.py
self.icon.set_from_file(APP_ICON_CONNECT)
En examinant le fichier SysTrayGui.py
, nous pouvons voir:
from lib.common import APPNAME, APPVERSION, APP_ICON_ON, APP_ICON_OFF, APP_ICON_CONNECT, APP_INDICATOR_ICON_ON, APP_INDICATOR_ICON_OFF
De cela, nous pouvons conclure que les icônes mentionnées sont définies dans le module common
à l'intérieur du répertoire (sous) lib
. (Voir ici comment python trouve ses modules, section Sous - répertoires )
Dans ce module, nous pouvons lire la section:
# 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"
...et nous voici...
Situations exceptionnelles
Avec la pratique de tous mes indicateurs, j'ai réussi à trouver les icônes correspondantes en utilisant la ou les méthodes ci-dessus.
Il s'avère cependant possible de compiler des images avec le code dans un seul exécutable. Inutile d'expliquer que dans de tels cas, vous ne trouverez pas d'image séparée, et vous ne pourrez pas les remplacer sans modifier le code et recompiler.
Le cas de owncloud semble être un tel cas. L'utilisation des méthodes ci-dessus a montré qu'un ensemble d'icônes était installé à l'intérieur /usr/share/icons/hicolor/<size>/apps
. Aucune de ces icônes ne s'avère cependant être utilisée dans l'indicateur sur ubuntu .
OP a fait pas mal de travail avant (et après) qu'il a posé cette question. L'un d'eux devait exécuter:
gdbus call --session --dest com.canonical.indicator.application --object-path /com/canonical/indicator/application/service --method com.canonical.indicator.application.service.GetApplications
... ce qui nous donne quelques informations utiles. La sortie comprenait une section:
('146028888067', 2, 'org.kde.StatusNotifierItem-22055-1', '/StatusNotifierItem/menu', '/tmp/iconcache-50ePXx', '', '', '', 'owncloud', 'ownCloud')
En regardant dans le répertoire /tmp/iconcache-50ePXx
, j'ai trouvé les icônes exactes utilisées par l'indicateur:
... ce qui semble prouver que ces icônes sont générées à la volée; la fermeture d'owncloud fait disparaître le répertoire et ses icônes.
Il s'est avéré possible de changer l'icône de l'indicateur en remplaçant ces icônes:
ce qui prouve que ce sont bien les icônes que nous recherchions.
Cependant, pour automatiser ce que j'ai fait manuellement, il faudrait un script / wrapper, car le nom du répertoire créé est changé chaque fois que owncloud est lancé. L'option la plus pratique serait bien sûr de changer le code du client owncloud.
Voir également notre discussion ici .
À suivre...
dpkg -L
la même chose?