Local padrão para ícones de indicador não padrão?
Não há local padrão onde esses ícones são armazenados. Qualquer aplicativo (-developer) pode armazená-los onde for considerado apropriado.
No entanto , a boa notícia é que os indicadores geralmente não instalam listas intermináveis de arquivos e imagens. Nós podemos limitar nossa busca por (além de olhar para o código) olhando para a saída do comando:
dpkg-query -L <packagename>
No meu exemplo de
dpkg-query -L placesfiles
isso, entre outros, produzirá as seguintes imagens:
/opt/placesfiles/images/dir_icon.png
/opt/placesfiles/images/placesfiles64.png
/usr/share/pixmaps/placesfiles.png
... O que tornaria a pesquisa bastante limitada.
De man 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”:
No caso de Radiotray , encontrei os seguintes arquivos .png
(executando 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 nós realmente precisarmos descobrir, pesquisando o código
... podemos examinar (dentro) arquivos instalados para correspondências da string "ícone". Muitos dos indicadores são escritos em uma das linguagens de script (como python
), o que significa que eles são muito pesquisáveis.
Um exemplo
Novamente usando o exemplo radiotray
dpkg-query -L radiotray | xargs grep icon
na saída encontramos um.o .:
/usr/lib/python2.7/dist-packages/radiotray/SysTrayGui.py
self.icon.set_from_file(APP_ICON_CONNECT)
Olhando para o arquivo 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 disso, podemos concluir que os ícones mencionados estão definidos no módulo common
dentro do (sub) diretório lib
. (Veja aqui como o python o encontra módulos, seção Subdiretórios )
Neste módulo, podemos ler a seção:
# 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"
... e aqui estamos nós ...
Situações excepcionais
Com todos os meus indicadores práticos, consegui encontrar os ícones correspondentes usando o (s) método (s) acima.
No entanto, é possível compilar imagens junto com o código em um único executável. Não há necessidade de explicar que, em tais casos, você não encontrará uma imagem separada, nem poderá substituí-las sem editar o código e recompilar.
O caso do próprio nuvem parece ser um desses casos. Usando o (s) método (s) acima mostrou que um conjunto de ícones foi instalado dentro de /usr/share/icons/hicolor/<size>/apps
. Nenhum destes ícones acaba por ser utilizado no indicador no Ubuntu .
OP fez algum trabalho antes (e depois), ele fez esta pergunta. Um deles foi executar:
gdbus call --session --dest com.canonical.indicator.application --object-path /com/canonical/indicator/application/service --method com.canonical.indicator.application.service.GetApplications
... o que nos dá bastante informação útil. A saída incluiu uma seção:
('146028888067', 2, 'org.kde.StatusNotifierItem-22055-1', '/StatusNotifierItem/menu', '/tmp/iconcache-50ePXx', '', '', '', 'owncloud', 'ownCloud')
Olhando para o diretório /tmp/iconcache-50ePXx
, encontrei os ícones exatos que foram usados pelo indicador:
< href="https://i.stack.imgur.com/7ksaI.png">
... o que parece provar que esses ícones são gerados em tempo real; fechar o owncloud faz com que o diretório e seus ícones desapareçam.
Foi possível alterar o ícone do indicador substituindo esses ícones:
o que prova que estes são de fato os ícones que procurávamos.
Para automatizar o que fiz manualmente, no entanto, seria necessário um script / wrapper, já que o nome do diretório criado é alterado toda vez que o owncloud é iniciado. A opção mais conveniente seria, claro, que o código do próprio cliente do cliente seria alterado.
Veja também nossa discussão aqui .
Para continuar ...