Recent Work | Current Work | Future Plans | Patches | Screenshots | FAQ | Misc. Links
Xfce is a lightweight desktop environment for X11-based systems, designed for fast execution and low memory footprint. The latest incarnation, version 4, is based on GTK+, version 2.
In February of 2004, I took over maintainership of Xfce's xfdesktop module. Xfdesktop is responsible for drawing the desktop background, as well as displaying a right-click applications menu and a middle-click window menu. Since I became maintainer, I've made various improvements to the codebase. Over time I worked on the core libraries as well, and built a new configuration management system called Xfconf. In 2009 I stepped down to focus on a startup.
I intend this page to be an overview of the things I'm doing with regard to xfdesktop and Xfce. Planet Foo-Projects is a good place to look if you're interested in things the other Xfce (and Lunar) developers are working on. Occasionally I write about Xfce in my weblog.
If you're looking for the file listing that used to be here, it's been moved to /projects/xfce4/files/. I've also created a GAR-based Xfce4 installer, called GarXfce4.
This section tends to get rather out of date, so I've removed it for now.
New menu system: Jannis Pohlmann has written a faster, much more fd.o-compilant menu system called XfceMenu. Currently it's integrated into xfdesktop trunk, but it could use some work.
Settings dialog rework: the old settings dialog is kinda ugly and not very well-organised. I'll be completely redesigning the dialog, and hopefully adding a few new features in the process.
Otherwise, it's just small improvements and bugfixes. To get an idea of the things people are asking for, see the feature request list.
- Rewrite large portions of XfdesktopIconView to allow arbitrary placement of icons (no more grid!).
- Image thumbnail support for jpeg/png/etc. icons on the desktop.
- Better integration between the root menu and desktop context menu.
- Implement some of the feature requests.
If you'd like, you can suggest a new feature for xfdesktop by filing an 'enhancement' request on Bugzilla.
- xfce-appmenuitem.h - current XfceAppMenuItem API
- xfce4svn.sh - a flexible script that can be used to install/update Xfce from Subversion.
These were over 3 years old! For more current screenshots, see the Xfce 4.4 Tour.
- Does xfdesktop support launcher or file icons on the desktop? - Yes, 4.4.0 and above includes this feature. It requires dbus, dbus-glib, libexo, and thunar-vfs be installed before compiling xfdesktop.
- Does xfdesktop allow me to minimise applications to the desktop? - Xfce 4.4 has this feature as well, and has no extra dependencies.
- Can I use root-tail with xfdesktop? - Recent versions of root-tail
accept a parameter (
-id) so you can tell it the XID of the window to use as the root window. If I were to run root-tail, I might use this command line.
- Can I use xpenguins, xsnow, or xplanet with xfdesktop (basically, any app that draws on the root window)? - Probably not. All these apps draw directly to the root window, and xfdesktop creates a virtual fullscreen root window on top of the real root window, obscuring it. However, any application that can take as a parameter the ID of a root window to use can be made to work with xfdesktop. With the advent of the XComposite extension, apps that draw directly to the root window will be even more difficult to accomodate, so it would be nice if someone would create a standard for making this sort of thing possible.
- I've seen screenshots with this nifty autogenerated "system" menu in
it, but I upgraded to Xfce 4.2/4.4 and I don't have it. What's up
with that? - If you had edited your menu from 4.0.x, it's using your
old menu, which has been moved to
~/.config/xfce4/desktop/menu.xml. The new default menu, located at
$sysconfdir/xdg/xfce4/desktop/menu.xml, has the appropriate directive to add the autogenerated menu. I suggest you use xfce4-menueditor (included with xfdesktop) to include the system menu in your current menu.
- How is the autogenerated menu created, anyway? - The menu is created somewhat according to the rules definied in the Freedesktop menu standard. The xfdesktop menu is not completely true to the spec, for a few reasons I won't get into here. The menu is built from .desktop files that are found on your hard drive in some well-known locations. The .desktop files have category information in them, and the menu generator uses them to build the hierarchy. Applications are expected to install these .desktop files themselves.
Ok, so where exactly does it look for .desktop files? - A few places. The standard specifies one unified directory, which is $datadir/applications/. For most apps, this works out to /usr/share/applications/. Now, GNOME and KDE each used to have old menu schemes, and the standard tries to make sure that older apps that follow these schemes will show up as well. The old GNOME location was to create a directory structure in /usr/share/apps/ that corresponds to the menu structure. So you might have a .desktop file for your web browser in /usr/share/apps/Internet/. KDE had a somewhat similar scheme, but used /usr/share/applnk/. There are a few other places that I don't remember offhand and won't get into. Now, there's a configurable twist. A related Freedesktop standard defines a set of desktop base directories. The relevant one here is
XDG_DATA_DIRS. If you set that environment variable to a colon-separated list of directories, xfdesktop will search each one of them, appending "/applications/" first. (It'll do the same when looking in the GNOME/KDE legacy locations.) If
XDG_DATA_DIRSisn't set, it uses a predefined default. I don't remember offhand, but it's something like $HOME/.local/share:/usr/share:/usr/local/share. To make sure Xfce works properly, xfdesktop will always append Xfce's $datadir to the list (unless it's already in there). If you're not confused yet, you're doing much better than I am. To try to be a bit more concise, here's a list of places to look if you're trying to hunt down a pesky .desktop file:
- $prefix/share/applications/ (where $prefix points to where the app in question is installed)
- $KDEDIR/share/applnk This is not necessarily an exhaustive list, and your system may not have all of these locations. If all else fails, try find(1) or locate(1).
- But wait... I have apps that don't show up in the menu! Why
not? - Well, that depends:
- The application doesn't provide a .desktop file. You need to contact the app maintainer and complain.
- The application puts its .desktop file in a nonstandard place. You need to contact the app maintainer and complain.
- The application puts its .desktop file in a standard place,
but the app itself is installed to a nonstandard prefix (such
as /opt/foobar). In that case, you need to set the
XDG_DATA_DIRSenvironment variable before you start Xfce.
Ok, so that's all well and good, but how do I edit or remove items from the autogenerated/system menu? - Unfortunately, that part isn't very user-friendly. If you want to remove the entire thing, just remove the 'system' entry in the menu editor. If you want to edit or remove a single entry, you're going to have to hunt down the .desktop file that creates the entry (see question #10 above) and manually edit the file with a text editor, or delete it. The Xfce menu does not support the portions of the Freedesktop menu spec dealing with menu editing, but only the portions dealing with categorising apps using .desktop file categories. This may improve in Xfce 4.4, but don't hold your breath.
Help! My Xfce desktop disappeared! It looks like GNOME! And the desktop menu is gone too! What do I do? - You ran
nautilus, didn't you? By default, Nautilus takes over the desktop when it runs. First you need to kill Nautilus, and then you should run
xfdesktopto make sure Xfce's desktop manager is running. In the future, when you run Nautilus, pass it the
--no-desktopoption to instruct it to avoid drawing the desktop. A more permanent solution is to set the gconf key
--no-desktopwill no longer be required). This can be done using the graphical gconf-editor, or the command-line gconftool utility.
These are mainly software-dev-related. Not completely stuff I agree with (for the opinion/analytical pieces), but at least viewpoints I consider interesting and worth thinking about.
- User Interface Design
- UI Design For Programmers (Joel Spolsky)
- Why Free Software Usability Tends to Suck (Matthew Thomas)
- Free Software UI (Havoc Pennington)
- The Rise of Interface Elegance in Open Source Software (Steven Garrity)
- API References/Tutorials
- Xfce4 API Documentation (work-in-progress)
- GNOME API Documentation (including gtk/glib/etc.)
- GTK+ 2.0 Tree View Tutorial (incredibly helpful)
- GTK+ DnD Tutorial
- Glib Object System Tutorial
- GNU Autoconf Manual, v2.57
- GNU Automake Manual, v1.9.6
- How to Report Bugs Effectively (Simon Tatham)