
Ich erstelle eine App, dieInstallieren Sie ein Symbolfür eine anwendungsspezifische Erweiterung ( .crystalopen
), und zwar auf eine Weise, die nicht nur unter Ubuntu/GNOME funktioniert, sondern auchportierbar auf andere Desktopumgebungenwie KDE.
Die App installiert sich selbst auf ~/.local/bin
(und nicht auf /usr/bin
), so dass keine Root-Berechtigungen erforderlich sind. Daher möchte ich das Symbolinstalliert innerhalb~/.local/
wenn möglich.
Was ich versucht habe
ICHeinen MIME-Typ registrieren( application/vnd.crystal-opener
) für die .crystalopen
Erweiterung, indem Sie ein erstellen, application-vnd.crystal-opener.xml
das wie folgt aussieht:
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type="application/vnd.crystal-opener">
<comment>Crystal Opener</comment>
<glob pattern="*.crystalopen"/>
</mime-type>
</mime-info>
und installieren Sie es mit:
$ xdg-mime install --mode user application-vnd.crystal-opener.xml
was intern:
- kopiert es nach
~/.local/share/mime/packages
und erstellt bei Bedarf Zwischenverzeichnisse. update-mime-database ~/.local/share/mime/
wird zum Aktualisieren ausgeführt~/.local/share/mime/mime.cache
.
ICHÜberprüfen Sie, ob der MIME-Typ registriert istindem Sie eine nicht leere 1- Datei mit der Dateierweiterung erstellen und ihren MIME-Typ abfragen:
$ echo OPEN > OPEN.crystalopen
$ xdg-mime query filetype OPEN.crystalopen
application/vnd.crystal-opener
oder gleichwertig (unter GNOME):
$ gio info OPEN.crystalopen | grep standard::content-type
standard::content-type: application/vnd.crystal-opener
ICHErstellen Sie ein Symbolbildmit dem richtigen Dateinamen für den MIME-Typ application-vnd.crystal-opener.svg
:
<svg height="128" width="128">
<ellipse cx="43" cy="32" rx="32" ry="32" style="fill:red" />
<ellipse cx="84" cy="32" rx="32" ry="32" style="fill:green" />
</svg>
DerSpezifikation des Symbolthemassagt, dass ich ein solches Bild im „hicolor“-Design installieren können sollte, von dem alle anderen Designs erben. Aber das scheint nicht zu funktionieren. Insbesondere, wenn ich Folgendes mache:
$ sudo cp application-vnd.crystal-opener.svg /usr/share/icons/hicolor/scalable/mimetypes
$ sudo update-icon-caches /usr/share/icons/*
dann ändert sich das Symbol für die OPEN.crystalopen
Datei in der Dateien-App NICHT zum neuen Bild.
Vielleicht implementiert die App „Dateien“ die Themenvererbung nicht richtig? 2
Stattdessen identifiziere ich, welches spezifische Design das Standarddesign des Systems ist, und installiere das Symbol dort, was sich nicht sehr zuverlässig oder portabel anfühlt:
- ICHKandidaten für das Standarddesign des Systems identifizierenindem Sie nach dem Symbol eines gängigen MIME-Typs suchen, wie
text/html
:
$ find /usr/share/icons -name 'text-html.*'
/usr/share/icons/Yaru/... (10 lines)
/usr/share/icons/HighContrast/... (1 line)
/usr/share/icons/Humanity/... (7 lines)
Letztendlich
Humanity
stellte sich heraus, dass dies das Standarddesign für dieses System (Ubuntu 23) ist.Zuerst versuche ich, das Symbol im maschinenweiten Designverzeichnis zu installieren:
$ sudo cp application-vnd.crystal-opener.svg /usr/share/icons/Humanity/mimes/256
$ sudo update-icon-caches /usr/share/icons/*
- Das funktioniert und das Symbol für die
OPEN.crystalopen
Datei in der Datei-App wird erfolgreich auf das neue Bild aktualisiert. - Ich möchte jedochim Theme-Verzeichnis des Benutzers installierenanstatt in das maschinenweite Themenverzeichnis, also mache ich stattdessen Folgendes:
$ mkdir -p ~/.local/share/icons/Humanity/mimes/256
$ cp application-vnd.crystal-opener.svg ~/.local/share/icons/Humanity/mimes/256
$ sudo update-icon-caches /usr/share/icons/* # not sufficient to update: ~/.local/share/icons/*
OPEN.crystalopen
Das funktioniert auch und das Symbol für die Datei in der App „Dateien“ wird erfolgreich auf das neue Bild aktualisiert . (Obwohl leidersudo
eine Aktualisierung des maschinenweiten Symbolcaches erforderlich ist, damit das Symbol sofort vor der nächsten Abmeldung und Anmeldung angezeigt wird.)
Die große Frage
Wie kann ich ein Symbol in einem Benutzerdesignverzeichnis installieren, sodass das Symbol für zugehörige Dateien in der Datei-App zuverlässig und portierbar auf das neue Bild aktualisiert wird?das nicht nur in GNOME, sondern auch in KDE und anderen Desktopumgebungen funktioniert?
Ist es insbesondere möglich, ein Icon zum ~/.local/share/icons/hicolor
Theme zu installieren, das imSpezifikation des Symbolthemasals immer verfügbar?
1 Eine leere Datei wird häufig als MIME-Typ erkannt und application/x-zerosize
nicht als ein neuer benutzerdefinierter MIME-Typ, der registriert ist.
2 „Nautilus befolgt die Vererbungsregeln [des Themas] nicht“ gemäßhttps://askubuntu.com/a/752316/1724736
Antwort1
Da die Vererbung von Symbolen zwischen Themen nicht richtig zu funktionieren schien, habe ich einfach ein Skript geschrieben, um das Symbol meiner Apps zu installierenalleThemen auf dem System. Chaotisch, aber effektiv.
Bitte beachten Siedie 124 Zeilen des benutzerdefinierten InstallationscodesFrüher habe ich das erreicht.