Posizione predefinita per le icone degli indicatori non predefinite?
Non esiste un percorso predefinito in cui sono memorizzate queste icone. Qualsiasi applicazione (-developer) può memorizzarli dove è ritenuto appropriato.
Tuttavia , la buona notizia è che gli indicatori di solito non installano elenchi infiniti di file e immagini. Possiamo limitare la nostra ricerca (oltre a guardare nel codice) guardando nell'output del comando:
dpkg-query -L <packagename>
Nel mio esempio di
dpkg-query -L placesfiles
questo tra l'altro avrebbe prodotto le seguenti immagini:
/opt/placesfiles/images/dir_icon.png
/opt/placesfiles/images/placesfiles64.png
/usr/share/pixmaps/placesfiles.png
... Il che renderebbe la ricerca abbastanza limitata.
Dall'uomo 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”:
Nel caso di Radiotray , ho trovato i seguenti .png
file (in esecuzione 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
Se dobbiamo davvero scoprirlo, cercando il codice
... possiamo cercare tra i file installati (all'interno) le corrispondenze della stringa "icona". Molti degli indicatori sono scritti in uno dei linguaggi di script (come python
), il che significa che sono molto ben ricercabili.
Un esempio
Ancora una volta usando l' radiotray
esempio
dpkg-query -L radiotray | xargs grep icon
nell'output troviamo ao:
/usr/lib/python2.7/dist-packages/radiotray/SysTrayGui.py
self.icon.set_from_file(APP_ICON_CONNECT)
Esaminando il file SysTrayGui.py
, possiamo vedere:
from lib.common import APPNAME, APPVERSION, APP_ICON_ON, APP_ICON_OFF, APP_ICON_CONNECT, APP_INDICATOR_ICON_ON, APP_INDICATOR_ICON_OFF
Da ciò, possiamo concludere che le icone menzionate sono definite nel modulo common
all'interno della (sotto) directory lib
. (Vedi qui come trova Python moduli, sezione Sottodirectory )
In questo modulo, possiamo leggere la sezione:
# 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"
... ed eccoci qui ...
Situazioni eccezionali
Con tutti i miei indicatori pratici, sono riuscito a trovare le icone corrispondenti utilizzando i metodi sopra indicati.
In realtà, tuttavia, è possibile compilare le immagini insieme al codice in un unico eseguibile. Non è necessario spiegare che in questi casi non troverai un'immagine separata, né sarai in grado di sostituirli senza modificare il codice e ricompilare.
Il caso di owncloud sembra essere un caso del genere. Utilizzando i metodi sopra indicati è stato installato un set di icone all'interno /usr/share/icons/hicolor/<size>/apps
. Nessuna di queste icone risulta essere utilizzata tuttavia nell'indicatore su Ubuntu .
OP ha fatto un bel po 'di lavoro prima (e dopo) di porre questa domanda. Uno di questi doveva correre:
gdbus call --session --dest com.canonical.indicator.application --object-path /com/canonical/indicator/application/service --method com.canonical.indicator.application.service.GetApplications
... che ci fornisce alcune informazioni utili. L'output includeva una sezione:
('146028888067', 2, 'org.kde.StatusNotifierItem-22055-1', '/StatusNotifierItem/menu', '/tmp/iconcache-50ePXx', '', '', '', 'owncloud', 'ownCloud')
Guardando nella directory /tmp/iconcache-50ePXx
, ho trovato le icone esatte utilizzate dall'indicatore:
... che sembra dimostrare che queste icone sono generate al volo; chiudendo owncloud, la directory e le sue icone scompaiono.
Si è scoperto che era possibile cambiare l'icona dell'indicatore sostituendo queste icone:
il che dimostra che queste sono davvero le icone che stavamo cercando.
Per automatizzare ciò che ho fatto manualmente, tuttavia, sarebbe necessario uno script / wrapper, poiché il nome della directory creata viene modificato ogni volta che viene lanciato owncloud. L'opzione più conveniente sarebbe ovviamente che il codice del client client fosse modificato.
Vedi anche la nostra discussione qui .
Continua...
dpkg -L
fa la stessa cosa?