xmonad-log-applet for GNOME and Xfce
by Alexander Kojevnikov
xmonad-log-applet is a handy panel applet/plugin for GNOME (and now Xfce) users who use Xmonad as an alternative window manager. The applet will show the visible workspace(s), active window’s title or anything you send its way from your xmonad.hs.
I recently took over xmonad-log-applet maintainership from Adam Wick, and today I’m happy to announce the release of version 2.0.0.
Changes since the previous release:
- Migrated the GNOME 2 applet from deprecated libbonobo API to the new D-Bus based API.
- GNOME 3 panel support (in fallback mode).
- Xfce 4 panel support.
- Revamped the build system.
- Dropped GConf dependency which was used to specify the applet width; instead fill all available space (like the window list applet) and ellipsise when necessary.
- Simplified background transparency handling.
- Fixed install locations.
- Updated sample xmonad.hs.
To install get and unpack the tarball or clone the repo, then run:
% ./configure --with-panel=gnome2 % make % sudo make install
Substitute `gnome2` with `gnome3` or `xfce4` if that’s what you use. If you cloned the git repo, use `./autogen.sh` instead of `./configure`. After restarting the panel you should be able to add the applet.
Use the provided sample xmonad.hs file to bind it to Xmonad. It depends on the DBus package, which currently doesn’t compile with GHC 7.x, but it’s easy to work around:
% cabal update % cabal unpack DBus % cd DBus-0.4 % $EDITOR DBus/Internal.hsc
Replace `import Control.Exception` with `import Control.OldException`, then:
% cabal configure % cabal build % cabal install
After this, your xmonad.hs should compile.
EDIT: With GHC 7.4, you also need to edit DBus/Message.hsc and prepend `Foreign.` to `unsafePerformIO`.
Happy Xmonading!

Thank you for picking up the maintenance of this highly useful applet. I use it all day, every day.
By the way, your tarball link is currently broken… “Access Denied”.
@David: Should be fixed now, could you try again?
Thank you! It works flawlessly for me on GNOME 3.
2.0.0 requires libpanelapplet-3.0, and that’s not available for Debian squeeze (6.0.2). I’m having to use the 1.0.3 release of xmonad-log-applet. Any idea for a fix?
@Trey: I’m afraid you will have to stick to 1.0.3. libpanelapplet-3.0 exposes the new D-Bus API (which x-l-a 2.0.0 uses) and comes with gnome-panel 2.32, but Squeeze (or Sid for that matter) has only version 2.30.
@Alexander: OK, thanks. I figured something like that might be the case. Oh, well, I’ve finally gotten this working on every machine I’ve tried it on, and even 1.0.3 is great!
Alex, I’ll post this here instead of @ github since it feels more like a question for this page than a bug-report for the code.
I don’t know if I’m totally stupid or if I’m missing some essential part. But how do I add the applet to the gnome3 panel?
Jonas, I believe you need to hold the Alt key when right-clicking on the panel.
Not exactly relevant to xmonad-log-applet, however I thought you might have an idea:
How can I make unity-2d-panel to show the application menubars?
I’m trying the recipes on this page: http://www.reddit.com/r/xmonad/comments/laun4/xmonad_with_unity_or_gnome_under_ubuntu_oneiric/
Onur, sorry, I’m not familiar with Unity, but Unity-2D support for x-l-a is planned: https://github.com/alexkay/xmonad-log-applet/issues/2
Thanks anyway,
Maybe I’m asking the wrong question. I might live with the old (I mean before Ubuntu 11.10) menubars, if I find how to get them back. :)
I also had to change DBus/Message.hsc. On line 513: changed unsafePerformIO to Foreign.unsafePerformIO. The error I got was:
DBus/Message.hsc:513:12:
Ambiguous occurrence `unsafePerformIO’
It could refer to either `Foreign.unsafePerformIO’,
imported from `Foreign’ at DBus/Message.hsc:41:1-14
or `System.IO.Unsafe.unsafePerformIO’,
imported from `System.IO.Unsafe’ at DBus/Message.hsc:44:1-23
(and originally defined in `GHC.IO’)
Frank, which version of GHC are you using?
ghc 7.4.1-1 from Debian unstable.
Thanks Frank, I can reproduce it with GHC 7.4. I’m going to update the post.