GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Wie finde ich die Symboldateien, die von nicht standardmäßigen Statusmenüs (auch bekannt als Indikatoren) verwendet werden?

Ich möchte die Position der Symbole finden, die von einigen nicht standardmäßigen Statusmenüs (auch Anwendungsindikatoren oder Indikator-Applets genannt) verwendet werden.

Wo befinden sich diese Symbolbilddateien?

In meinem Screenshot habe ich ownCloud und Radiotray, aber ich hätte gerne eine allgemeine Antwort, die sich nicht auf diese speziellen Symbole bezieht, bitte. Ich kenne die Dateinamen oder Dateitypen nicht, daher ist die Suche schwierig.

Akzeptierte Antwort:

Standardspeicherort für nicht standardmäßige Anzeigesymbole?

Es gibt keinen Standardspeicherort für diese Symbole. Jede Anwendung (-Entwickler) kann sie dort speichern, wo es für angemessen erachtet wird.

Allerdings , die gute Nachricht ist, dass Indikatoren normalerweise keine endlosen Listen von Dateien und Bildern installieren. Wir können unsere Suche einschränken, indem wir (abgesehen vom Durchsuchen des Codes) 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:

//eadn-wc01-5196795.nxedge.io/opt/placesfiles/images/dir_icon.png
//eadn-wc01-5196795.nxedge.io/opt/placesfiles/images/placesfiles64.png
//eadn-wc01-5196795.nxedge.io/usr/share/pixmaps/placesfiles.png

…Was die Suche ziemlich einschränken würde.

Von 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”:

Im Fall von Radiotray , habe ich folgende .png gefunden Dateien (durch Ausführen von dpkg-query -L radiotray | grep png ):

//eadn-wc01-5196795.nxedge.io/usr/share/radiotray/images/radiotray_connecting.png
//eadn-wc01-5196795.nxedge.io/usr/share/radiotray/images/radiotray_on.png
//eadn-wc01-5196795.nxedge.io/usr/share/radiotray/images/radiotray_off.png
//eadn-wc01-5196795.nxedge.io/usr/share/radiotray/images/radiotray.png
//eadn-wc01-5196795.nxedge.io/usr/share/pixmaps/radiotray.png

Wenn wir wirklich müssen Sie herausfinden, indem Sie den Code durchsuchen

…können wir (innerhalb) installierter 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 mit dem radiotray Beispiel

dpkg-query -L radiotray | xargs grep icon

in der Ausgabe finden wir u.a.:

/usr/lib/python2.7/dist-packages/radiotray/SysTrayGui.py 
                 self.icon.set_from_file(APP_ICON_CONNECT)

Ein Blick in die Datei SysTrayGui.py , 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 Icons im Modul common definiert sind im (Unter-)Verzeichnis lib . (Sehen Sie hier, wie Python seine 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…

Außergewöhnliche Situationen

Mit praktisch allen meinen Indikatoren gelang es mir, die entsprechenden Symbole mit der/den oben genannten Methode(n) zu finden.

Verwandt:Finden Sie nahezu doppelte Dateien in einem Ordner?

Es stellt sich jedoch heraus, dass es möglich ist, Bilder zusammen mit dem Code zu einer einzigen ausführbaren Datei zu kompilieren. Es muss nicht erklärt werden, dass Sie in solchen Fällen weder ein separates Image finden, noch diese ersetzen können, ohne den Code zu bearbeiten und neu zu kompilieren.

Der Fall von owncloud scheint ein solcher Fall zu sein. Die Verwendung der obigen Methode(n) zeigte, dass eine Reihe von Symbolen in /usr/share/icons/hicolor/<size>/apps installiert wurde . Keines dieser Symbole wird jedoch im Indikator auf Ubuntu verwendet .

OP hat ziemlich viel Arbeit geleistet, bevor (und nachdem) er diese Frage gestellt hat. Einer davon sollte laufen:

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 liefert. Die Ausgabe enthielt einen Abschnitt:

('146028888067', 2, 'org.kde.StatusNotifierItem-22055-1', '/StatusNotifierItem/menu', '/tmp/iconcache-50ePXx', '', '', '', 'owncloud', 'ownCloud')

Schauen Sie in das Verzeichnis /tmp/iconcache-50ePXx , habe ich die genauen Symbole gefunden, die vom Indikator verwendet wurden:

… was zu beweisen scheint, dass diese Symbole im laufenden Betrieb generiert werden; das Schließen von owncloud lässt das Verzeichnis und seine Icons verschwinden.

Es stellte sich heraus, dass es möglich war, das Symbol des Indikators zu ändern, indem diese Symbole ersetzt wurden:

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. Am bequemsten wäre natürlich, den Code des owncloud-Clients zu ändern.

Fortsetzung folgt…


Ubuntu
  1. So suchen Sie in der Konsole nach großen Dateien

  2. Wie finde ich den Hash-Algorithmus, der zum Hashen von Passwörtern verwendet wird?

  3. Wie kann ich das Ubuntu-Telefon sichern?

  4. Wie finde ich den Namen einer Png-Datei, die auf einem Desktop Launcher verwendet wird?

  5. So finden Sie alle Sparse-Dateien in Linux

So finden Sie Dateien in Linux mit dem Find-Befehl

So finden Sie Dateien über die Befehlszeile im Linux-Terminal

So entpacken Sie die gz-Dateien unter Linux

So finden Sie die MAC-Adresse in Ubuntu

So finden Sie Dateien in der Ubuntu-Befehlszeile

So finden Sie Dateien mit dem fd-Befehl in Linux