Warum werden meine application.desktop-Dateien nicht im Linux-Anwendungsmenü angezeigt?

8

Ich habe im Laufe der Jahre einige Open-Source-Programme geschrieben, aber nicht in letzter Zeit, und ich hatte dieses Problem noch nie zuvor. Die Menüpunkte für mein neues Projekt werden einfach nicht in Menüs auf gnome oder kde angezeigt.

Ich habe die .desktop-Dateien ursprünglich nur in / usr / share / applications installiert, sie aber später so geändert, dass sie Desktop-Datei-Utils verwenden - alles ohne Erfolg. Ich habe meinem Postinst-Skript eine Update-Desktop-Datenbank hinzugefügt ... nichts

Ich habe die Einträge überprüft und im Dateimanager sind sie korrekt. Ich habe versucht, ihnen Ausführungsberechtigungen zu erteilen. Ich kann nichts Falsches finden, aber sie werden einfach nicht angezeigt. Gibt es etwas Neues zu tun, damit die Menüpunkte Ihrer App heutzutage angezeigt werden?

Die .desktop-Dateien sind:

silentcoder@ravenriley ~/SOURCE/ezdm $ cat ezdm.desktop 
[Desktop Entry]
Type=Application
Name=EZDM
GenericName=Easy Dungeon Master
Comment=A tookit for AD&D Dungeon Master
TryExec=/usr/games/ezdm
Exec=/usr/games/ezdm
Categories=Game;RolePlaying;
Icon=/usr/share/icons/hicolor/128x128/ezdm.png
Terminal=false

cat ezdmconsole.desktop

[Desktop Entry]
Type=Application
Name=EZDM-Console
GenericName=Easy Dungeon Master (Console version)
Comment=A tookit for AD&D Dungeon Master
TryExec=/usr/games/ezdm --console
Exec=/usr/games/ezdm --console
Categories=Game;RolePlaying;
Icon=/usr/share/icons/hicolor/128x128/ezdm-console.png
Terminal=1
X-Desktop-File-Install-Version=0.20

Und wenn einer der anderen Codes nützlich sein könnte, kann er auf github durchsucht werden: https://github.com/ajventer/ezdm

UPDATE: Das Rätsel vertieft sich, wenn ich die Dateien nach / usr / share / applications / kde4 kopiere (was ich natürlich nicht in meinem Paket tun möchte - schließlich sollte es auch in gnome funktionieren), dann tut es plötzlich ezdm.desktop erscheinen im Menü, aber ezdm-console.desktop weigert sich immer noch.

UPDATE: da es relevant sein kann: Aus Makefile:

install:
                $(PYTHON) setup.py install --prefix=/${PREFIX} --root $(DESTDIR) --install-scripts=/${PREFIX}/games/ --no-compile --force --record .install.record --install-layout=deb
                mkdir -p ${DESTDIR}/${PREFIX}/share/applications
                mkdir -p ${DESTDIR}/${PREFIX}/share/icons/hicolor/128x128/
                desktop-file-install --dir=${DESTDIR}/${PREFIX}/share/applications/ ezdm.desktop 
                desktop-file-install --dir=${DESTDIR}/${PREFIX}/share/applications/ ezdm-console.desktop 
                install -g root -o root -m 0666 ezdm.png ${DESTDIR}/${PREFIX}/share/icons/hicolor/128x128/ezdm.png
                install -g root -o root -m 0666 ezdm-console.png ${DESTDIR}/${PREFIX}/share/icons/hicolor/128x128/ezdm-console.png 
                update-desktop-database ${DESTDIR}/${PREFIX}/share/applications

Und debian / postinst:

