DesktopFiles

Differences between revisions 56 and 57
Revision 56 as of 2007-05-10 11:56:56
Size: 7969
Editor: p1033-ipbf37marunouchi
Comment: Name change to match rewrite
Revision 57 as of 2007-05-10 12:04:54
Size: 8444
Editor: p1033-ipbf37marunouchi
Comment: Added missed shell scripts from UniverseDesktopFileAbsolutePath
Deletions are marked like this. Additions are marked like this.
Line 117: Line 117:
== Shell snippets for common issues ==
 * Using an absolute path for an icon:
{{{
grep -E "^Icon=\/usr\/" /usr/share/applications/*.desktop | cut -d: -f1 | xargs dlocate
}}}
 * Using an absolute path for a binary:
{{{
grep -E "^Exec=\/usr\/" /usr/share/applications/*.desktop | cut -d: -f1 | xargs dlocate
}}}
 * .desktop file fails validation
{{{
for i in /usr/share/applications; do desktop-file-validate $i >> /dev/null || echo $i; done | xargs dlocate
}}}

In order to ensure that the menus are properly populated, and that software is easily installable with Add/Remove Packages, each package should contain a .desktop file. As a matter of policy, .desktop files should only be present for GUI interfaces: software intended to be used from the command-line should not provide such an interface.

.desktop files may be included in packages in two ways, either as part of the upstream distribution, or as part of the distribution packaging. Including the .desktop file in the upstream distribution is vastly preferred, as this allows for apporpriate translation of the .desktop file. If it cannot be included upstream, the .desktop file should be stored in the debian/ directory.

.desktop File Inclusion Criteria

  1. The package must provide a binary with a GUI interface
  2. The binary must be typically executed with constant arguments
  3. Users would expect to launch the program from the menu

Packaging Notes

  • In debian/control, if cdbs is not used, Build-Depend on debhelper (>= 4.2.21).

  • In debian/rules If cdbs's gnome.mk is not used, call dh_desktop in binary*
  • ensure that .desktop files are installed or moved to /usr/share/applications/<binary>.desktop

  • ensure that icon files are installed or moved to /usr/share/pixmaps/

Icons

  • Provide an 32x32 pixel XPM icon for use by the Debian menus
  • Optionally provide a 48x48 pixel PNG icon for use by freedesktop.org menus (the Debian icon will be used if this is unavailable)
  • If neither format is available, many formats can be converted as follows:
  • Get a base icon (clip of package graphic, .ico file, from scratch, etc.)
  • Crop / resize to 32x32 pixels
  • run convert editedicon.ico <package>.xpm (requires imagemagick)

  • if convert generated multiple images, select one (and name correctly)

Desktop Files

  • Check the spec at http://standards.freedesktop.org/desktop-entry-spec/latest/

  • Avoid Absolute pathnames in .desktop files
  • Do not include a file type extension in Icon=
  • Ensure that Categories= includes at least one Registered Category
  • Add any other applicable Additional Categories
  • Check with desktop-file-validate to ensure everything is correct

Workflow

  • Find a package without a .desktop file
  • Verify that the package is not listed below as not needing a .desktop file
  • Verify there is no .desktop file in the latest development version
  • If no .desktop file is needed, add the package to the list below
  • If a .desktop is needed:
  • Check to see if there is a .desktop in the upstream or Debian bug tracker
  • Create the necessary .desktop / icon if necessary
  • Open a wishlist bug in the package reporting the missing .desktop file
  • Attach the .desktop file and icon to the bug (optionally a patch for both)
  • Link the bug to the Debian BTS (create a BTS bug if required)
  • Tag the bug with "desktop-file"

Simple Creation techniques

  • In GNOME: use Nautilus' "Create Launcher" to create a template file
  • In KDE: <do something nifty>

  • Scripted: Some of this can be automated. Please check the results of the automation prior to submission. Most importantly, please ensure that any useful additional categories are included.

#
# generate-desktop.bash
#
# This script will search for debian menu entries containing icons,
# and either print the name of an oddly located .desktop file, or
# modify the menu-xdg generated file to match the freedesktop
# categories for inclusion the relevant package.
#
# Please be sure to review anything reported in the output.  If there
# is nothing odd, there should be no output.
#
# Before running this, the menu and menu-xdg packages must be installed
# It is probably also a good idea to update the locate database
#
# Please note that this only works for installed packages

XDGHOME=/var/lib/menu-xdg/applications/menu-xdg/

for MENUDIR in /usr/lib/menu /usr/share/menu
do

for i in `ls $MENUDIR`
do test -e $i.desktop ||
 ! dpkg -S $i.desktop > /dev/null 2>&1 &&
   grep icon $MENUDIR/$i > /dev/null &&
   test -e $XDGHOME/*$i.desktop &&
 ! (locate $i.desktop | grep -v Debian) &&
   cat $XDGHOME/*$i.desktop |
   sed '/Icon=/\/usr\/share\/pixmaps\/[^\/]*\.png/s/\/usr\/share\/pixmaps\///' |
   sed '/Databases/s/X-Debian-Apps-Databases/Database:/' |
   sed '/Editors/s/X-Debian-Apps-Editors/TextEditor;/' |
   sed '/Education/s/X-Debian-Apps-Education/Education;/' |
   sed '/Emulators/s/X-Debian-Apps-Emulators/Emulator;/' |
   sed '/Graphics/s/X-Debian-Apps-Graphics/Graphics;/' |
   sed '/Math/s/X-Debian-Apps-Math/Math;/' |
   sed '/Net/s/X-Debian-Apps-Net/Network;/' |
   sed '/Programming/s/X-Debian-Apps-Programming/Development;/' |
   sed '/Science/s/X-Debian-Apps-Science/Science;/' |
   sed '/Shells/s/X-Debian-Apps-Shells/Shell;/' |
   sed '/Sound/s/X-Debian-Apps-Sound/AudioVideo;Audio;/' |
   sed '/System/s/X-Debian-Apps-System/System;/' |
   sed '/Text/s/X-Debian-Apps-Text/Utility;/' |
   sed '/Tools/s/X-Debian-Apps-Tools/Utility;/' |
   sed '/Viewers/s/X-Debian-Apps-Viewers/Viewer;/' |
   sed '/Adventure/s/X-Debian-Games-Adventure/Game;AdventureGame;/' |
   sed '/Arcade/s/X-Debian-Games-Arcade/Game;ArcadeGame;/' |
   sed '/Board/s/X-Debian-Games-Board/Game;BoardGame;/' |
   sed '/Card/s/X-Debian-Games-Card/Game;CardGame;/' |
   sed '/Puzzles/s/X-Debian-Games-Puzzles/Game;LogicGame;/' |
   sed '/Simulation/s/X-Debian-Games-Simulation/Game;Simulation;/' |   sed '/Sports/s/X-Debian-Games-Sports/Game;SportsGame;/' |
   sed '/Tetris/s/X-Debian-Games-Tetris/Game;BlocksGame;/' |
   cat > $i.desktop
   test -e $i.desktop &&
   grep Categories=X-Debian $i.desktop > /dev/null &&
   echo $i.desktop needs manual Category assignment
done

done

Shell snippets for common issues

  • Using an absolute path for an icon:

grep -E "^Icon=\/usr\/" /usr/share/applications/*.desktop | cut -d: -f1 | xargs dlocate
  • Using an absolute path for a binary:

grep -E "^Exec=\/usr\/" /usr/share/applications/*.desktop | cut -d: -f1 | xargs dlocate
  • .desktop file fails validation

for i in /usr/share/applications; do desktop-file-validate $i >> /dev/null || echo $i; done | xargs dlocate

(Binary) Packages that do not require a .desktop file

Please only add files below if they might appear to require .desktop files at first pass. Many libraries, etc. obviously do not require them (although there are exceptions)

Admin

aptitude apt-spy bacula-console bastille battery-stats chrony configure-debian dbishell deborphan desktop-profiles hotswap-text iptstate menu partimage recover sysvconfig whowatch

Base

tasksel

Devel

autoproject cmake curves goo gprolog pydb smarteiffel

Doc

apt-howto-common bible-kjv dhelp doc-linux-ja-html dpkg-www dwww flex-old-doc man2html med-doc newbiedoc pinfo selflinux verse

Editors

bvi cream ee elvis-common emacs21-nox fte-console fte-docs geresh hexedit jed joe jove le levee ne ng-common yudit zile

Games

asciijump bb freeciv-server nethack-common nethack-console

HamRadio

ax25-apps cwcp

Intepreters

bigloo bwbasic erlang hugs irb1.6 irb1.8 irb1.9 pike7.2 pike7.4-core pike7.6-core spidermonkey-bin swi-prolog

LibDevel

libjackasyn0

Mail

elmo etpan-ng fetchmailconf sendemail

Math

mathomatic mathomatic-primes octave2.1

Net

nap ncftp ncftp2 snownews tin

Science

blast2 boxshade felt loki ncbi-tools-bin therion

Shells

csh ksh

Sound

alsaplayer-text aumix moc mp3blaster radio rexima

Text

catdoc

Utils

ncmpc

Web

links lynx-cur

X11

aewm aewm++ evilwm fluxbox flwm fvwm fvwm1 fvwm95 fvwm-gnome icewm icewm-experimental icewm-lite lwm pwm qvwm ratpoison sapphire sawfish uwm vtwm w9wm waimea wm2 wmaker

Pacakges that do need a .desktop file

The old list was outdated. A script to generate an up-to-date list will be posted in the future. In general, anything that appears in the Debian menus, and isn't listed above is a good candidate for review.

MOTU/Packages/DesktopFiles (last edited 2008-08-06 16:27:12 by localhost)