Standardspeicherort für nicht standardmäßige Indikatorsymbole?
Es gibt keinen Standardspeicherort für diese Symbole. Jede Anwendung (-Entwickler) kann sie dort speichern, wo dies als angemessen erachtet wird.
Die gute Nachricht ist jedoch, dass Indikatoren normalerweise keine endlosen Listen von Dateien und Bildern installieren. Wir können unsere Suche einschränken, indem wir (abgesehen vom Blick in den Code) in die Ausgabe des Befehls schauen:
dpkg-query -L <packagename>
In meinem Beispiel von
dpkg-query -L placesfiles
Dies würde unter anderem die folgenden Bilder ausgeben:
/opt/placesfiles/images/dir_icon.png
/opt/placesfiles/images/placesfiles64.png
/usr/share/pixmaps/placesfiles.png
... was die Suche ziemlich einschränken würde.
Vom Menschen 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”:
Im Fall von Radiotray habe ich die folgenden .png
Dateien gefunden (läuft 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
Wenn wir es wirklich herausfinden müssen, suchen Sie den Code
... können wir (innerhalb) installierte Dateien nach Übereinstimmungen mit der Zeichenfolge "icon" durchsuchen. Viele der Indikatoren sind in einer der Skriptsprachen (wie python
) geschrieben, was bedeutet, dass sie sehr gut durchsuchbar sind.
Ein Beispiel
Wieder am radiotray
Beispiel
dpkg-query -L radiotray | xargs grep icon
In der Ausgabe finden wir ua:
/usr/lib/python2.7/dist-packages/radiotray/SysTrayGui.py
self.icon.set_from_file(APP_ICON_CONNECT)
Wenn SysTrayGui.py
wir in die Datei schauen, können wir sehen:
from lib.common import APPNAME, APPVERSION, APP_ICON_ON, APP_ICON_OFF, APP_ICON_CONNECT, APP_INDICATOR_ICON_ON, APP_INDICATOR_ICON_OFF
Daraus können wir schließen, dass die genannten Symbole im Modul common
im (Unter-) Verzeichnis definiert sind lib
. (Sehen Sie hier, wie Python Module findet, Abschnitt Unterverzeichnisse )
In diesem Modul können wir den Abschnitt lesen:
# 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"
...und hier sind wir...
Ausnahmesituationen
Mit praktisch allen meinen Indikatoren gelang es mir, die entsprechenden Symbole mithilfe der oben beschriebenen Methode (n) zu finden.
Es stellt sich jedoch heraus, dass es möglich ist, Bilder zusammen mit dem Code zu einer einzigen ausführbaren Datei zu kompilieren. Sie müssen nicht erklären, dass Sie in solchen Fällen weder ein separates Bild finden noch ersetzen können, ohne den Code zu bearbeiten und neu zu kompilieren.
Der Fall der eigenen Wolke scheint ein solcher Fall zu sein. Unter Verwendung der oben genannten Methode (n) wurde gezeigt, dass eine Reihe von Symbolen im Inneren installiert wurde /usr/share/icons/hicolor/<size>/apps
. Keines dieser Symbole wird jedoch in der Anzeige auf Ubuntu verwendet .
OP hat einige Arbeit geleistet, bevor (und nachdem) er diese Frage gestellt hat. Einer von ihnen war zu rennen:
gdbus call --session --dest com.canonical.indicator.application --object-path /com/canonical/indicator/application/service --method com.canonical.indicator.application.service.GetApplications
... was uns einige nützliche Informationen gibt. Die Ausgabe enthielt einen Abschnitt:
('146028888067', 2, 'org.kde.StatusNotifierItem-22055-1', '/StatusNotifierItem/menu', '/tmp/iconcache-50ePXx', '', '', '', 'owncloud', 'ownCloud')
Beim Durchsuchen des Verzeichnisses /tmp/iconcache-50ePXx
fand ich die genauen Symbole, die vom Indikator verwendet wurden:
... was zu beweisen scheint, dass diese Symbole im laufenden Betrieb generiert werden; Durch das Schließen von owncloud verschwinden das Verzeichnis und seine Symbole.
Es stellte sich heraus, dass es möglich war, das Symbol des Indikators durch Ersetzen dieser Symbole zu ändern:
was beweist, dass dies tatsächlich die Symbole sind, nach denen wir gesucht haben.
Um das, was ich manuell gemacht habe, zu automatisieren, wäre jedoch ein Skript / Wrapper erforderlich, da der Name des erstellten Verzeichnisses bei jedem Start von owncloud geändert wird. Die bequemste Option wäre natürlich, dass der Code des owncloud-Clients geändert wird.
Siehe auch unsere Diskussion hier .
Fortsetzung folgt...
dpkg -L
das Gleiche?dpkg-query -L
. Die Suche mit demfind / -name state-ok -type f
Aussehen scheint ins Stocken geraten zu sein, aber ich werde es über Nacht laufen lassen./usr/share/icons/hicolor/<size>/apps
. Leider wird die .deb-Datei nicht installiert:Errors were encountered while processing:
Ich werde es später erneutSymbole und ihre potenziellen Standorte
Es gibt zwei Möglichkeiten, wie Indikatoren Symbole verwenden können:
/usr/share/pixmaps/
, obwohl es möglich ist, dass einige Autoren Indikatorsymbole an andere Verzeichnisse senden. Jacob Vlijm, dessen Antwort auf dieser Seite steht und der auch Autor des SpaceView-Indikators ist, hat beispielsweise Symbole für diesen Indikator platziert/opt/spaceview/icon
. Mit dieser Art von Symbolen ist es etwas schwierig, aber nicht komplex - verwenden Siedpkg -L <package name>
odercat /var/lib/dpkg/info/PACKAGE.list
und suchen Sie nach einer Symboldatei mit.png
oder.svg
Erweiterung. Diese sind am typischsten/usr/share/icons
Ordner. Zum Beispiel verlasse ich mich bei meinen Indikatoren wie Udisks Indicator häufig auf die Inhalte/usr/share/icons/gnome
, da diese Standard sind und mit jeder Ubuntu-Installation geliefert werden . Wenn Sie beim Abfragen kein Symboldpkg
finden, verwendet das Paket wahrscheinlich ein Standardsymbol.Zur Quelle gehen
Wenn ein Indikator in Python oder Ruby geschrieben ist, kann das
grep
Durchsuchen des Quellcodes nach Hinweisen relativ einfach sein, da es sich um Skripte handelt und es ausreicht, den Quellcode zu durchsuchen. Kompilierte Sprachen wie C und Vala werden nicht mit Quellcode geliefert, sodass Sie ihn entweder überapt-get source package-name
oder von jedem Ort erhalten müssen, an dem Sie das Paket erhalten haben. (Abenteuerlustige Benutzer könntenhexdump
die ausführbare Datei verwenden oder dekompilieren, aber meiner Meinung nach ist es zu viel Arbeit, nur um neugierig auf ein Symbol zu werden.)HINWEIS : Wenn sich ein Symbol in einem der Standardverzeichnisse befindet, z. B.
/usr/share/icons/
oder/usr/share/pixmaps
, kann der Autor der Software das Symbol einfach beim Namen ohne Erweiterungen aufrufen. In meinerudisks-indicator
Zeile verwende ich beispielsweise diese Zeile, um eines der Standardsymbole aufzurufen:Beachten Sie das Fehlen
.svg
oder die.png
Erweiterung. In diesem Fall haben wir also einen Namen für das Symbol und können ihn mithilfe von Linux-Standardbefehlen wielocate
oder findenfind
.Suche mit Standard-Linux-Tools
Wenn Sie wirklich einen Befehl zum Suchen von Symbolen haben möchten, verwenden Sie einfach diese einfache Kombination:
Hier ist ein Beispiel. Ich weiß, dass der Indikator diskman ein benutzerdefiniertes Symbol verwendet. Was sagt uns dieser Befehl?
Beachten Sie das
/usr/share/pixmaps/indicator-diskman.png
letzte Bild, das der Indikator tatsächlich auf dem Bedienfeld anzeigt.Und was ist, wenn der Indikator ein Standardsymbol verwendet? Nun, offensichtlich wird es keine Ausgabe geben:
Fazit
Es gibt zwar keinen festgelegten Standard, aber eine Reihe typischer Orte, an denen Symbole angezeigt werden, und wir können
dpkg
Informationen darüber abfragen, welche Dateien mit den einzelnen Paketen geliefert werden. Schließlich ist es vielleicht nicht der technischste Vorschlag, aber Sie sollten Entwicklern eine E-Mail senden oder in ihrem IRC oder Chat vorbeischauen und sie einfach fragen: "Hey, welches Symbol verwendet Ihr Indikator?". Entwickler sind normalerweise froh, von Leuten zu hören, die ihre Software verwenden, und haben nichts dagegen, eine kurze Frage zu beantworten.quelle
/tmp
es nicht praktisch. Das Anpassen für die meisten Anwendungen ist jedoch mit Ihrer Antwort einfach, da sie die installierten Symbolsätze verwenden.