cat debian/postinst 
#!/bin/bash -x
ln -sf /usr/games/ezdm* /usr/bin
for I in /usr/lib/python2.7/dist-packages/ezdm_libs/*.py; do
        python -m compileall $I
done
update-desktop-database
#DEBHELPER#
Silentcoder
quelle
Ich bin mir nicht sicher, wo das Problem liegt - es könnte sehr gut der Installationscode sein, da die Möglichkeiten auf zahlreiche Stellen verteilt sind -, habe ich eine Reihe von Beispielen gegeben und mit dem gesamten anderen Code verknüpft. Aber auf jeden Fall werde ich auch das Makefile und die setup.py hinzufügen.
Haben Sie einen Blick auf stackoverflow.com/questions/13632385/…
Mikebabcock
Ja, ich habe es beim Googeln gefunden - ich erwähne sogar in der Frage, die ich mit + x Berechtigungen getestet habe (die Lösung aus dieser Frage)
Also wird es in KDE angezeigt, aber nicht in GNOME?
Ich habe das nicht überprüft - ich habe nur verschiedene Dinge versucht. Die Installation in einem KDE4-spezifischen Verzeichnis wäre jedoch in beiden Fällen verrückt. Da dies auf jedem Desktop funktionieren sollte, der die XDG-Spezifikation versteht, können nicht alle ein anderes Menüverzeichnis verlangen.

Antworten:

2

Es gab Formatierungsfehler in den Dateien. Aufgrund von Kommentatoren kann ich nur davon ausgehen, dass einige Versionen von Gnome verzeihender sind. So oder so habe ich einen raffinierten Weg gefunden, um sie zum Laufen zu bringen: Öffnen Sie das Verzeichnis in Delfin und bearbeiten Sie sie, bis sie von Delfin aus gestartet werden können - nur wenn dies funktioniert, fügen Sie das Kategorienfeld hinzu und sie werden dann in Menüs angezeigt. In KDE müssen Sie möglicherweise Folgendes ausführen: kbuildsycoca4 --noincremental zuerst, wenn Sie nicht erneut anmelden.

Die endgültigen Versionen der Dateien sind:

cat ezdm.desktop 
[Desktop Entry]
Categories=Game;RolePlaying;
Comment[en_US]=A tookit for ADnD Dungeon Master
Comment=A tookit for ADnD Dungeon Master
Exec=/usr/games/ezdm
GenericName[en_US]=Easy Dungeon Master
GenericName=Easy Dungeon Master
Icon=/usr/share/icons/hicolor/128x128/ezdm.png
MimeType=
Name[en_US]=EZDM
Name=EZDM
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
TryExec=/usr/games/ezdm
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=
X-KDE-SubstituteUID=false
X-KDE-Username=

silentcoder@ravenriley ~/SOURCE/ezdm0/ezdm $ cat ezdm-console.desktop 
[Desktop Entry]
Categories=Game;RolePlaying;
Comment[en_US]=EZDM Console Version
Comment=EZDM Console Version
Exec=/usr/games/ezdm --console
GenericName[en_US]=EZDM Console Version
GenericName=EZDM Console Version
Icon=/usr/share/icons/hicolor/128x128/ezdm-console.png
MimeType=
Name[en_US]=EZDM-Console
Name=EZDM-Console
Path=
StartupNotify=true
Terminal=true
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=none
X-KDE-SubstituteUID=false
X-KDE-Username=

Für den Fall, dass das jemand anderem hilft. Ich habe gerade eine neue PPA-Build-Anfrage veröffentlicht, sodass aktualisierte Ubuntu-Pakete bald verfügbar sein werden.

Silentcoder
quelle
2

Versuche dies:

xdg-desktop-menu forceupdate [--mode mode]

aus

man xdg-desktop-menu 
toto
quelle
1
Das Verweisen auf eine Manpage ist ein guter Anfang, aber Sie sollten in Betracht ziehen, die wichtigsten Bits der Kürze und Vollständigkeit halber inline zu zitieren.
HalosGhost
1

Es gibt sehr heimtückische Desktop-Dateischlüssel - TryExec. Laut Dokumentation :

TryExec

Pfad zu einer ausführbaren Datei auf der Festplatte, mit der ermittelt wird, ob das Programm tatsächlich installiert ist. Wenn der Pfad kein absoluter Pfad ist, wird die Datei in der Umgebungsvariablen $ PATH nachgeschlagen. Wenn die Datei nicht vorhanden oder nicht ausführbar ist, wird der Eintrag möglicherweise ignoriert (z. B. nicht in Menüs verwendet).

Daher kann es zu einem fehlenden Menüeintrag kommen, wenn dieser nicht richtig gefüllt ist. Und mit "richtig" meine ich, dass es immer auf die tatsächlich ausführbare Datei verweisen muss .

Wenn Sie versuchen, Ihr Programm in einer geänderten Umgebung mit zu starten env, funktioniert es überraschenderweise nicht mehr. Hier ist ein Beispiel für eine ungültige Desktop-Datei aus dem Paket meiner Distribution:

TryExec=env FONTCONFIG_FILE=/usr/share/fonts/fonts.conf telegram -noupdate
Exec=env FONTCONFIG_FILE=/usr/share/fonts/fonts.conf telegram -noupdate -- %u

Es funktioniert nicht, weil DE nach einer env FONTCONFIG_FILE=/usr/share/fonts/fonts.conf telegram -noupdateausführbaren Datei sucht und die gesamte Zeichenfolge (einschließlich Leerzeichen) als Dateipfad behandelt, was natürlich fehlt.

Die Lösung ist auch einfach: Geben Sie einfach den Pfad zur tatsächlichen ausführbaren Datei an (auch relativ):

TryExec=telegram
tosh
quelle
0

Höchstwahrscheinlich, weil Ihre falsche TryExecZeile anzeigt, dass sie nicht mehr gültig ist.

TryExec=/usr/games/games/ezdm

Ich denke, diese Datei existiert nicht und ist insbesondere nicht ausführbar?

Hat aufgehört - Anony-Mousse
quelle
Vielen Dank für diesen Haken, ich habe ihn im Code behoben, aber die Menüpunkte werden immer noch nicht angezeigt (ich habe mich sogar abgemeldet und wieder angemeldet, um sicherzugehen).
Haben Sie zufällig ezdm.desktopirgendwo einen anderen , zum Beispiel in $HOME/.local/share/applications/ezdm.desktop?
Hat aufgehört - Anony-Mousse
Keine, die ich finden kann, die einzigen Einträge in der .local-Version sind die, die Wine erstellt. Und ich habe auf einem anderen Computer (mit Gnome) getestet, der keine Code-Prüfung enthält (ich verwende ihn, um die Pakete neu zu installieren).
0

Zumindest unter Ubuntu 19.10 ist eine mögliche Ursache, dass die von Exec, auf die verwiesen wird , auf dem nicht vorhanden ist $PATH. Dies gilt unabhängig von Ihrer TryExecLinie. Sie benötigen beide Zeilen, um auf ausführbare Dateien zu verweisen, die in vorhanden sind $PATH, oder Ihre Anwendung wird nicht im Anwendungsmenü angezeigt.

Also: Stellen Sie sicher, dass Sie die ausführbare Datei am Anfang Ihrer Exec=Zeile nicht getippt haben und dass sie wirklich vorhanden ist.

Mark Amery
quelle
0

Abgesehen von den Syntaxfehlern in .desktopDateien muss nicht jede .desktopDatei die /usr/share/applicationsganze Zeit im Launcher-Menü angezeigt werden.

Es gibt eine Reihe komplizierter Regeln, um .desktop filesfestzulegen , welche im Startmenü aufgeführt werden sollen, die in xdg-Dokumenten veröffentlicht werden:

https://www.freedesktop.org/wiki/Specifications/menu-spec/

Zim
quelle
-1

Klicken Sie hier, um zu erfahren, was eine application.desktopDatei ist.

Lösung:

Die Datei sollte bereits auf Ihrem Computer vorhanden sein, wenn das Programm installiert ist, sodass keine weitere Datei geschrieben werden muss. Das Problem ist, dass es sich nicht in dem Verzeichnis befindet, das Sie benötigen, um auf Ihrer Gnome-Shell angezeigt zu werden. Führen Sie Folgendes aus, wenn nicht alle fast alle application.desktop-Dateien in der Gnome-Shell angezeigt werden sollen. Wenn Sie nicht installiert haben,findinstallieren Sie es gemäß den Best Practices Ihrer Distribution. In meinem Fall :sudo apt-get install find.


  # change the value of LOOKHERE for any directory
  LOOKHERE=/etc  ;
  for p in `sudo find * "${LOOKHERE}" | grep -E *\\.desktop$`; do
      sudo cp  ${p}  $HOME/.local/share/applications/ ;
  done

find * "${LOOKHERE}" | grep -E *\\.desktop$

Der letzte sollte etwas löschte wie wenn LOOKHEREist /share:

/usr/share/gnome/autostart/nautilus-autostart.desktop
/usr/share/gnome/autostart/gnome-user-share-obexpush.desktop
/usr/share/gnome/wm-properties/metacity-wm.desktop
                           .
                           .
                           .
/usr/share/tracker/miners/tracker-miner-applications.desktop
/usr/share/tracker/miners/tracker-miner-userguides.desktop


Warnung:

LOOKHEREWenn die Variable auf " /Allein" gesetzt ist, wird sie auch in alle Wechselmedien angezeigt, und diese Dateien können auf nicht vorhandene Programme auf Ihrem lokalen Computer verweisen. Stellen Sie sicher , dass alle exec Aussagen sind Querprüfung mit , which application-namedass Ihre gültige exec - Anweisung wie zurückgeben sollte which bashRenditen /bin/bash. Wenn whichdies nicht funktioniert, überprüfen Sie whereisden Start. Für weitere Änderungen verwenden Sie dconfoder gsettings.

Schopenhauer
quelle