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?dpkg-query -L
. La recherche avec desfind / -name state-ok -type f
regards a calé mais je vais la laisser tourner toute la nuit./usr/share/icons/hicolor/<size>/apps
. Malheureusement, le fichier .deb ne s'installe pas:Errors were encountered while processing:
je vais réessayer plus tard ...Icônes et leurs emplacements potentiels
Il y a deux façons dont l'indicateur pourrait utiliser des icônes:
/usr/share/pixmaps/
, bien qu'il soit possible que certains auteurs envoient des icônes d'indicateur à d'autres répertoires. Jacob Vlijm, dont la réponse se trouve sur cette page et qui est également l'auteur de l'indicateur SpaceView, par exemple, a choisi de placer des icônes pour cet indicateur/opt/spaceview/icon
. Avec ce type d'icônes, c'est un peu délicat mais pas complexe - utilisezdpkg -L <package name>
oucat /var/lib/dpkg/info/PACKAGE.list
et recherchez un fichier d'icône, avec.png
ou.svg
extension. Ce sont les plus typiques/usr/share/icons
dossier. Par exemple, dans mes indicateurs tels que Udisks Indicator, je me fie souvent à ce qui est dedans/usr/share/icons/gnome
, car ceux-ci sont standard et sont fournis avec toute installation d'Ubuntu. Si vous ne trouvez pas d'icône dans les requêtesdpkg
, il est probable que le package utilise une icône standard.Aller à la source
Si un indicateur est écrit en Python ou Ruby, la recherche d'indices dans le code source peut être relativement facile, car il s'agit de scripts, et il suffit d'utiliser
grep
pour rechercher dans le code source. Les langages compilés tels que C et Vala ne sont pas livrés avec du code source, vous devrez donc l'obtenir, soit viaapt-get source package-name
soit à partir de l'endroit où vous avez obtenu le package. (Les utilisateurs aventureux pourraient utiliserhexdump
ou décompiler le fichier exécutable, mais à mon humble avis, c'est trop de travail juste pour la curiosité d'une icône).REMARQUE : si une icône réside dans l'un des répertoires standard, tels que
/usr/share/icons/
ou/usr/share/pixmaps
, l'auteur du logiciel peut choisir d'appeler l'icône simplement par son nom, sans extensions. Par exemple, dans monudisks-indicator
j'utilise cette ligne pour appeler l'une des icônes standard:Notez l'absence
.svg
ou l'.png
extension. Ainsi, dans ce cas, nous avons un nom d'icône, et nous pouvons le localiser à l'aide de commandes standard Linux telles quelocate
oufind
.Recherche à l'aide d'outils Linux standard
Si vous voulez vraiment avoir une commande pour rechercher des icônes, utilisez simplement cette combinaison simple:
Voici un exemple. Je sais pertinemment que l'indicateur diskman utilise une icône personnalisée. Alors que nous dit cette commande?
Remarquez la
/usr/share/pixmaps/indicator-diskman.png
dernière image, ce que l'indicateur affiche réellement sur le panneau.Et si l'indicateur utilise une icône standard? Eh bien évidemment, il n'y aura pas de sortie:
Conclusion
Bien qu'il n'y ait pas de norme définie, il existe un ensemble d'endroits typiques où les icônes vont, et nous pouvons utiliser
dpkg
pour interroger les informations sur les fichiers fournis avec chaque package spécifique. Enfin, ce n'est peut-être pas la suggestion la plus technique, mais pensez à envoyer un e-mail aux développeurs ou à passer par leur IRC ou leur chat, et à leur demander simplement "Hé, quelle icône votre indicateur utilise-t-il?". Les développeurs sont généralement heureux d'entendre des personnes qui utilisent leur logiciel et ne voudront pas répondre à une question rapide.la source
/tmp
ce n'est pas pratique. Il est cependant facile de les personnaliser pour la plupart des applications en utilisant votre réponse, car ils utilisent le ou les jeux d'icônes installés.