¿Ubicación predeterminada para iconos indicadores no predeterminados?
No hay una ubicación predeterminada donde se almacenan estos íconos. Cualquier aplicación (-developer) puede almacenarlos donde se considere apropiado.
Sin embargo , la buena noticia es que los indicadores generalmente no instalan listas interminables de archivos e imágenes. Podemos limitar nuestra búsqueda (además de mirar el código) mirando la salida del comando:
dpkg-query -L <packagename>
En mi ejemplo de
dpkg-query -L placesfiles
esto, entre otros, generaría las siguientes imágenes:
/opt/placesfiles/images/dir_icon.png
/opt/placesfiles/images/placesfiles64.png
/usr/share/pixmaps/placesfiles.png
... Lo que haría que la búsqueda sea bastante limitada.
Del hombre 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”:
En el caso de Radiotray , encontré los siguientes .png
archivos (en ejecución 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 realmente necesitamos averiguarlo, buscar el código
... podemos ver los archivos instalados (dentro) para encontrar coincidencias de la cadena "icono". Muchos de los indicadores están escritos en uno de los lenguajes de script (como python
), lo que significa que se pueden buscar muy bien.
Un ejemplo
De nuevo usando el radiotray
ejemplo
dpkg-query -L radiotray | xargs grep icon
en la salida encontramos ao:
/usr/lib/python2.7/dist-packages/radiotray/SysTrayGui.py
self.icon.set_from_file(APP_ICON_CONNECT)
Mirando el archivo SysTrayGui.py
, podemos ver:
from lib.common import APPNAME, APPVERSION, APP_ICON_ON, APP_ICON_OFF, APP_ICON_CONNECT, APP_INDICATOR_ICON_ON, APP_INDICATOR_ICON_OFF
A partir de esto, podemos concluir que los iconos mencionados están definidos en el módulo common
dentro del (sub) directorio lib
. (Vea aquí cómo Python lo encuentra módulos, sección Subdirectorios )
En este módulo, podemos leer la sección:
# 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"
...y aquí estamos...
Situaciones excepcionales
Con todos mis indicadores prácticos, logré encontrar los íconos correspondientes utilizando los métodos anteriores.
Sin embargo, resulta posible compilar imágenes junto con el código en un solo ejecutable. No es necesario explicar que en tales casos no encontrará una imagen separada, ni podrá reemplazarlos sin editar el código y volver a compilar.
El caso de owncloud parece ser un caso así. El uso de los métodos anteriores mostró que se instaló un conjunto de iconos dentro /usr/share/icons/hicolor/<size>/apps
. Sin embargo, ninguno de estos íconos se usa en el indicador de ubuntu .
OP hizo bastante trabajo antes (y después) hizo esta pregunta. Uno de ellos era correr:
gdbus call --session --dest com.canonical.indicator.application --object-path /com/canonical/indicator/application/service --method com.canonical.indicator.application.service.GetApplications
... lo que nos da bastante información útil. La salida incluyó una sección:
('146028888067', 2, 'org.kde.StatusNotifierItem-22055-1', '/StatusNotifierItem/menu', '/tmp/iconcache-50ePXx', '', '', '', 'owncloud', 'ownCloud')
Mirando en el directorio /tmp/iconcache-50ePXx
, encontré los íconos exactos que usaba el indicador:
... lo que parece demostrar que estos íconos se generan sobre la marcha; Al cerrar owncloud, el directorio y sus iconos desaparecen.
Resultó posible cambiar el ícono del indicador reemplazando estos íconos:
lo que prueba que estos son los íconos que estábamos buscando.
Sin embargo, para automatizar lo que hice manualmente, se requiere un script / contenedor, ya que el nombre del directorio creado se cambia cada vez que se inicia owncloud. La opción más conveniente sería, por supuesto, que se cambiara el código del cliente de owncloud.
Vea también nuestra discusión aquí .
Continuará...
dpkg -L
hace lo mismo?