web-dev-qa-db-fra.com

Comment créer des types MIME pour de nouveaux documents (ligne de commande)?

Comment attribuer une icône personnalisée au document personnalisé de mon application? De plus, comment faire en sorte que le gestionnaire de fichiers ouvre ces documents lorsqu'un utilisateur double-clique dessus?

Je dois le faire sur la ligne de commande car la solution sera utilisée dans un script d'installation.

5
user293406

La solution correcte peut être trouvée -> here <-, mais une version foo est fournie ci-dessous pour répondre directement à la question.

Faites très attention à l'utilisation de application-x-foo, x-foo et foo à mesure qu'ils changent.

Remarque: Lors de la mise à jour du tutoriel Ubuntu, il est probablement préférable, dans un exemple, de distinguer l'application foo, foo l'extension. et foo type MIME pour éviter toute confusion à l'avenir. c'est-à-dire que lmms utilise *.mmpz et x-lmms-project, ce qui a beaucoup aidé à comprendre cela.

  • Obtenir une icône SVG évolutive (exemple fourni)
  • wget http://soqr.fr/testsvg/zebra.svg -O ~/Desktop/application-x-foo.svg
    
  • Créez un fichier mime-ingest au format XML:
  • <?xml version="1.0" encoding="UTF-8"?>
    <mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
    <mime-type type="application/x-foo">  
    <comment>Foo File</comment>
    <glob pattern="*.foo"/>
    </mime-type>
    </mime-info>
    
  • Enregistrez ceci dans ~/Desktop/x-foo.xml
    • Si ce n'est déjà fait, créez un fichier de bureau:
    • [Desktop Entry]
      Version=1.0.0
      Encoding=UTF-8
      Name=FooGazi
      GenericName=Foo Application
      Comment=This is my Foo Application
      Exec=/usr/bin/foo
      # Please change, system-shutdown.svg used only as example
      Icon=/usr/share/icons/Humanity/actions/48/system-shutdown.svg
      StartupNotify=true
      Type=Application
      MimeType=application/x-foo;
      
    • Sauvegarder ceci dans ~/Desktop/foo.desktop
    • Déployer la description du mime
    • Sudo xdg-mime install --mode system ~/Desktop/x-foo.xml
      
    • Déployer le lanceur d'application
    • Sudo cp ~/Desktop/foo.desktop /usr/share/applications
      
    • Déployer l'icône SVG
    • Sudo cp ~/Desktop/application-x-foo.svg /usr/share/icons/gnome/scalable/mimetypes/
      
    • Enregistrez le programme de lancement d'applications avec le type MIME enregistré
    • Sudo xdg-mime default foo.desktop application/x-foo
      
    • Mettre à jour le cache mime
    • Sudo update-mime-database /usr/share/mime
      
    • Mettre à jour le cache d'icônes
    • Sudo gtk-update-icon-cache /usr/share/icons/gnome/ -f
      
    • Par habitude, j’ajoute également la ligne appropriée à /etc/mime.types, mais veuillez confirmer si cela est toujours nécessaire et éditer ce message pour en tenir compte.
    • Déconnectez-vous puis reconnectez-vous. L'icône et l'association doivent fonctionner.
  • 3
    user1466873

    Ne modifiez jamais les fichiers existants dans/etc à partir du script d’installation! C'est une très mauvaise idée. De plus, vous n'avez pas besoin de modifier /etc/mime.types

    votre fichier xml est toujours faux, et au mauvais endroit, il devrait être /usr/share/mime/text/x-foo.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <mime-type xmlns="http://www.freedesktop.org/standards/shared-mime-info" type="text/x-foo">
        <comment>Example file type </comment>
        <glob pattern="*.foo"/>
    </mime-type>
    

    Les icônes tierces sont normalement installées sur:/usr/share/icons/hicolor/scalable/mimetypes

    1
    user60846

    Je ne pouvais pas faire fonctionner les choses avec les autres réponses, mais j'étais capable de faire fonctionner les choses de la manière suivante.

    Ceci a été testé et fonctionne sur ces disques live:

    Ubuntu 14.04
    Lubuntu 14.04
    Ubuntu-Gnome 14.04
    

    Make Foo Wrapper App

    Pour cet exemple, je crée un wrapper pour gedit appelé foo aux fins d’un exemple complet.

    (1) Comme Sudo, créez un fichier avec ce contenu:

    gedit% f

    (2) Enregistrez-le en tant que:

    / usr/bin/foo

    (3) le rendre exécutable:

    Sudo chmod + x/usr/bin/foo

    Obtenir l'application Foo à apparaître dans le menu et son icône

    (1) Créez l'image de l'application. Gimp ou Inkscape sont deux excellents programmes pour cela. Après avoir créé l'image, exportez-la au format png ou svg.

    (2) Nommez votre image. Le nom de l'image doit être identique à celui utilisé pour lancer votre application sur la ligne de commande. L'application dans cet exemple s'appelle: foo. Donc, le nom correct serait foo.png ou foo.svg.

    (3) Copier l'image dans:

    /usr/share/icons/foo.svg
    

    (4) Créer une entrée de bureau. Ouvrez Gedit, Leafpad ou votre IDE. Créez un nouveau document avec ces données:

    [Desktop Entry]
    Exec=foo %f
    Icon=foo
    Terminal=false
    Type=Application
    Categories=Office;
    StartupNotify=true
    MimeType=text/foo
    Name=Foo
    GenericName=Foo
    Comment=Compose, Edit, and View Foo Documents
    

    Prenez note des clés Exec, Icon et MimeType:

    Exec:% f est ajouté après le nom de l'exécutable. Cela doit être là. Ainsi, lorsqu'un utilisateur double-clique sur un document foo, le système exécute l'application foo et envoie ce chemin de document foo à l'application via l'argument% f.

    Icône: Seul le nom est nécessaire. Je n'ai pas obtenu de bons résultats lors de l'utilisation de chemins absolus.

    MimeType: text/foo. text est appelé le "type de contenu". foo est bien sûr le nom de l'application. Cette convention de mappage doit être respectée dans les autres étapes. Par exemple, vous ne voulez pas utiliser application/foo dans une autre étape. En faisant cela, vous ne gardez pas le type de contenu cohérent pour foo et les choses échoueront.

    (5) Enregistrez ce fichier sous:

    foo.desktop
    

    Le nom du fichier est le nom de votre nom de lancement d’application et doit avoir le bureau de l’extension. Maintenant, il doit être copié dans:

    /usr/share/applications
    

    À ce stade, vous verrez votre application sous la catégorie Bureau dans le menu et votre icône sera également visible.

    Donner à vos documents d'application leur propre icône

    (1) Créez un fichier mime xml avec ce contenu:

    <?xml version="1.0" encoding="UTF-8"?>
    <mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info" type="text/foo">
       <mime-type type="text/foo">
          <magic>
             <match type="string" offset="2" value="0foomagic"/>
          </magic>
       </mime-type>
    </mime-info>
    

    Prenez note du mappage du type de contenu: les deux sont text/foo.

    Vous avez deux choix lorsque vous souhaitez qu'un document personnalisé obtienne son icône. (1), le système recherchera ses extensions et lui donnera une icône basée sur celle-ci. (2) le système cherchera une chaîne magique à un décalage particulier dans le fichier. Je choisis la magie, car je ne préfère pas afficher les extensions de mes noms de fichiers dans le gestionnaire de fichiers.

    Afin d’utiliser la magie, j’enregistre tous mes documents au format json. C'est un protocole de stockage universel, donc cela fonctionne bien pour moi. Lorsque je sauvegarde le fichier, je trie les clés par ordre alphabétique, ce qui fait que la clé magique apparaît comme la première clé du fichier. Cela est dû au fait que je mets un zéro en tant que premier caractère de "0foomagic" et que je m'assure qu'aucune autre clé ne sera créée dans mes documents, ce qui pourrait gâcher cela.

    En référence à cette ligne dans le XML ci-dessus,

    <match type="string" offset="2" value="0foomagic"/>
    

    un fichier json a deux caractères avant de frapper ma clé magique appelée 0foomagic. Je règle donc le décalage à 2.

    Si vous préférez utiliser une extension à la place, supprimez simplement l'entrée magique et remplacez-la par:

    <glob pattern="*.foo"/>
    

    où .foo est l'extension de votre document d'application.

    (2) Mettez à jour la base de données Mime avec cette commande:

    Sudo update-mime-database /usr/share/mime
    

    (3) Les icônes qui apparaîtront dans les documents personnalisés doivent être nommées de manière spéciale. Ils doivent être mappés avec le type de contenu. Créez une icône de document et nommez-la avec la convention de type de contenu mappée précédemment (le tiret attendu est utilisé à la place de la barre oblique):

    text-foo.svg
    

    text est le type de contenu et foo est le nom de votre application, comme auparavant.

    Vous devrez copier cette icône sur le thème que vous utiliserez. Tout thème sur lequel il n'est pas copié n'affichera pas votre document foo avec text-foo.svg.

    Les thèmes sont configurés de deux manières différentes. Vous devrez donc travailler davantage avec certains thèmes, par exemple:

    Pour Thème Gnome, il vous suffira de copier text-foo.svg à un seul emplacement:/usr/share/icons/gnome/scalable/mimetypes /

    Basculez vers le thème gnome et cette étape est terminée.

    Mais, par exemple, si vous utilisez le thème hicolor, vous avez encore du travail à faire. Vous devez créer une taille d’icône pour chacun des répertoires demandés par le thème, par exemple:

    /usr/share/icons/hicolor/16x16/mimetypes/
    /usr/share/icons/hicolor/22x22/mimetypes/
    ...
    

    etc.

    Maintenant que vous avez copié les icônes, la base de données des icônes doit être mise à jour. J'ai remarqué deux commandes pour cela (gtk-update-icon-cache et gtk-update-icon-cache3.0), je viens d'appeler les deux et je n'ai pas remarqué de problème. Ils doivent être appelés dans tout répertoire de thèmes auquel vous avez ajouté des icônes.

    Si vous avez ajouté au thème gnome, alors:

    Sudo gtk-update-icon-cache /usr/share/icons/gnome/
    

    Si vous avez ajouté au thème hicolor, alors:

    Sudo gtk-update-icon-cache /usr/share/icons/hicolor
    

    Maintenant, juste une dernière chose à faire, et vous devriez voir les choses fonctionner sans même vous connecter et vous déconnecter. Mettre à jour la base de données du bureau:

    Sudo update-desktop-database

    Test Foo

    Puisqu'il surchargerait cette réponse de créer vous demander de créer un fichier json, utilisez simplement foo, le wrapper gedit, pour le duper en lui faisant un foo doc avec le 0foomagic à l'intérieur.

    (1) Tapez foo sur la ligne de commande et vous devriez voir le lancement de gedit.

    (2) Dans le fichier texte vide dans gedit, ajoutez deux caractères, puis la chaîne magique:

    xx0foomagic
    

    (3) Enregistrez et fermez gedit. Maintenant, regardez à l'intérieur du gestionnaire de fichiers et vous verrez que votre nouveau document a l'icône text-foo.svg. Double-cliquez dessus et foo l'ouvrira. Presto! C'est la magie freedesktoporg!

    Vous pouvez en apprendre beaucoup sur ce processus, mais cela vous permettra au moins de commencer avec vos propres icônes de document de lancement d'applications sur Ubuntu.

    Veuillez contribuer à cette réponse ou créer une nouvelle réponse si vous avez le meilleur moyen de le faire .

    0
    user293406