web-dev-qa-db-fra.com

Fichiers .desktop: comment spécifier le chemin de l'icône

J'ai jeté un coup d'œil aux fichiers .desktop de mon système Ubuntu 12.04 et beaucoup d'entre eux n'ont pas de chemin d'accès complet pour leur fichier d'icônes. C'est plutôt quelque chose comme:

Icon=anjuta

ou

Icon=vlc

ou

Icon=application-x-clementine

Existe-t-il un chemin commun où les icônes peuvent être stockées pour que cela puisse fonctionner? Si non, comment ça marche? Si j'essaie de faire la même chose avec mes propres icônes, je dois spécifier le chemin complet.

par exemple.

Icon=/usr/local/share/my-icon.png

fonctionne bien, mais

Icon=my-icon.png

va échouer.

Toute aide est la bienvenue!

18
user3430409

Oui, la recherche est assez compliquée. Voici le spécifications de l'icône freedesktop sur les présentations de répertoire:

Les icônes et les thèmes sont recherchés dans un ensemble de répertoires. Par défaut, les applications doivent rechercher dans $ HOME/.icons (pour la compatibilité ascendante), dans $ XDG_DATA_DIRS/icons et dans/usr/share/pixmaps (dans cet ordre) . Les applications peuvent en outre ajouter leurs propres répertoires d'icônes à cette liste, et les utilisateurs peuvent étendre ou modifier la liste (de manière spécifique à l'application/au bureau). Dans chacun de ces répertoires, les thèmes sont stockés sous forme de sous-répertoires. Un thème peut être réparti sur plusieurs répertoires de base en ayant des sous-répertoires du même nom. De cette façon, les utilisateurs peuvent étendre et remplacer les thèmes du système.

Pour que les applications tierces puissent installer leurs icônes, il doit toujours exister un thème appelé "hicolor" 1 . Les données du thème hicolor peuvent être téléchargées à l’adresse suivante: http://www.freedesktop.org/software/icon-theme/ . Les implémentations doivent rechercher dans le thème "hicolor" si une icône n'a pas été trouvée dans le thème actuel.

Chaque thème est stocké en tant que sous-répertoires des répertoires de base. Le nom interne du thème est le nom du sous-répertoire, bien que le nom visible par l'utilisateur tel que spécifié par le thème puisse être différent. Par conséquent, les noms de thème sont sensibles à la casse et sont limités à ASCII caractères. Les noms de thème peuvent également ne pas contenir de virgule ni d'espace.

Dans au moins un des répertoires de thèmes, il doit exister un fichier nommé index.theme décrivant le thème. Le premier index.theme trouvé lors de la recherche des répertoires de base dans l’ordre est utilisé. Ce fichier décrit les attributs généraux du thème.

Le répertoire du thème contient également un ensemble de sous-répertoires contenant des fichiers d’image. Chaque répertoire contient des icônes conçues pour une taille d'icône nominale donnée, comme décrit dans le fichier index.theme. Les sous-répertoires peuvent contenir plusieurs niveaux, par exemple. le sous-répertoire "48x48/apps" dans le thème "hicolor" se retrouverait à $ basedir/hicolor/48x48/apps.

Les fichiers image doivent appartenir à l'un des types suivants: PNG, XPM ou SVG, et l'extension doit être ".png", ".xpm" ou ".svg" (minuscule). La prise en charge des fichiers SVG est facultative. Les implémentations qui ne prennent pas en charge les SVG ne doivent ignorer aucun fichier ".svg". En plus de cela, il peut y avoir un fichier supplémentaire avec des données d'icône supplémentaires pour chaque fichier. Il doit avoir le même nom de base que le fichier image, avec l'extension ".icon". par exemple. si le fichier d'icône s'appelle "mime_source_c.png", le fichier correspondant serait nommé "mime_source_c.icon".

Les spécifications complètes sont bien plus épineuses que cela, mais le problème est le suivant: il existe des répertoires définis dans lesquels vous pouvez simplement insérer des icônes et que le bureau trouvera. Lequel de ces cas vous convient le mieux dépend de votre problème et de votre patience :)

15
Oli

J'ai de l'expérience avec juste des emblèmes, pas des icônes, mais ça devrait marcher:

mkdir -p $HOME/.icons/hicolor/48x48/

mettre l'icône dans ce répertoire, supposons qu'il s'agisse de myicon.png

cp  myicons.png $HOME/.icons/hicolor/48x48/

Ajoutez le fichier de description:

gedit $HOME/.icons/hicolor/48x48/myicon.icon

avec contenu:

[Icon Data]

DisplayName=myicon

et maintenant votre ligne Icon=myicon devrait fonctionner. Cela fonctionne avec les emblèmes si vous les mettez dans un sous-répertoire "emblèmes":

personalized emblem

Grâce à @Oli, je sais maintenant pourquoi cela fonctionne :-)

5
Rmano

Si vous mettez des icônes dans /usr/share/icons/ (pour tout le système) ou dans votre maison ~/.icons, vous ne pouvez utiliser que le nom du fichier d'icônes sans l'extension dans le fichier .desktop. Par exemple.

Icon=vlc

Sinon, vous devez utiliser le chemin absolu pour l'icône dans le fichier .desktop. Par exemple.

Icon=/usr/local/share/my-icon.png
4
Radu Rădeanu