This is not, but a dump of the atom feed of content that was available on
I do not intend to update this content but I think that good knowledge should be keept free and shared since their site shutdown.
Before, there was

tmpreaper: keep your temp files under control


The tmpreaper utility will clean out your temporary file directories by recursively removing files that haven’t been accessed in some amount of time. You can configure exclusions and it will not dive into symlinks, or remove symlinks, sockets, FIFOs, or special files unless specifically told to.

However, the package description contains this:

WARNING: Please do not run `tmpreaper’ on `/’. There are no protections against this written into the program, as that would prevent it from functioning the way you’d expect it to in a `chroot(8)’ environment.

After you install the package, you need to manually edit /etc/tmpreaper.conf and remove or comment the SHOWWARNING=true line to actually active it. Also review the settings in that file.

At least some versions of Ubuntu, and possibly Debian, do not install tmpreaper by default. I assume that is in accordance with the “principle of least surprise” but this policy may bother system administrators familiar with Red Hat or other systems where /tmp is automatically cleaned out by default. Note that /tmp and other directories are still cleaned at boot-time by the default /etc/init.d/bootclean (Debian) or /etc/init.d/* (Ubuntu) scripts.

The Red Hat and derivatives equivalent is ‘tmpwatch’ and is installed by default on those systems.

lbzip2: parallel bzip2 utility


lbzip2 is a multi-threaded bzip2 compressor/decompressor utility that can be used on its own, in pipelines, or passed to GNU tar with the –use-compress-program option (or with the –use shorthand).

The main motivation for writing lbzip2 was that I didn’t know about any parallel bzip2 decompressor that would exercise multiple cores on a single-stream bz2 file (i.e. the output of a single bzip2 run) and/or on a file read from a non-seekable source (e.g. a pipe or socket). Thus lbzip2 started out as lbunzip2, but with time it gained multiple-workers compression and single-worker decompression features. Due to the input-bound splitter of its multiple-workers decompressor, it should scale well to many cores even when decompressing.

Target audience

Originally, the target audience for lbzip2 was experienced users and system administrators: up to version 0.15, lbzip2 deliberately worked only as a filter. Now at 0.17, lbzip2 is mostly command line compatible with bzip2, except it doesn’t remove or overwrite files it didn’t create. If lbzip2 will have a chance to enter the Debian alternatives system, as an alternative for bzip2, I’ll add this feature. In any case, you are encouraged always to verify lbzip2’s output manually before (or instead of automatically) removing its input, both when compressing and when decompressing. I also recommend perusing the README, installed as /usr/share/doc/lbzip2/README.gz on Debian, before switching over to lbzip2 eventually.

Usage examples

As lbzip2 was chiefly created for speeding up decompression of single-stream bz2 files and/or for speeding up decompression from a pipe, I’ll provide examples of decompression first. Basically all free software tarballs should be available on the net as tar.bz2 files, I’ll choose (not surprisingly) a kernel tarball.

The “traditional” method:

wget \
tar --use=lbzip2 -x -f linux-

The overlapped method:

wget -O - \ \
| tee -i linux- \
| tar --use=lbzip2 -x

If wget fails to download the tarball for some reason (at which point at least tar will complain), you should remove the partially decompressed tree and fall back to the traditional method. To avoid losing the already downloaded part, pass -c to wget.

Another example might be the import of a Wikimedia Dump file, perhaps with a pipeline like this:

lbzip2 -d < enwiki-latest-pages-articles.xml.bz2 \
| php importDump.php

Finally, a compression/backup example with verification at the end:

tar --format=pax --use=lbzip2 -c -f tree.tar.bz2 tree
tar --use=lbzip2 --compare -f tree.tar.bz2 -v -v

Hypothetically, with lbzip2 as the configured bzip2 alternative, we should be able to replace –use=lbzip2 with the well-known -j GNU tar option.

Comparison with other bzip2 utilities

I posted a longish mail with feature analyses and performance measurements to the debian-mentors maling list. To reiterate what I said there: fundamentally, lbzip2 was created to fill a performance gap left by pbzip2.

After working on lbzip2 for a while, I found out that p7zip does in parallel the decompression of single-stream bz2 files, but (the last time I checked) it couldn’t scale above four threads, and it refused to read bz2 files from a pipe.

Bzip2 compression and decompression performance is very sensitive to the cache size that is dedicated to a single worker thread (i.e. a single CPU core). To my limited knowledge, this implies that among commodity desktops, lbzip2 performs best on multi-core AMD processors.

lbzip2 does have shortcomings. They are either inherent in the design or I deem then unimportant. I tried to document them all. Please read the debian-mentors post linked above, the README file, and the manual page.

As said above, I didn’t originally intend lbzip2 as a drop-in replacement for bzip2. Even though it is almost there now, you should nonetheless get to know it thoroughly before deciding to switch over to it.


Various versions of lbzip2 are available for Debian (squeeze and sid) and Ubuntu (karmic and lucid).

You should be able to install lbzip2 on lenny too; it shouldn’t break anything. I used the following commands:

cat >>/etc/apt/sources.list <<EOT
deb      testing/updates main
deb testing         main
apt-get update
apt-get install lbzip2

Upstream releases are announced on the project’s Freshmeat page. I distribute the upstream version to end-users from my recently moved home page, which also links to other distributions’ lbzip2 packages.

A development library version is very unlikely. You can work around this by communicating with an lbzip2 child process over pipes via select(), and by checking its exit status via waitpid() after receiving EOF. This is not an unusual method; see, for example, gpg’s many –[^-]*-fd options.

End-user stress-testing

I encourage you to test lbzip2. The upstream README describes the test method in general; let me instantiate that description here specifically for Debian.

Necessary packages, in alphabetical order:

Recommended packages, in alphabetical order:

Create a test directory (you will need lots of free space under that directory), and under it a well-compressible big file. For example:

mkdir -m 700 -v -- "$TMPDIR"/testdir
tar -c -v -f "$TMPDIR"/testdir/testfile.tar /usr/bin/ /usr/lib/

Then issue the following commands, utilizing the test file created above. As this could take several hours, I suggest entering a screen session first. Your machine should be otherwise unloaded during the test, both IO- and CPU-wise.

cd /usr/share/lbzip2
dash "$TMPDIR"/testdir/testfile.tar

Any errors encountered during the test should be either handled or fatally rejected. In particular, utilities refusing to decompress from a pipe are handled.

Estimated disk space usage: when writing this article, I executed the above commands with a 100 MB test file. (You should aim at least at 1 GB.) The test directory ended up being 250 MB in size. M stands for 220, G stands for 230.

Estimated time span: supposing

then the full test should take around
S * (1879 + 2098 * 2 / N) * T / 240

Estimated peak memory usage: N * 50 MB should be a very safe bet.

To view the test report:

less -- "$TMPDIR"/testdir/results/report

The only obscure entries in the table should be the “ws” ones. They mean “workers stalled” and give a percentage of how many times the (de)compressor worker threads tried to start munching a block but had to go to sleep because there was no block to munch. Anything above 1-2% usually implies some bottleneck and shows that lbzip2 couldn’t fully exhaust your cores. This shouldn’t occur, but if it does and lbzip2 and pbzip2 have performed similarly in the compression tests, then the bottleneck is in your system, not lbzip2.

Backupninja: the ultimate data defender


Everyone knows they should do regular backups. Sooner or later, your hardware will fail, or you will accidentally delete a directory, or something else will happen.

Many people, however, ignore periodic backups because they find it too much of a hassle. That’s why, the backup procedure must be fully automated and require no user intervention, at all.

Backupninja is a backup system that provides excellent automation and configuration facilities. You only need to instruct Backupninja once, and he will take silent duty of defending your valuable data. This can be done via direct edit of configuration files, or via a nice console wizard called ninjahelper, which also helps to test the backup actions interactively.

Backupninja doesn’t do the hard work himself, but rather relies on specialized tools like rdiff and duplicity, thus following the Unix-way. There is built-in support for specialised backup actions, including things like the backup of Subversion repositories, or LDAP, MySQL, and PostgreSQL databases. It can do remote, incremental backups, as well as burning them to CDs or ISO images.

But the best part is that Backupninja is capable of learning new powerful skills, just by reading user-provided shell scripts. For example, I use the following script to dump important package information of my Debian system:


dpkg --get-selections > /var/backups/dpkg-selections
if [ $? -ne 0 ]
   error “dpkg selections dump failed”
   info “dpkg selections dump done”

aptitude search -F %p ‘~i’ > /var/backups/apt-installed && \
aptitude search -F %p ‘~i!~M’ > /var/backups/apt-installed-manual && \
aptitude search -F %p ‘~i ~M’ > /var/backups/apt-installed-auto
if [ $? -ne 0 ]
   error “installed package list dump failed”
   info “installed package list dump done”

Note the use of some special functions: debug, info, and error. They put descriptive messages into the log file. It allows me to quickly ensure that fresh backups have actually been created. I’ve been using Backupninja to backup my personal data for a long time.



leafpad: a graphical text editor that starts really fast


Article submitted by Emmanuel Kasper. Guess what? We still need you to submit good articles about software you like!

Leafpad in actionSometimes you know you just need to change a single line or a only a few things in a file, but for sure you don’t need syntax highlighting, Gnome VFS integration, or a plugin manager. Then you can spare a few seconds and start leafpad, instead of the usual Gedit/Kedit. Leafpad is is a very simple GTK editor, who can just do search/replace, line numbering and, yes, you can change the default font. Actually, as the result of creeping featurism, printing was added to Leafpad in version 0.8

Leafpad starts always in less that a second, in contrast to 3-4 seconds for gedit on my computer. And for just removing a single line, it makes a difference.

Since leafpad has an installed size of 672k, giving it a try will surely not clutter your hard drive.

Leafpad has been in Debian since at least Etch, and in Ubuntu since Dapper Drake.

timeout: send a signal to a process after some time


Article submitted by Carsten Aulbert. Guess what? We still need you to submit good articles about software you like!

timeout (part of the SATAN package) is a nice little tool to terminate/send a signal to a process after a given time.

It usually takes two arguments, the first one is the time limit in seconds and the second the program to start. All trailing options are then passed to the started program.

It accepts a single numerical option which specifies what signal to send — be careful as its default is SIGKILL.

Quite useful on many occasions, e.g.: strace stats of a process PID for the next 300 seconds

timeout -2 300 strace -tt -c -p PID

Ensure that your kids don’t play childsplay all day long (of course you need to make sure that they won’t be able to restart it ;))

timeout 3600 childsplay

Similar programs could be timelimit.

Package is available in Debian for ages (at least since etch) and Ubuntu since at least dapper.

yeahconsole: a dropdown terminal emulator wrapper for X


Article submitted by Pete Daniels. Guess what? We still need you to submit good articles about software you like!

yeahconsoleyeahconsole is a “quake-like” dropdown terminal emulator wrapper for X. Originally written to complement the author’s window manager (yeahWM), it can be used anywhere, and is lightweight and dependency-free.

yeahconsole can be invoked by itself (in which case it simply starts your preferred terminal emulator) or with the -e (execute) argument. Once started, the default hotkey to drop down the terminal is Ctrl-Alt-y.

yeahconsole can be configured via your ~/.Xresources file, in the format:

yeahconsole*foo: value

Type yeahconsole -h to view possible resources and their default values. Some highlights:

term: Your preferred terminal emulator. xterm and urxvt are supported.

xOffset, screenWidth, consoleHeight: Set the placement and size of the
terminal. Offset and width are measured in pixels, height in lines.

aniDelay, stepSize: Delay and step size settings for the slide
animation. Setting stepSize to 0 disables the animation.

toggleKey, keyFull: Hotkeys to drop down the terminal. Set to
Control-Alt-y and Alt-F11 by default, respectively.

See the man page for more; see also the man pages for xterm and urxvt and their respective resources. Particularly note that if urxvt is used as the terminal emulator, pseudo-transparency is supported.

Other alternatives

Yakuake (featured in another debaday article) and Tilda: For KDE and Gnome, respectively. Yakuake is a wrapper for Konsole and Tilda for Gnome-terminal libvte (on which Gnome-terminal is based on). Both highly useful and, in some respects, more full-featured, but both carrying obvious overhead (and dependencies), especially if you’re not using KDE or Gnome. For instance, both Yakuake and Tilda have tabs, a feature which yeahconsole lacks. However, this writer has found yeahconsole + screen to be a much more lightweight, configurable, and ultimately satisfying solution.

Availability & Status

yeahconsole has been available in Debian since at least Etch, and in Ubuntu since Gutsy. It is unknown to this writer whether yeahconsole is in active development, but it seems to be bug-free.

fcheck: easy-to-use file integrity checker


fcheck is a program that emails an alert when important files or directories change. This is useful for change control or detecting unauthorized modifications that may indicate an intrusion.

Most sysadmins will agree that having a file integrity checker is a good idea, the problem with them is that they are usually a giant pain to get working and keep up-to-date. Thus they are perpetually on the “to do” list and then you don’t have it when you need it. (Hint, after the intrusion is too late.)

Enter fcheck, which Just Works out-of-the-box with the exception of the “major gotcha” detailed below, and with only a little care and feeding.

When installed it creates the file database (DB) then runs from cron every two hours. When it sees a change it sends email (via cron) then rebuilds the DB by itself, so you won’t get the same error next time. That’s a potential security issue, since if you lose that email you’ve missed your one and only alert. Also, if some files change all the time (like /etc/mtab, /etc/printcap, and /etc/samba/smbpasswd) you will get alerted on them every run, until you go exclude them. The configuration file supports file includes, so keeping a custom fcheck.local file is a breeze.

You will get a large alert message after an aptitude *-upgrade command, which is a great way to validate your change control policy (yup, stuff was changed when it was supposed to; or Who the heck is messing with my server?!?).

The existing package does not include logcheck ignore files, so if you’re using the logcheck package (and you should be on a server) you’ll get a alerts about DB rebuilds unless you add an ignore line (see samples).

The default config file is not bad, and adding new files and directories for fcheck to monitor is really easy, though including directories is a bit subtle in that they are only checked recursively if listed with a trailing ‘/’. See the examples below for things I usually add.

There is also a major gotcha reported in this bug report. It turns out there is a missing exclude needed for /lib/udev/devices/ so the install will hang at “Building fcheck database (may be some time)…” or during a check at “PROGRESS: validating integrity of /lib/” and leave a ton of fcheck processes clogging up your system. See the bug and the samples below for the fix.

Because of the easy failure mode of a single email before the DB update, and the lack of cryptographic protection of its component files, it’s not the most secure program in the book. But it is drop-dead easier than anything else I looked at. In my book, “easy and used” beats “such a pain I never got around to it” any day :-). And it’s not that hard to make it more secure by keeping off-line copies of the DB, configuration and Perl script and adjusting the cronjob to NOT rebuild after changes, if you want to.

If you run a server you should be using fcheck and logcheck. And probably tmpreaper, etckeeper and maybe monit too. To summarise:



Other alternatives:

Verify installed package files against MD5 checksums.


A file integrity verification program.


network-wide system integrity monitor control interface.


Data integrity and host intrusion alert system.


A stealthy File Integrity Checker.


file and directory integrity checker.


Debian: Since at least Etch: 2.7.59-8

Ubuntu: Since at least Dapper: 2.7.59-8


Edit /etc/fcheck/fcheck.cfg and add at the bottom:

       # Tweak the main file if needed, then add this near the bottom.
       # In addition to the defaults in this main file, also:

       CFInclude       = /etc/fcheck/fcheck.cfg.local

Create /etc/fcheck/fcheck.cfg.local

       # In addition to the defaults in '/etc/fcheck/fcheck.cfg':

       # Track changes to crontabs (may want to limit to some users on busy systems)
       # Note trailing '/' for recursive check of this directory
       Directory       = /var/spool/cron/

       # This stuff changes too often
       Exclusion      = /etc/package.list
       Exclusion      = /etc/printcap
       Exclusion      = /etc/motd
       Exclusion      = /etc/mtab
       #Exclusion      = /etc/samba/smbpasswd
       # for DHCP: Exclusion      = /etc/resolv.conf

       # BUGFIX, per
       # Can't hurt to have this just in case
       Exclusion      = /lib/udev/devices/

Only if you are also using the logcheck package, create /etc/logcheck/ignore.d.server/fcheck.local:

       # Ignore fcheck rebuild notices
       # Note that this should be one single line:
       ^\w{3} [ :0-9]{11} \w+ fcheck: “INFO: Rebuild of the fcheck database /var/lib/fcheck/fcheck\.dbf begun \
 for \w+ using config file /etc/fcheck/fcheck\.cfg”

logcheck: brilliantly simple log monitoring


Logcheck is a simple yet great idea, an almost set-it-and-forget-it way to monitor your server logs for problems of all kinds. You create three pattern (grep regex) lists:

Logcheck periodically checks various syslog (or other) log files and picks up where it left off the last time. During each run it takes the new messages and looks for “known bad” things but first removes stuff that “looks bad but isn’t” and saves the messages as “this is known to be bad.” Then it rewinds, removes the known bad it just collected, removes the “known good” and stuff that “looks bad but isn’t” and saves whatever is left as “unknown.” Then it emails you the results.

Over time, as you tune your files, you end up only being alerted to known bad or new (not yet classified) stuff. Brilliant. I even did a (cheesy) Windows port of it.

Originally written by Marcus J. Ranum and Fred Avolio as for the TIS Gauntlet firewall toolkit, it was adapted by Craig Rowland and applied to system logs. It spent some time as logsentry as part of Psionic’s Abacus/Sentry tools until they were bought by Cisco and the tools moved to SourceForge. The version in Debian is a re-write which was then inherited by Ubuntu.

But the best about the Debian/Ubuntu implementation is that almost all of the patterns you need are already Just There™. I usually only have to add a handful to work around odd things I’m doing or minor bugs. See the example at the bottom.

If you run a server you should be using fcheck and logcheck. And probably tmpreaper, etckeeper and maybe monit too. Articles about all these tools will be published soon, stay tuned!

As drawbacks, it should be noted that it may require some tuning, especially on a workstation or newer distro versions, and that may not be scalable for a lot of servers.

Is also worth mentioning that there are a variety of commercial and Managed Security Monitoring solutions that will scale and provide more information about events, but none are this easy.


The logcheck package is available in Debian since at least etch, and in Ubuntu since at least Dapper. See also the logcheck-database package.

Sample configuration

/etc/logcheck/ignore.d.server/LOCAL.ignore (lines wrapped for readability)

# /usr/sbin/logcheck automatically removes blank lines and comments.
# See 'man run-ports' for file name restrictions.

# For testing, create a sample log file and:
# su -s /bin/bash -c "/usr/sbin/logcheck -tsol sample" logcheck
# e.g.: su -s /bin/bash -c "/usr/sbin/logcheck -tsol /tmp/mylog" logcheck

# # DHCP Client lease renewals
# ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ dhclient: New
# ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ dhclient: DHCP(REQUEST|ACK)
# ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ NetworkManager:   DHCP daemon state
is now 3 \(renew\) for  interface

# # NTP, usually: 4001/0001
# ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ntpd\[[0-9]+\]: kernel time sync status
change [0-9]+

# # Syslog restarts (morning or all)
# ^\w{3} [ 0-9]{2} 07:[45][:0-9]{4} [._[:alnum:]-]+ syslogd
1\.5\.0#[0-9]ubuntu[0-9]: restart\.
# ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ syslogd 1.5.0#[0-9]ubuntu[0-9]: restart\.

# # fcheck
# ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ fcheck: “INFO: Rebuild of the fcheck
database  /var/lib/fcheck/fcheck\.dbf begun for [._[:alnum:]-]+ using config
file /etc/fcheck/fcheck\.cfg”

# # lm-sensors (normal)
# ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel: \[[0-9. ]+\] CPU[01]:
Temperature/speed normal
# ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel: \[[0-9. ]+\] Machine check events

# # Wireless
# ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ NetworkManager:   \(eth1\):
supplicant connection state:

nullmailer: simple send-only mail transport agent


Article submitted by JP Vossen. DebADay needs you more than ever! Please submit good articles about software you like!

Nullmailer is a minimal MTA (Mail Transport Agent) that provides mail delivery services to programs (cron jobs, system integrity checkers, log inspectors, etc.) in a host that otherwise does not require a full MTA like Exim or Postfix. Do not confuse an MTA with programs like Evolution or Thunderbird which are MUAs (Mail User Agent): programs that offer an interface to a human to write email.

Nullmailer is one of those packages that create a “well duh” moment when you find out about it. Normally, hosts with no MTA can’t send mail, which turns out to be a Bad Thing in terms of finding out when things like cron jobs break, or for monitoring logs or files. So you go and install a minimal system, then wonder why it’s being so quiet. Well, no MTA, no email. But Exim, Postfix or another full MTA is overkill and might be tedious to maintain. What you really need is just a basic MTA to send messages to the real mail server.

That’s nullmailer.

The package will prompt for your remote mail server and create /etc/nullmailer/remotes, where you can also specify authentication details. You probably also want to create /etc/nullmailer/adminaddr to receive in one mail account all mail destined to your local host. Each file is a oneliner that contains pretty much what you’d expect:

$ cat /etc/nullmailer/adminaddr

$ cat /etc/nullmailer/remotes

There are also several other files that may be used by nullmailer: /etc/nullmailer/defaultdomain and /etc/nullmailer/defaulthost in case you don’t already have /etc/mailname. For a complete list of control files, see the nullmailer(7) man page. Detailed information can be found in the man pages for each part of nullmailer: nullmailer-queue(8), nullmailer-inject(1), and nullmailer-send(8).



Other alternatives:

Nullmailer has been available in Debian at least since Etch, and in Ubuntu Universe since Dapper.

chromium-bsu: fast paced, arcade-style, scrolling space shooter


Oops, this article was supposed to go live on Sunday, my bad.

Article submitted by Paul Wise. DebADay needs you more than ever! Please submit good articles about software you like!

Chromium B.S.U. is a top down fast paced high action scrolling space shooter. In this game you are the captain of the cargo ship Chromium B.S.U., and responsible for delivering supplies to the troops on the front line. Your ship has a small fleet of robotic fighters which you control from the relative safety of the Chromium vessel.

You control the robotic fighters with your mouse and repel wave after wave of different kinds of enemy ships. Launch Chromium B.S.U. from the Applications / Games / Arcade menu and start a new game. You will soon be sending volleys of weapon fire toward the enemy ships while protecting yourself with super shields, waiting for powerups to get closer or dodging fire from the larger enemy ships at the end of each level:

chromium chromium chromium

If you keep getting killed, quitcher whinin’, you ninny! It’s supposed to be hard! Seriously, Chromium B.S.U. is intended to be a 15 minute adrenaline rush/mental cleanser. Frequent doses of explosions can be very therapeutic. There is always kamikaze attacks or the BIG RED BUTTON if you get into particularly nasty trouble.

The chromium package is in Debian since lenny and Ubuntu since dapper, but it has been recently renamed to chromium-bsu. Chromium B.S.U. is an old favourite of the Linux gaming community that has been neglected until recently. The project is still looking for developers, especially to help move it off obsolete libs like libglpng and fix the rest of the bugs.

iotop: simple top-like I/O monitor


Article submitted by Paul Wise. DebADay needs you more than ever! Please submit good articles about software you like!

iotop is a console application for monitoring the I/O usage of processes on your system. It is especially handy for answering the question “Grrr, sloooowness, why is my disk churning so much?”

iotop showing cat writing to diskJust type iotop in your terminal and you will get a regularly updated list of processes and the amount of I/O they are currently using: reads and writesin bytes per second, and percentage of time spent swapping and waiting for I/O.

iotop is related to top and vmstat. In top you see a display of CPU and memory usage but not I/O. The vmstat utility shows it, but its just a stream of one-line reports instead of a dynamic display and doesn’t show the information in a per-process way.

Note that iotop needs the CONFIG_TASK_DELAY_ACCT and CONFIG_TASK_IO_ACCOUNTING options enabled in the kernel; in Debian stock kernels, that’s already the case.

iotop is available in Debian since Lenny and in Ubuntu (universe) since Intrepid.

dmidecode: get hardware information from the bios


Article submitted by Ryan Forsith. Guess what? We still need you to submit good articles about software you like!

dmidecode is a useful tool designed to extract system hardware information directly from the BIOS. This information typically includes system manufacturer, model name, serial number, BIOS version, asset tag as well as a lot of other details of varying level of interest and reliability depending on the manufacturer. The information provided could potentially help in problem solving, like in the case of the screenshot provided; there’s no documentation to be found in regards to the setting of the CPU toggles, but the dmidecode output displays exactly which sequence can be used for each clock speed.

dmidecode screenshot

This information can be invaluable to administrators looking for tweaks, especially in legacy hardware. DMI data may not always be reliable, as the software is intended to report only what the BIOS tells it to.

Three additional tools are packaged with dmidecode which further enhances it’s usefulness:

biosdecode screenshot   vpddecode screenshot

dmidecode is available in Debian since Etch and in Ubuntu (universe) since Hardy.

goplay: discover interesting packages


goplay is a package browser that lets you find interesting packages that you didn’t knew before. It uses DebTags (categories to describe Debian packages) to classify the packages. The package comes with some generic browsers:

screenshot of goplay

gonet looking for firewalls You can refine your search by specifying the type of package you are looking for, that is, the specific role it has. For example, gonet (the browser of networking related packages) has the following types: “Client”, “Configuration”, “Firewall”, “High Availability”, “Load Balancing”, “Routing”, “Scaning”, “Server”, “Service” and “VPN or Tunneling”. The screenshot in the right shows gonet browsing firewall packages. When you click on a package on the left pane, the right pane shows a description of the package and the DebTags (in the example, ferm, a recently featured package in this site). If a screenshot for the package is available, it is also shown.

The first and second field for classification are automatically set to “type” and “interface”, but you can change that using the options --primary and --secondary. For example, you can prune the list of packages based on the purpose of the package using the option --secondary=use. You can find more information about the predefined tags (also known as “facets”) in the Debian Wiki.

goplay is available in Debian Lenny and Ubuntu (since Hardy).

Your turn

Have you found an interesting package with goplay? Share it with the community and send us a good article! We’re running out of them!

cdargs: a browser for cd


We have run out of articles! Please submit good articles about software you like!

cdargs is a command that enhances the good old cd by adding bookmarks and a browser. Sometimes you need to work on directories that are difficult to reach, even with the help of tab-completion (e.g. /var/www/ When you are in one of such directories, just type ca wwwinc and you’ll add a bookmark of the directory with the name wwwinc. Whenever you want to go back to that directory, no matter which is your current working directory, just type cv wwwinc and you’ll be back there. cdargs has tab-completion too and understands subdirectories of bookmarks. In the previous example, typing cv wwwinc/foo will be equivalent to cd /var/www/

cdargs has a browser. Just type cv and cdargs will bring you a list of your bookmarks. You can use the arrow keys (or h, j, k and l if you are used to vim) to navigate the list. When you have selected your final directory hit enter, and you’ll return to the command line, in that directory. You can add new bookmarks by hitting ‘a’ and you can edit your list of bookmarks with your favorite editor hitting ‘e’. With ‘?’ you get a list of all of the available commands in cdargs.

cdargs browser

The bookmarks of cdargs can be extended to other commands. The distribution of cdargs provides examples for the commands cp and mv, under the aliases cpb and mvb. For example, if you want to copy the file bar to the bookmark in the previous example, a quick cpb bar wwwinc will do the trick.

cdargs needs some aliases in the shell to work correctly. If you use the bash shell, you need to add this to your ~/.bashrc:

if [ -e /usr/share/doc/cdargs/examples/ ]; then
  . /usr/share/doc/cdargs/examples/

The aliases are also available for tcsh, but not for zsh. The author is looking for someone who knows zsh shell scripting to write them.

Other alternatives


cdargs has been in Debian since at least Sarge and in Ubuntu since at least Dapper.

regexxer: search/replace for the masses


Article submitted by David A. Thompson. Guess what? We still need you to submit good articles about software you like!

This thing is great! If you manage a set of files (e.g., a code base) and end up needing to perform a search/replace across the files, or some subset thereof, maybe regexxer will end up being counted among your friends.

The regexxer web site summarizes regexxer as “a nifty GUI search/replace tool featuring Perl-style regular expressions”. After using regexxer, I have to agree…

If you have a code base that needs some search/replace time spent on it, regexxer really does seem to be the way to go. Again, the web site sums things up well: “If you need project-wide substitution and you’re tired of hacking sed command lines together, then you should definitely give it a try.”


regexxer main windowThe regexxer GUI is a straightforward, logically organized window with file management on the left and search/replace management on the right. The beauty of the thing is that the author(s?) seem to have added a lot of flexibility to the search/replace process while keeping the user interface relatively simple and clean.

File Management

One can select one or many files from a given folder. Recursion is optional and a pattern (e.g., *.lisp) can be defined to further limit files being acted on. A ‘find’ button then triggers execution of the search and the corresponding files are shown in the window below. Not much more to say…

The Search Replace process

The user interface makes it easy on the noggin with top-to-bottom arrangement of controls which follow the logic of the search replace. The perl-style search regex and the corresponding replacement are entered at the top of the window. Another ‘find’ button triggers the search and the corresponding matches are shown in context in the window below. At this point, I found the regexxer user interface close to ideal. The flexibility available to the user includes:


It’s likely I’m simply unaware of many of the alternatives ‘out there’. Typically, for this type of thing, many turn to sed, a powerful command-line tool. However, sed has a substantial learning curve. In contrast, if one has already mastered perl regex, regexxer requires very little in the way of additional investment of energy. Other command-line tools which provide some of sed’s functionality, such as modifile, rpl, and replace, perhaps have their place but they certainly don’t offer the warm fuzzies of the GUI interface of regexxer.

Emacs, which typically seems to already have an extension for just about any task except cooking breakfast, didn’t seem to shine here. I can’t help but suspect that there’s an emacs tool available for this sort of thing but I haven’t happened across it yet.

Among other GUI tools, several offer similar functionality. For example, the text editor jedit can act in much the same way as regexxer. Unfortunately, jedit relies on java and, thus, things get dicey on planet Debian. Another, more focused tool, kfilereplace, is very straightforward but does not seem to be under active development and has much more limited functionality (e.g., the option to perform replacements ‘one-at-a-time’ is greyed out in the configuration window). Other utilities which seem to be designed to perform this type of task (e.g., modifile or regexsearch) don’t seem to be available for Debian.


Apparently those on planet Debian and planet Ubuntu have Ross Burton and Daniel Holbach to thank for the packaging of this excelent tool.

xmlstarlet: Command Line XML Toolkit


Article submitted by Vasily Faronov. Guess what? We still need you to submit good articles about software you like!

With the proliferation of XML-based formats, it is nice to have tools that manipulate XML documents in the traditional Unix-like fashion, as the good old grep(1), sed(1) and other tools do for plain text. xmlstarlet is one of such tools. In fact, it is an entire toolkit packed into one program: xmlstarlet can extract data from XML documents, alter them, validate them, and perform many other useful operations. xmlstarlet has been available in Debian since at least release 4.0 “etch”, and in Ubuntu since at least release 6.06 “Dapper Drake”.

Let’s look at a few features of xmlstarlet more closely.

Extracting Data from XML Documents

There is a flexible way of processing XML documents and extracting data from them — a language known as XSLT. Both Debian and Ubuntu provide utilities, such as xsltproc, to deal with XSLT. However, this language is not exactly terse, and it requires you to first compose a separate document defining the desired transformation, and then apply it to the original document. When all you want to do is extract a few values from a document, you’d like something more approachable.

xmlstarlet is your friend. It features a relatively simple command syntax for selecting data, based on an auxiliary language called XPath, which allows for addressing elements in XML documents in a style reminiscent of filesystem paths. Behind the scenes, xmlstarlet still generates XSLT code, and it helps to know the actual XSLT language, but simple queries can be done almost intuitively.

Suppose we’d like to get a list of the recent headlines from the Debian Package of the Day website. We can use xmlstarlet to extract titles from the site’s RSS feed, because RSS is an application of XML. In RSS, entry titles are contained in title elements, in turn contained in item elements, which are in channel elements under the root rss element. The feed itself can be easily fetched with wget(1). Our pipeline would then look like this:

$ wget -O - 2>/dev/null | \
> xmlstarlet sel -t -m /rss/channel/item -v title -n
Fonty Python: manage your fonts
localepurge: Automagically remove unnecessary locale data
vnstat: a console-based network traffic monitor
rtpg-www: Please your dearest with rtorrent’s power
iftop - display bandwidth usage on an interface by host
atop: an ASCII full-screen performance monitor
dstat: versatile tool for generating system resource statistics
tellico: collection manager for books, videos, music, and a whole lot more
atool: handling archives without headaches
watch (from procps): execute a program at regular intervals, and show the output

The wget invocation is hopefully obvious (if it isn’t, just believe me that it downloads the feed and prints it to the standard output), so let’s dissect the xmlstarlet part.

  1. sel, which stands for “select”, is the subcommand to invoke within xmlstalrlet — since it’s a toolkit, it contains a number of such subcommands.
  2. The -t option designates the beginning of a template — roughly, a group of processing instructions.
  3. The -m option specifies a match, and /rss/channel/item is an XPath expression; together they translate to “for each item element found under a channel element under the rss element”.
  4. Then we specify what to do for that match: in our case, -v title prints out the value of the title element under the current item, and -n prints a newline separator.

The various options to xmlstarlet’s sel subcommand can be combined to produce fairly complex XSLT transformations. You can view the XSLT code generated by your command by adding the -C option.

Validating XML Documents

There are several ways of defining an XML document format, and the simplest of them is called document type definition, or DTD. A DTD defines which elements are allowed to appear in a document and what they can contain. DTDs for some popular formats, such as XHTML, are included in the Debian and Ubuntu archives. The val subcommand of xmlstarlet can validate documents against a DTD — that is, check if the documents comply with the formal requirements laid out in a DTD. In addition to DTD, xmlstarlet can also handle the more advanced XML Schema and RELAX NG languages.

As an example, let’s integrate xmlstarlet with gedit, the GNOME text editor, to enable easy validation of XHTML 1.0 Strict documents. We will need the w3c-dtd-xhtml package that contains the DTD files.

To validate against a DTD, xmlstarlet should be invoked with the val subcommand, the -d option (for “DTD”), and a path to the DTD file. As in the previous example, the document can be piped into xmlstarlet. We will integrate it into gedit by means of the latter’s “External Tools” plugin. Enable it by choosing “Edit” → “Preferences” → “Plugins” and marking “External Tools”. Then, in the “Tools” menu, select “External Tools” and click “New”. Name the tool as you wish, and optionally give it a description and a shortcut key. For “Command(s)”, enter this simple script:

#! /bin/sh
xmlstarlet val -d /usr/share/xml/xhtml/schema/dtd/1.0/xhtml1-strict.dtd -

xmlstarlet validating a remote XHTML document in geditChoose “Current document” for input, “Display in the bottom pane” for “Output”, and set “Applicability” to “All documents”. And that’s it. You can now validate any document you open in gedit from the “Tools” menu — even if the document comes from a remote location by way of the GNOME virtual filesystem.

With some more effort, you can write a script to validate any document for which you have the DTD installed. (Hint: you may use xmlcatalog(1) from the libxml2-utils package to locate DTD files by their public identifiers.)

Other Uses

This article cannot cover many other features of this toolkit, such as editing XML documents (ed), listing their element structure (el), or pretty-printing (fo). You may want to check out the examples that come with the xmlstarlet package (/usr/share/doc/xmlstarlet/examples), and to the reference help available by invoking xmlstarlet ‹COMMAND› --help.

Related Tools

The Debian archive also contains the python-4suite-xml package, which among other things provides some command tools for XML processing similar to xmlstarlet. However, 4suite seems to be intended more as a Python package, and consequently its command tools appear to be less feature-complete than xmlstarlet.

For solving specific XML-related problems, such as converting XML to and from other formats, you may want to have a look at the more specialized packages available in Debian and Ubuntu. The Debian Reference has an overview of some of those.

fwbuilder: Manage Firewalls Professionally


Article submitted by Vadim Kurland. Guess what? We still need you to submit good articles about software you like!

Firewall Builder is available from the libfwbuilder and fwbuilder packages in both Debian and Ubuntu in Universe. Packages for the current development builds are available from the project download area on SourceForge.

Eveyone knows about netfilter/iptables, a powerful firewall framework and command line tool that is part of every Linux distribution. Unfortunately, managing a security policy with it remains a non-trivial task for several reasons. Partially this is because of the complex syntax of the command line interface and the vast amount of available options and parameters. Another reason is that the administrator has to understand the internal path of the packet inside the Linux kernel and its interaction with different parts of netfilter in order to build rules correctly. This is not a specific problem of iptables though, other popular Open Source firewall platforms, such as OpenBSD PF, ipfilter and ipfw present similar challenges.

What is needed is a tool that lets an administrator define the security policy on a higher level of abstraction and hide the internal structure of the target firewall platform. For example, such a tool should decide which iptables chain is right for each generated iptables rule automatically, without the administrator’s input. It should also pick the right iptables targets for both policy and NAT rules as well as properly use most popular iptables modules, all automatically. Such tool should also implement best practices in policy design and help administrator deploy and activate generated policy on the firewall.

Firewall Builder does just that.


Firewall Builder is a GUI firewall configuration and management tool that supports iptables (netfilter), ipfilter, pf, ipfw, Cisco PIX (FWSM, ASA) and Cisco routers extended access lists. It presents all supported firewalls to the administrator in terms of unified abstract firewall that takes the best features from all of them and hides their specifics and inconveniences. Firewall Builder is more complex than many basic firewall configuration GUIs such as Firestarter, but on the other hand one can build very complex policies with Firewall Builder and fully utilize flexibility and power of iptables and other supported firewalls.

The general idea should be familiar to anyone who has ever worked with commercial firewall management systems. All configuration management operations can be performed from one central place: the Firewall Builder GUI. You create and manage collection of objects that describe network addresses, hosts and firewalls, as well as services, and then build firewall policy and NAT rules using these objects. Policy rules are defined in terms of “Source” and “Destination” addresses and “Service” and can have additional parameters such as interface association, direction, time interval and optional platform-dependent attributes. NAT rules are defined by addresses and services before and after translation.

Example of a policy rule

Rules are built with simple drag and drop operations and then firewall configuration can be generated with one click of a mouse. In the end, Firewall Builder produces a script or configuration file in the language of the target firewall. For iptables, it creates shell script that loads iptables rules, while for other platforms it creates a configuration file suitable for them. This makes it simple to deploy and activate the generated policy and also helps integrate Firewall Builder with existing automation scripts.

Fragment of the standard TCP objects library
The program comes with a collection of over 100 standard objects that can be used to describe popular TCP, UDP and ICMP services.

Firewall Builder implements many best practices in firewall policy design and firewall management procedures. Here are just a few examples:

Quick Tour

Main window

The main window of the program includes objects tree on the left (1), brief information about object selected in the tree (2), current firewall policy view (3) and a dialog panel where you can edit objects parameters (4).

As all Open Source projects, Firewall Builder depends on the user community who provide testing, bug reports and other forms of feedback. You can file bug reports and feature requests using the bug tracking system. The mailing list is a great place to ask for help and discuss the program with other users.

This was just a brief introduction to the Firewall Builder package. If you are interested in the program, you can find more information on the project web site at The slideshows Introduction to Firewall Builder 3.0 for the impatient and Getting starter with Firewall Builder can help you get more familiar with the program.

PIDA: the Python Integrated Development Application


Article submitted by Javier Derderian. Guess what? We still need you to submit good articles about software you like!

PIDA screenshotPIDA is an IDE (integrated development environment) written in Python and the pygtk graphical toolkit. It is slightly different from other IDEs: rather than attempting to write a set of development tools of its own, PIDA reuses available tools. In this regards PIDA can be used as a framework for putting together your own customized IDE.

Although still a young application, PIDA already boasts a huge number of features because of the power of some of the tools it integrates. For example features such as code completion and syntax highlighting are well implemented in PIDA’s integrated editors far better than any editor built for a commercial IDE. PIDA currently features many code editing helpers: syntax highlighting, code completion, automatic indenting, block commenting, etc; project management, version control management, Python debugger and profiler, GTK+ GUI building and rapid application design.

Among the already integrated components you can find:

It’s actually designed to program in any language, but it has some Python specific features like a Python shell. You can program you own plugins, and there’s a very nice API documentation to help you go trought the plugin development path.

Some already available plugins are:

Send code to a pastebin service
PdfTex preview
PdfTex preview compiles and displays pdf documents every time the buffer is saved.
Show class/function from python file, and show compilation errors
Python Debugger
Python Debugger based on RPDB2 the WinPDB Back End
Unit Tester
Perform unit tests
Docbook browser
Browse local docbook
Todo manager
Manage a personnal todo list per project
RFC Viewer
Download RFC index, search and view RFC pages inside PIDA
This plugin, developed outside of the project, integrates lots of Bazaar function that are not included in the base version control integration

PIDA is a great way of keep using Vim and have a nice GUI around to help you work faster with the file browser, the project manager and the internal shells. You can get more info on using and developing PIDA in the handbook

There are official packages available in both Debian and Ubuntu for a long time now.

And remember: PIDA LOVES YOU!

bash-completion: the greatest things since bash completion


Article submitted by Andre Masella. Guess what? We still need you to submit good articles about software you like!

Pressing the tab key in bash to auto-complete a file name is one of the most time saving tricks especially when dealing with very long file names. Unfortunately, file name completion is not always the right behavior. Take Subversion for example. The first argument to svn is the sub-command to use. The file name is also restricted: svn add only takes files not under revision control and svn rm only takes files that are under revision control.

This is where the bash-completion package steps in. After installing it with a quick apt-get install bash-completion, a few lines need to be uncommented in sudo vim /etc/bash.bashrc and the shell restarted. After that, try this:

$ svn <TAB><TAB>
add         cl          diff        list        move        propdel     rename      unlock
annotate    cleanup     export      lock        mv          propedit    resolve     update
blame       co          -h          log         pdel        propget     resolved    --version
cat         commit      help        ls          pedit       proplist    revert
changelist  copy        --help      merge       pget        propset     rm
checkout    cp          import      mergeinfo   plist       pset        status
ci          delete      info        mkdir       praise      remove      switch

Ta-da! Smarter completion for subversion.

bash-completion will alter the behavior of most commands to limit the display to relevant files. For example, mpg321 will only display MP3 files in the list. Programs like rmmod, iwconfig, ifup, and lvm will display relevant choices that are not files at all. Even bash’s fg and bg will now tab-complete with job identifiers.Completion for man is useful as it will auto-complete only man pages that exist and allows you to incrementally narrow your search by providing the beginning of the man page name, just like with regular files.

Occasionally, it doesn’t behave as expected. Particularly, sometimes a file with the wrong extension will be filtered out by bash-completion. For example, if you save an image for certain Internet forums, the file will sometime lack an extension. bash-completion will then filter out that file because it does not have the right extension. This can also happen if the capitalization is unusual. For example, bash-completion will suggest files that end in .mp3 or .MP3 for mpg321, but not .Mp3. In that case, either rename the file or insert # at the beginning of the line. The # makes bash think this line is a comment and bash-completion returns to regular file name completion. Once finished, remove the # and run the command.

bash-completion is available in Debian and Ubuntu. If it isn’t available, it is very easy to install from source.

Fonty Python: manage your fonts


Article submitted by Donn Ingle. We’ve run out of articles! If you like Debian Package of the Day please submit good articles about software you like!

FP logoFonty Python is available from the fontypython package in both Debian and Ubuntu in Universe. Fonty is a wxPython app so will work in any desktop environment. It also has a command-line interface which avoids the gui.

What the font?

As a graphic designer, one is called-upon to create artwork for many things. Fonts change from one client to another, from one job to another. If busy enough, then one can soon amass a vast pile of font files. Some are downloaded from the net as freeware, others are purchased, others are supplied by the clients for their work.

These font-files are stored somewhere, independently of the system fonts managed by the Debian package manager, possibly sorted in whatever fashion you prefer. It’s crazy to have these fonts all installed at the same time. Besides whatever that may do to your computer’s speed, it has one gigantic drawback: it clutters up font-selection boxes. Have you ever tried to find a font in a list of 500 fonts? Bleh.

What you need is a way to herd fonts and that’s what Fonty does.

Bring out yer fonts!

FP screenshot
Fonty will let you gather your fonts and structure them into “collections” —or what I call “Pogs”— a place to keep tyPOGraphy (well, why not?)

Think of Pogs as “groups”, “bags”, “cases”, “boxes” —that kind of thing. It’s an oddball word invented to describe a bunch of font files.

Ye olde basic idea

You visually gather fonts into Pogs. You then install a Pog and all the fonts within it are active on the system. You finish your work and then uninstall the Pog.

Your fonts never move from where they live (so don’t worry). Neither are copies of your fonts made; only links to the original files are used to install the fonts into your home .fonts subdirectory.

For example, you might have a Pog called logoZoo into which you place all the TTFs you need to design a logo for a Zoo. After that, when you need to work with them, you simply install the logoZoo Pog and start your design app. All those fonts will now appear in Inkscape or The Gimp, and other apps. Do your work as normal, and forget about fonts.

When you are done designing, you uninstall logoZoo and all those fonts go away. The links to the original files are removed from your home .fonts
directory, effectively uninstalling each font.

Fonty is also great for just looking at fonts wherever they are on your computer, without having to install them first. Fonty also has a command-line, allowing very quick use. You can install or remove pogs without having to start the entire gui, which is neat.

Quick tour

The layout of Fonty is supposed to be as simple as possible. I stayed away from context-menus and drag and drop because I find them hard to use. The flow is left-to-right with the sources of fonts on the left and their targets on the right.

FP screenshot

Bad fonts

Some fonts are simply bad to the bone. Fonty relies on freetype and PIL to open and draw the glyphs, and when this fails so does Fonty. I have put a lot of effort into catching this, but it does not always work. When a font crashes Fonty, you should get a popup box telling you which one did the deed. You really ought to remove that font! Some fonts cannot be displayed, and Fonty will show that by using coloured bars in the display area.

There is also a menu item (File > Check Fonts) that you can point at a given directory and scan it for fonts that will crash Fonty. Use this when you want to cull all the fonts that are bad.

Font Flavours

Originally, Fonty could only show TTF files. Since then I have expanded it to include OTF, Type1 and TTC files. As far as I can tell, being only seminiscient, this all works.


Fonty speaks your language; or it will if you translate it. There are a few translations available and you can join the project to contribute others.

Fonty needs help

With Python heading for version 3 and all kinds of other changes, Fonty is falling behind. She still works quite well, but I cannot spend the time I want to on her. If there’s anyone out there who wants to stick a fork in her and run —please do.

I hope to find some time this year to have another go; fix some bugs and include a few translations I have been sent, but I can’t be relied upon.

You can check out the author’s home page for Fonty and the project home page.

localepurge: Automagically remove unnecessary locale data


Article submitted by Geoffroy Youri Berret. We’ve run out of articles! If you like Debian Package of the Day please submit good articles about software you like!

localepurge allows you to remove unnecessary locale data you have on your system and prevents installing unneeded locales when installing new packages.

During the initial installation of localepurge you’ll be asked which languages you want in your system. The installation process will ask you if you want to purge also manpages for unwanted locales. Once installed, localepurge will be launched each time you install a new package on your system and will inform you of the amount of space you saved.

On a regular desktop installation you may save up to one hundred or more MiB. Even though space is no longer that expensive, this kind of tool might still be useful on netbooks, laptops and, in general, mobile technology with limited disk space.

nota bene: You have to be aware that localepurge is considered a hack of the package system, this is not a feature (localepurge(8)). localepurge is independent and not a part of dpkg/apt. Consider using it at your own risk. This warning sounds worrying but my personal experience of localepurge for the past 5 years tells me there is no reason to be afraid of —I never identified a problem on my system I could blame on localepurge. It’s nonetheless important to keep that in mind.

Let’s see of efficient it is with a mplayer installation on Debian Lenny for instance:

$ aptitude install mplayer
Preconfiguring packages …
Selecting previously deselected package libopenal1.
(Reading database … 95241 files and directories currently installed.)
Unpacking libopenal1 (from …/libopenal1_1%3a1.4.272-2_i386.deb) …
Selecting previously deselected package mplayer-skin-blue.
Unpacking mplayer-skin-blue (from …/mplayer-skin-blue_1.6-2_all.deb) …
Selecting previously deselected package mplayer.
Unpacking mplayer (from …/mplayer_1.0~rc2-17+lenny3_i386.deb) …
Processing triggers for man-db …
Processing triggers for menu …
Setting up libopenal1 (1:1.4.272-2) …
Setting up mplayer-skin-blue (1.6-2) …
Setting up mplayer (1.0~rc2-17+lenny3) …
Configuring mplayer …done
Processing triggers for menu …
localepurge: Disk space freed in /usr/share/man: 780K

localepurge is available in Debian since quite a long time, you’ll find it in old stable Sarge, Etch and Lenny. It’s also been available in Ubuntu (universe) for ages.

vnstat: a console-based network traffic monitor


Article submitted by András Horváth. Guess what? We still need you to submit good articles about software you like!

There are many command-line utilities in the Unix / Linux world that collect network traffic statistics for a chosen interface.

vnstat is different because statistics are collected permanently. It keeps the data in files so traffic monitoring is resumed at reboot. vnstat can be useful in situations when you need to know the exact amount of traffic that goes through the interface for a period longer than the computer is on. For example when you have a mobile 3G internet connection or an xDSL connection that has traffic limit per month, then you can easily check how much traffic you generated.

vnstat can be run without root privileges because it collects data from the kernel’s proc filesystem. It doesn’t have a daemon service, it is simply run by cron periodically. In Debian, the installation creates a cron job where a vnstat -u command is run every 5 minutes:

# /etc/cron.d/vnstat: crontab entries for the vnstat package

0-55/5 *        * * *   root    if [ -x /usr/bin/vnstat ] &&
[ `ls /var/lib/vnstat/ | wc -l` -ge 1 ]; then /usr/bin/vnstat -u; fi

Initially, you have to create the database with this command:

vnstat -u -i wlan1

After creating the database, the statistics can be viewed by running vnstat without any further parameters. Thanks to the cron job, the statistic is updated every 5 minutes. It even remembers the interface name to list:

$ vnstat

Database updated: Tue Jan 27 15:40:01 2009


           received:       2.18 GB (81.3%)
        transmitted:     512.85 MB (18.7%)
              total:       2.68 GB

                        rx     |     tx     |  total
        yesterday     95.14 MB |   12.19 MB |  107.32 MB
            today     11.33 MB |    4.47 MB |   15.80 MB
        estimated        16 MB |       6 MB |      22 MB

Some command line options allow you to view statistics for specific periods of time. For example:

Pros and cons


There are official packages available in both Debian and Ubuntu (Universe) for a long time now.

rtpg-www: Please your dearest with rtorrent’s power


Article submitted by Dmitry E. Oboukhov. Guess what? We still need you to submit good articles about software you like!

Many people use a wonderful bittorrent client: rtorrent. It is an extremely easy and convenient program for servers. However, its Command-Line Interface may scare some.

If you’re already using apache then you may use an external GUI for rtorrent. rtpg-www (RTorrent Perl GUI) is a package package that quite recently appeared in Debian (Sid) and Ubuntu (Jaunty). It will please your nearest and dearest with a nice web interface, as they will be able to run rtorrent without having to touch the dreaded terminal :)

rtpg screenshot

The package comes with an already configured virtual server. In its simplest variant all you need to do is:

  1. Answer “yes” on debconf’s question about adding a line to /etc/hosts (only if dpkg asks you medium priority questions)
  2. Switch on the scgi module with a2enmod scgi
  3. Enable the virtual server in apache: a2ensite rtpg.apache.conf
  4. Reload apache to activate the new configuration: invoke-rc.d apache2 reload
  5. Add “scgi_port = localhost:5000″ to your ~/.rtorrent.rc

Now, you can go to http://rtpg/ and start using it! With it you can:

rtpg Console skinrtpg supports skins which are easy to add by yourself. For those of you who doesn’t want to get out of the habit of using console there is a cool “Console” skin ;)

So install and enjoy! Good luck!

iftop - display bandwidth usage on an interface by host


Article submitted by András Horváth. We’re running out of articles! If you like Debian Package of the Day please submit good articles about software you like!

Sometimes it’s hard to guess what is eating up our bandwidth the most - on a home computer with an xDSL connection, for example. We can run a lot of programs simultaneously while they can eat as much bandwidth as they want independently of their CPU usage.

iftopWithout by-host statistics, it would be hard to guess what is slowing down our internet connection the most. iftop helps us to find out with a simple curses based interface and real-time statistics output calculated on a by-host basis. When starting it from a terminal, it starts collecting data and printing them on the screen in lines separated by host name pairs or IP addresses, showing the highest network usage. It refreshes the screen every 2 seconds.

iftop works by reading the host names out of the network packets traversing the interface and then associating them together.

iftop screenshotAfter identifying the host name, we can easily guess which program is generating this particular traffic — that’s why iftop must be run with root privileges.

Though ifstat can be used with complex filtering rules, running it without parameters gives enough statistics in most cases. iftop tries to listen on eth0 by default which might not exist at all. To specify an interface on which to listen, use the -i parameter: iftop -i wlan1, iftop -i eth1.

Pressing the h key while running will display a nice on-screen help, showing the commands that can be triggered interactively in running mode. Some other examples of key commands changing the default state:

Pros and Cons

Official packages have been available in both Debian (since Etch) and Ubuntu (universe) for a long time now.

atop: an ASCII full-screen performance monitor


Article submitted by András Horváth. We’re running out of articles! If you like Debian Package of the Day please submit good articles about software you like!

Every system administrator must be familiar with the top(1) command that shows the most active running processes in a Linux environment.

atop is different than that: it shows the most active processes not only related to CPU or memory, but disk and network usage are also calculated into the resource usage statistics. It also calculates incremental statistics, like VGROW (virtual size grow) and RGROW (resident set size grow). For example, if a process is leaking memory, its RGROW will always show positive values.

It can happen that a process starts using the hard disk of the computer making a heavy I/O traffic that takes less CPU resource though, still making the computer response slowly. With the atop utility we can discover this process easily.

atop screenshot For example, if we start the ls -R / command and then run atop, plus we type Shift+A after to get statistics about the processes that use the most system resources, we will see the ls command in the first place with a ‘D’ flag next to it —showing that its mostly used resource is related to Disk and not CPU. You can see this in the screenshot. atop highlights in red the resources if their usage is in critical limits. In the same example, both CPU and disk are being heavily used.

It is recommended to run atop with root privileges in order to see information from all processes. Moreover, when running with root privileges, atop can report about recently finished processes and their exit status.

atop refreshes the information every 10 seconds giving precise statistics. If you want it sooner, just press t to trigger a manual refresh. Pressing h key will give a detail-full on-screen help.

atop installs a daemon service by default and starts himself at boot time. The daemon stores system activity data in /var/log/atop.log. Using the -r command-line option, you can analyze the system activity recorded. Using keys t and T you move forward and backwards in time respectively. You can generate more system activity reports with the atopsar utility, included in the atop package. You don’t need this daemon if all you want is a real-time monitor.

atop can also report about network and disk utilization per process, but you need a patched kernel. Debian packages kernel-patch-atopacct and kernel-patch-atopcnt provide them. Sadly, they are not very well maintained. They were removed from Debian Etch and, in Lenny, the patches included only cover until version 2.6.24 of the Linux kernel (the same happens in Ubuntu). More up to date patches can be found in atop’s webpage. A guide on how to patch and rebuild the kernel is beyond the scope of this article.

You can find atop both in Debian (since Etch) and Ubuntu (since Dapper).

dstat: versatile tool for generating system resource statistics


Article submitted by András Horváth. We’re running out of articles! If you like Debian Package of the Day please submit good articles about software you like!

During my work with computers, I like to check the usage of system resources in my network. Sometimes a running process takes up too much CPU load, or the disk I/O goes too high. To get a clean picture of how much resources are being used by a client, I used ifstat, top(1) and iostat(1).

Since I have found out about dstat, I can cleanly check out all the system resources used by my computers. dstat prints all the different type of resources in separate columns on a single line, so it is very easy to see the system load globally.

Quoting from the website:

Dstat is a versatile replacement for vmstat, iostat, netstat, nfsstat and ifstat. Dstat overcomes some of their limitations and adds some extra features, more counters and flexibility. Dstat is handy for monitoring systems during performance tuning tests, benchmarks or troubleshooting.

Dstat allows you to view all of your system resources instantly, you can eg. compare disk usage in combination with interrupts from your IDE controller, or compare the network bandwidth numbers directly with the disk throughput (in the same interval).

Here is a sample output that I made on my computer:

screenshot of dstat

Though dstat gives global statistics about the currently used system resources, it might replace several tools in one. Mostly you would run it without any parameters, that makes it very easy to remember too :)

Pros (compared to other programs):


There are official packages available in both Debian and Ubuntu since very long time.

tellico: collection manager for books, videos, music, and a whole lot more


Article submitted by Dean Serenevy. We are running out of articles! Please submit good articles about software you like!

You’ve heard of book and movie collection organizers, but Robby Stephenson’s tellico is a general purpose collection manager. This application can be used to store information about arbitrary collections of whatever tickles your fancy. Tellico is available from the tellico package in Debian since Sarge and in Ubuntu since Dapper. Tellico is a KDE application, but works fine in other desktop environments.

The Basics

Like any good book or movie collection application, tellico presents the user with a multi-pane window that groups entries by some customizable criterion (I’ve grouped by director below), lists entries by some fields (customizable), and shows thumbnails.

Typical movie database

Selecting a list entry shows a more detailed view and a larger thumbnail. Clicking the image in this view launches your image editor.

Viewing an entry

Most of the built-in collection types include search sources to make adding new entries easy. Tellico has default search sources for (US, Japan, Germany, United Kingdom, France, and Canada), IMDb (movie database), z39.50 servers (bibliographic database), SRU servers (bibliographic database), PubMed (Medicine bibliography), (bibliographic database developed by a consortium of publishers), and some others. You can also write your own script that performs the search and returns entries in a supported format.

Searching for every Debian user's favorite movie

The search box will filter results based on regular expression queries. Complex filters can be named and will be saved with the collection file.

So many movies, so little time

Beyond Books and Movies

Tellico’s built-in list of collection templates is already quite impressive. It provides default templates for books, bibliographies, videos, music, video games, coins, stamps, trading cards, comic books, and wines. However, users are free to modify, add, or remove fields in these collections or even create custom collections with arbitrary fields.

For example, I keep a collection of hyperplane arrangement examples in a custom tellico file. Tellico happily keeps a fully group-able and search-able record of my coefficient fields, polynomials, and other fields.

Arrangements of hyperplanes

Editing a custom entry looks just like editing a standard record type. Fields are grouped by customizable categories.

Editing a record

Modifying the collection fields is wonderfully simple. Your fields may be any of several field types including: text, paragraph, choice, checkbox, table, URL, date, and image. Field upgrading is supported between compatible field types.

Fields may be auto-formatted as names or titles if you wish. You can also control whether the field should support auto-completion (using existing entries in your collection), multiple values, or whether the field should appear in the grouping combo box.

Editing the fields in a collection

The paragraph field type supports basic HTML markup (used here in my bibliography collection). The red letters are KDE’s spell-check attempting to be useful.

HTML markup in a paragraph field

I use the table field type in my recipe collection.

Using a table for an ingredient listing

Beyond the Application

Tellico can import and export data to and from many sources (Bibtex, CSV, PDF metadata, Alexandria, …). It can export your collections (even custom collections) to HTML and generate HTML reports in several styles. Tellico even has limited support for sending citations to Writer (though I have never used this feature).

Moreover, since Tellico stores its data in a fully documented XML file you can write XSLT or use any XML parser to transform the data file however you like.

Tellico supports loan tracking for any collection type. It also translated into more than ten languages.

The not so good

Tellico is somewhat laggy when loading hundreds or thousands of images from disk and occasionally when switching from thumbnail view to entry view. However, switching between entries is always fine and collections with fewer images are quick and responsive.


There are many special-purpose collection managers (most of which are listed on the tellico homepage), but tellico is one of the earlier general purpose managers. Some applications (such as GCstar) are becoming more general-purpose as they mature. Others (such as Stuffkeeper) are simply younger applications and are not yet stable. Tellico is a well-designed application and therefore can give even the special-purpose collection managers a run for their money.

atool: handling archives without headaches


Article submitted by Paulus Esterhazy. Last article of 2008! We hope 2009 will be full of good articles about Debian and Ubuntu packages. But we can’t do it without your help, please submit good articles about software you like!

Have you ever wrestled with tar(1) and other Unix archive tools? Wondered why every tool has its own arcane syntax and nonstandard behavior? And why on earth is it impossible to use unzip(1) to unpack multiple archive files?

The good news is that, in the Unix universe, you can be sure that someone else has asked himself the same question before and, perhaps, solved it. And so it is. The atool package supplies a set of commands that hide the complexities and lets you work with compressed file archives in a sensible manner.

Arguably the most useful commands included are apack, aunpack and als which as their names suggest create an archive, and extract or list its contents. In addition, acat uncompresses an archive file and outputs the file contents to standard output, whereas adiff compares two archives and shows the differences between their contents. These commands work as you would expect them to, and the author has stuck to the Unix conventions where possible.

The details, however, are worth a look. Some examples:

Note that for each atool command the archive file name precedes the names of the files to add or extract on the command line. Compare aunpack -e archive1.tgz archive2.tgz and aunpack archive1.tgz file.txt.

As you can see, atool commands automatically determine the file type by looking at the extension, but they resort to using file(1) if the simpler heuristic fails (you can override the guess using the -F switch). Most commonly used archive types are supported, including tar+gzip, tar+bzip2, zip and rar; a notable omission in the version available in Debian Sarge and Ubuntu 8.04 is the relatively new LZMA compression format (lzma(1)), but the active upstream author has already added support for it. You can also extract a .deb package by forcing the ar archiving method using the switch -F a.

Atool is blessed with the virtue of simplicity and its options are explained in the helpful manpage, which thankfully doesn’t follow the Unix convention of leaving out examples. Here’s one last gem from the documentation. If you frequently work with archives you get from the internet, you probably follow this procedure: Check archive type, check that the archive contains a top-level directory, unpack the archive, change to the directory extracted. These steps can be combined by adding the following function definition to your $HOME/.bashrc or $HOME/.zshrc:

aunpack () {
  TMP=$(mktemp /tmp/aunpack.XXXXXXXXXX)
  atool -x --save-outdir=$TMP "$@"
  DIR="$(cat $TMP)"
  [ "$DIR" != "" -a -d "$DIR" ] && cd "$DIR"
  rm $TMP

After adding these lines, you can “reload” the configuration file in your shell using source ~/.bashrc or source ~/.zshrc. Now running aunpack automatically changes the current directory to the one just extracted. Note that adding this snippet is necessary to achieve the desired behavior becausing a directory change is effectively useless unless it is performed in the context of the running shell.

Atool was written in perl by Oskar Liljeblad. It is available in all current Debian and Ubuntu releases. Besides atool, there are a few other tools that aspire to be the Swiss army knife of archivers, for example deco. These programs, however, are not as full-featured and mature as atool.

watch (from procps): execute a program at regular intervals, and show the output


Article submitted by Kris Marsh. If you celebrate Christmas, you can give to Debian Package of the Day a nice present: a good article! :-)

Ever wanted to monitor a directory every second and see differences in filesizes per second? Or for that matter, run any program once a second and highlight differences in time? Well you can, and you have been able to since forever as it’s installed by default on the majority of Linux distributions. watch is part of the procps package, available in Debian and Ubuntu.

Here is an example for checking a directory:

watch ls -l

To highlight changes in each program run, you can use the -d flag:

watch -d ls -l

And to run the command every N seconds, use -nN (by default, watch runs every 2 seconds):

watch -n1 -d ls -l

Finally, to make the diff highlighting “sticky” (i.e. stay on permanently after a change is detected), use: -d=cumulative

Other examples:

… you get the point. If you’re a system administrator, or just maintain Linux machines in general you’ll probably spot a bunch of places where you can use this straight away.

ferm: a straightforward firewall configuration tool


Article submitted by David A. Thompson. We’re running out of articles! If you like Debian Package of the Day please submit good articles about software you like!

Grumble… a postgresql server on an old Sun workstation isn’t visible to another old Sun workstation which (in theory…) is storing data on the postgresql server. The culprit was a misconfigured firewall. Rather than wading through a bunch of iptables commands, it seemed time to revisit the world of iptables front-ends on the off-chance there was an undiscovered treasure I’d missed on earlier visits. It turns out that there was one: ferm.

A revisit to firestarter, a straightforward GUI interface, ended when firestarter segfaulted and then, when started again, automatically started its firewall. Fortunately, I had altered the firestarter rule set and opened port 22 before firestarter segfaulted. Otherwise I would have been hundreds of miles away from an inaccessible server. After firestarter crashed again with a memory error, I decided to move on…

Like several other firewall front-ends, ferm is aware of the issues associated with working on servers hundreds of miles away from one’s physical location. Ferm starts with a default configuration which leaves the default SSH port open. Even better, ferm has a ‘try-before-you-buy’ feature (shared with a few other packages such as firehol): ferm --interactive activates a specific ruleset and, if a user response isn’t given within 30 sec, the system reverts to the previous ruleset.

Rather than using a GUI interface (e.g., firestarter, gnome lokkit, guarddog, kmyfirewall, knetfilter, …), ferm is configured via a text configuration file and can be controlled in a straightforward manner from the console. This may be a desirable feature for running on a box with limited disk space as GUI interfaces generally require the presence of X windows-related packages, often along with several KDE- or Gnome-related packages.

My main concern wasn’t with whether the application had a GUI or console interface but was with whether the application facilitated straightforward configuration of an iptables ruleset (translation: it shouldn’t take 20 min of reading documentation to get a simple firewall up). Other front-ends (e.g., shorewall and firewall builder) appear to be designed for complex rule-sets and require a substantial investment of effort to learn the syntax of configuration files or a ‘rule-making language’.

Along with ferm, another front-end, firehol seemed to also hit the mark with respect to having a straightforward syntax. Unfortunately, I found that firehol ended up being a time-consumer. In my experience, preparing a firehol configuration file which didn’t trigger multiple errors from firehol/iptables did not prove to be straightforward. In contrast, ferm gave me no such problems. A few tweaks of the default system configuration file —primarily opening a few ports—:

  proto tcp dport ssh ACCEPT;
  proto tcp dport http ACCEPT;
  proto tcp dport https ACCEPT;
  proto tcp dport postgres ACCEPT;

A simple /etc/init.d/ferm restart and things were running smoothly. Minimal effort, satisfying results…

The bottom line is that, for simple rulesets, using ferm is definitely easier than preparing iptables rules by hand. However, ferm can also be used to put together more complex firewall rulesets. It uses a reasonably powerful configuration language (including support for variables, function definitions, and arrays) which facilitates addressing more complex situations than the one I faced. To top it off, ferm seems to be under active development with bugs being squashed and features being added relatively regularly.

ferm has been available in Debian since Etch and in Ubuntu since Dapper.

Update, editor’s note: I’d like to add to this article my personal experience with ferm. Being a SysAdmin, I’ve been using netfilter/iptables for many years, after migrating away from ipchains; and the day I’ve found ferm my work changed completely. To me, being able to write your rules in clean structures, with blocks, variables and ‘functions’ is, by far, the most important feature of ferm. Thanks to this, I was able to write very complicated rule-sets, which were still readable to the point that the more junior SysAdmins, with little exprience on netfilter, have no difficult modifying it to open up ports or creating a new NAT rule.

Having said that, a warning to the newcomers to netfilter: there’s no tool that will magically allow you to write non-trivial rule-sets if you don’t understand the underlying stuff. You will be able to manage your home server, but if you want to do more serious work, you’ll need to really understand how TCP/IP works, and after that, read a lot about the details of routing and packet filtering in Linux. Having seen many people get frustrated by this, is better for you to know that this beast is quite tricky.

gcompris: educational suite for children


Article submitted by Raman Pandarinathan. We’re running out of articles! If you like Debian Package of the Day please submit good articles about software you like!

As a parent, have you ever wondered if kids can use FOSS to have fun and learn at the same time? As a teacher, have you ever wondered how to teach using a computer and FOSS tools? The answer is gcompris.

Gcompris combines fun and learning. Each activity is designed and developed with creativity in mind, and it has a nice interface for children.

My children have learned some computer basics like mouse usage, it has also helped them to understand basic arithmetic, colour identification and many other things. Tuxpaint is also included, so children can draw to their imagination.

Gcompris is a collection of over 90 educational activities for children. The activities are classified into mathematics, computer discovery, puzzles, strategy games, amusement activities, experimental activities and reading activities.


This has more than 20 activities classified into calculations, geometry and numeration. The activities are planned to teach basic arithmetic, geometry, money usage, etc.

For example, below you can see a screen shot of an activity that consist in finding series of numerical operations. Here the final answer is 15 and should be derived in two steps. The child has to select the numbers and operators from the top and form equations to get the final answer.

numerical operations


The puzzle activities include: drag and drop pieces to rebuild paintings, build a given shape with seven pieces, drive the crane and copy the model, tower of Hanoi, sudoku and the fifteen game.

Below is a screen shot of the Crane activity. The objects in the left grid should be placed in the same position as in the right side grid. The crane can be operated by clicking on the four arrows at the bottom.


Computer discovery

These activities help children learn basic skills of computers. Bellow is a screen shot of the keyboard activity in which the child has to push the ball to Tux. In order to do it, both shift keys should be pressed simultaneously, as if pushing the ball with the hands. If they are pressed simultaneously the ball will travel in a straight line and reach Tux, if not the ball will drift and fall into the sea.

keyboard activity

Strategy Games

Some of them are chess, arranging four coins in a row, bar game (don’t use the last ball), and oware (shown below).


Amusement Activities

The amusement activities include Tuxpaint, a simple football game, and an animation creator.

Below is a screen shot of the animation creator. If you want to create an animation, you first select an image and put it somewhere. Then take a snapshot using the camera icon. Now move it to the next position and take another snapshot. Repeat until you reach the desired position. Finally click on the film icon and you’ll see the animation.

Animation creation

Experimental activities

This section lets the children learn various things which require thinking in a series of steps. Things like the water cycle and operating canal lock lets the child learn systemic thinking.

Below is a screen shot of the activity about the water cycle. First the sun raises, water evaporates and clouds are formed. When you click on the cloud it starts raining and the rain fills the water tank. Operating the water inlet gives Tux a shower.

An example of the water cycle


This section is about learning several common things like colour names, clock reading, symmetry, etc. The activity shown in the screen shot is about identifying colours: you must identify the colour from the name displayed.

Identifying colors

Reading Activities

These are activities about learning the letters, words and matching them with images. Reading can be practised both horizontal and vertical.

Below is a screen shot where the child has to drag and drop the image onto the correct name.

Reading activity

As part of my Linux Users Group activity, I give talks and demos about FOSS frequently. Whenever I see kids and parents among the audience, the first thing I do is to demonstrate gcompris, and it’s a sure hit. The kids love it and parents realize its educational value.

Here are some photos of one such event held in a public park at Chennai, India.

gcompris grabs the attention of everyone   Kids playing gcompris   Kids love it. And parents too!

Pros and cons

There is another similar package named childsplay - also available in Debian.


gcompris was a part of Debian even in the Sarge days and it’s been in Ubuntu since Dapper (if not before!).

apticron: cron-script to mail impending apt updates


Article submitted by Justin Hamade. Guess what? We still need you to submit good articles about software you like!

Always wondering if your debian server needs an update? Apticron is a simple script that will email you when new versions of any package installed are available. This is very helpful for security related issues. The e-mail shows what has changed in the new version, obtained using apt-listchanges. It also tells you the repository where it comes from (ie. etch-security) and the urgency of the release (ie. high).

The configuration files are located in

By default emails are sent to root. If you want root emails sent to yourself you can add your email to root in /etc/aliases and run newaliases.

apticron will run daily and let you know each day if there is any packages that require updating. Here is an example of one of its e-mails:

apticron report [Sun, 08 Jun 2008 06:48:58 -0700]

apticron has detected that some packages need upgrading on:

      [ ]

The following packages are currently pending an upgrade:

      linux-image-2.6.18-6-686 2.6.18.dfsg.1-18etch5

      linux-image-2.6-686 2.6.18+6etch3


Package Details:

Reading changelogs...

--- Changes for linux-latest-2.6 (linux-image-2.6-686) ---

linux-latest-2.6 (6etch3) stable-security; urgency=high

  * Update to 2.6.18-6.

 -- dann frazier   Tue, 22 Jan 2008 22:47:16 -0700

linux-latest-2.6 (6etch2) stable-security; urgency=high

  * The arm build of 6etch1 is missing from 4.0r1.

    Since the latest security update of linux-2.6

    requires this new ABI, and an updated linux-latest-2.6 facilitates

    migration to the new ABI. Closes: #438617

 — dann frazier   Mon, 20 Aug 2007 17:01:18 -0600

linux-latest-2.6 (6etch1) stable; urgency=high

  * Update to 2.6.18-5.

 — dann frazier   Thu, 24 May 2007 17:05:09 -0600


You can perform the upgrade by issuing the command:

      aptitude dist-upgrade

as root on

It is recommended that you simulate the upgrade first to confirm that the
actions that would be taken are reasonable. The upgrade may be simulated by
issuing the command:

      aptitude -s -y dist-upgrade



cron-apt is a similar tool that can perform any action apt-get and aptitude can do. For example, it can automatically perform an upgrade when new packages available. However this is not recommend and can be a security risk.

apticron has been available in Debian since (at least) Etch and in Ubuntu since Dapper.

remind: a text based agenda and todolist manager


Article submitted by Olivier Schwander. Guess what? We still need you to submit good articles about software you like!

There are lots of different tools for managing your time: Mozilla has a standalone solution: Sunbird and another one based on Thunderbird: Lighting, KDE has Korganizer, and Gnome has the young gnome-agenda and the very popular Evolution, and we must not forget the most famous web based tool: Google Calendar.

All these applications are based on a graphical user interface, and use either iCalendar or the older vCalendar as the data formats.

What about people who prefer console based interfaces and want to edit the data with their favourite text editors? The best solution is remind: it uses an easy but powerful language for describing events. A simple example, this event happens every Tuesday at 13:00 and lasts one hour:

REM Tue AT 13:00 DURATION 1:00 MSG Group meeting

You always forget your appointments? Remind can help you:

REM Tue +1 AT 13:00 +120 *5 DURATION 1:00 MSG Group meeting

It will begin to bother you one day before the date, and will display warnings two hours before, every five minutes. The language is really powerful, and is able to express arbitrary complex date calculations (first Monday of a month, excluding holidays, moon phases). To look at the events of the day, simply run:

$ remind
Reminders for Thursday, 10th July, 2008 (today):

Write Debaday post today at 3:00pm

Remind can import and export iCalendar files, and generate HTML and Postscript from your calendar. You can choose to have reminders sent by email, or showed by a pop-up window but you’ll need to start remind with some special arguments for that, see the Remind FAQ at the 43folders wiki which has a lot of useful tips for remind.

You can also use it through user-friendly interfaces: tkremind, a Tk based front-end, but it hides some of the power from remind; and wyrd, a curses based interface which eases the editing of events and lets you use all of the power of remind.

tkermind: Tk front-end wyrd: curses front-end


Remind has been available in Debian since Sarge (perhaps even longer), and in Ubuntu since Dapper.

Apt-P2P: peer-to-peer downloading of Debian packages


Article submitted by Cameron Dale. Guess what? We still need you to submit good articles about software you like!

Do you want to help out the Debian (or Ubuntu) project with some mirror bandwidth but don’t know how? Do you want to contribute somehow to Debian’s infrastructure, but you’re not a coder? Tired of getting slow download speeds when the mirrors are overloaded after a new release? Then Apt-P2P is for you.

After installing the apt-p2p package and making some minor changes to apt’s sources, all the files you download with apt (or aptitude, synaptic, gnome-apt, etc…) will be shared with other users, and any files you download will use other users (peers) to download from. However, if no other users have the file you want there’s no need to worry, Apt-P2P will happily fall back to downloading directly from the mirror so your download will not fail.

How it works

Apt-P2P is a daemon that runs in the background, responding to any requests from apt for files to download, and sharing any downloaded files with other users. The sharing is all done using HTTP, so it operates as both a server for the requests from apt and other peers, and as a client to download from other peers and mirrors. Also, if you go to http://localhost:9977/ in your browser on the machine Apt-P2P is running on, you will get a nice statistical display of what it is doing.

The main operation of Apt-P2P is the maintenance of a Distributed Hash Table (DHT) used to find and store peers to download from for each file. Whenever you download a file, apt-2p will first lookup the SHA1 hash of the file in the DHT. If it is found and has peers listed, then the downloading will occur from the peers (if there are only 1 or 2 peers, the mirror is used as well to speed up the download). If it is not found then the file is requested directly from the mirror. Once the download is complete, a new value is added to the DHT using the SHA1 hash of the file as the key, and including your contact info, so that other peers can then find you to download the file from.

That’s just a brief overview, but there are many hidden details that make things go smoother. For example, for larger files the SHA1 hashes of pieces of the file are stored in the DHT as well, which allows downloaders to break up large files among several peers to get better download speeds (similar to BitTorrent). For more information, you can go to the Apt-P2P home page:

Comparison with other P2P programs

Other than DebTorrent, there aren’t any other peer-to-peer downloaders available for apt. There was apt-torrent, but it was never packaged in Debian, and now seems to be dead (no updates in 18 months). Comparing Apt-P2P with DebTorrent, Apt-P2P:


Apt-P2P is available in testing (lenny) and unstable (sid), and will be available in Intrepid for Ubuntu. It can be installed by aptitude install apt-p2p.

First, it is VERY important to set up port forwarding if your machine is behind a firewall or router/NAT. The default port you need to forward is 9977, both UDP and TCP. More information on how to determine if you are reachable can be found here.

Setting up apt to use Apt-P2P as a proxy is easy, especially if you have used other proxy software (e.g. apt-proxy, apt-cacher, approx) in the past. The configuration change is the same, simply adding a localhost:9977/ to the front of the entries in your /etc/apt/sources.list file. For example, if you previously had this:

# Official
deb etch main contrib non-free
deb-src etch main contrib non-free

# Security Updates
deb etch/updates main contrib non-free
deb-src etch/updates main contrib non-free

# Unofficial
deb etch main contrib non-free restricted
deb-src etch main contrib non-free restricted

# Backports
deb etch-backports main contrib non-free
deb-src etch-backports main contrib non-free

Then, if you only want to share the official and backported packages, you would change it to this:

# Official
deb http://localhost:9977/ etch main contrib non-free
deb-src http://localhost:9977/ etch main contrib non-free

# Security Updates
deb etch/updates main contrib non-free
deb-src etch/updates main contrib non-free

# Unofficial
deb etch main contrib non-free restricted
deb-src etch main contrib non-free restricted

# Backports
deb http://localhost:9977/ etch-backports main contrib non-free
deb-src http://localhost:9977/ etch-backports main contrib non-free

Then, run an apt-get update and start installing packages.

The apt-p2p package is fairly new, so it’s available only in the testing and unstable distributions of Debian, and in the just released Intrepid Ibex, from Ubuntu.

Synfig: the free software alternative for 2D animation


Article submitted by Carlos López González. Guess what? We still need you to submit good articles about software you like!

Synfig logoFor a long time 2D animation software has been dominated by proprietary software. Other common multimedia tasks such as video playing, editing, raster and vector 2D graphics and 3D graphics or animation are currently being covered properly by free software / open source (FOSS) but there wasn’t enough FOSS alternatives for computer aided 2D animation.

Synfig increases the 2D animation software available with a brilliant and professional piece of software.

Synfig was primary developed by Voria, an animation company founded by Robert Quattlebaum who was also the lead software engineer of the software. In 2004 Voria shut down and was discontinued. Fortunately Robert decided to license Synfig under the GNU GPL and turned it over the free software community to develop and use.

Synfig has no comparable alternative software in the FOSS world. Unlike other FOSS that can be used to produce 2D animation (ktoon, pencil) in the “traditional” frame to frame animation, the Synfig workflow is based on vector primitives and their interpolation in time. This drastically reduces the amount of work to produce professional animations because the manual tweening from pose to pose is eliminated, without the need to draw each frame individually.

But this is not the only feature of Synfig…

In Synfig, every primitive or transformation is parametrically generated, which gives extreme flexibility during animation and doesn’t restrict artistic expression. Also, those parameters are calculated on a float point basis obtaining smooth results at any size and any frame rate. Additionally it is possible to link any compatible parameter between any two or more different layers, even placed in different canvases or even convert most of the parameters into a mathematically calculated formula, this allows Synfig to produce particle effects, path based brushes, vectors dynamically linked to any place of a curve and other interesting stuff.

In Synfig there are an extensive set of primitives and transformation layers: Blurs (3), Distortions (6), Colour Filters (5), Fractals (2), Geometry Primitives (8), Gradients (6), Transform (3), Stylize (2) Text, Plant, Duplicate, etc. which provide a complete set of tools in the artist’s hand.

Finally in Synfig is easy to reuse libraries, group scattered layers to manage them like a single one, there are 22 different blend methods… If you want to dig synfig visit its web page. You can find there more info about the usage, the features and its development. Behind it, there is a small but friendly community.

Synfig UI

All those features make Synfig a great application but it has also some weak points: there are some missing features not completely developed like the support of sound or saving and loading colour palettes.

On the other hand although the interface of Synfig-Studio can be strange for the first contact (most of the actions are found in the right click context menu), once you understand how it works it is very efficient. I’ve been working with it during last year and I’m completely in love with it. I only miss a quick render engine for editing animation because the current one is quite slow for a normal workflow.

Although it is relatively young it has definitely turned into a program that any 2D artist must have on their GNU/Linux box. It’s been available in Debian since Lenny and in Ubuntu since Feisty.

rdiff-backup: Easy incremental backups from the command line


Storage is becoming cheaper and cheaper: you can find hard drives that cost less than a dollar per GiB. Buying an external hard drive to make backups (or even having a backup server) is a must if you value your work and what you have stored in your computer. However, doing backups should be easy enough to be done on a regular basis. The more automated, the better.

So, I find no excuse not to do regular backups and looked for a tool easy-to-use but powerful. rdiff-backup is a python script that helps doing local and remote incremental backups. To backup your $HOME to an external hard drive mounted in /media/backup simply do:

$ rdiff-backup $HOME /media/backup/home_backup

If after some days you want to backup your new files, run the same command to update the backup.

Now, in /media/backup/home_backup you have an exact copy of your home as it was when you did the last backup. If you want to restore a directory, you can just copy it:

$ cp -a /media/backup/home_backup/src/myprogram ~/src/

Which is equivalent to:

$ rdiff-backup --restore-as-of now /media/backup/home_backup/src/myprogram ~/src/

Of course, you can restore previous versions of the file. For example, to restore the source of myprogram as it was a mounth ago:

$ rdiff-backup --restore-as-of 1M /media/backup/home_backup/src/myprogram ~/src/

You can see all the incremental backups you have done executing:

$ rdiff-backup --list-increments /media/backup/home_backup

If you run out of space in your backup device and you’re sure you don’t need the backups you made three years ago, you can remove them with:

$ rdiff-backup --remove-older-than 3Y /media/backup/home_backup

rdiff-backup works exactly the same with remote directories. You need to have ssh access and rdiff-backup must be installed in the remote(s) machine(s). Note that in any example above, you can change the local directories to remote ones, so you can backup a remote machine locally, or do a backup of this machine to a remote backup-server. For example, say is your backup server. You can backup regularly using:

$ rdiff-backup local-dir/

If you use RSA or DSA authentication, you can even put that in a cron job.

See rdiff-backup documentation and other examples to discover all the functionality of this package.

Similar packages

Frontends for rdiff-backup:

There are a ton of other programs to make backups. I will list here some of them (but this list is no where near complete) that are similar to rdiff-backup:




rdiff-backup has been available in Debian since Sarge (perhaps even longer), and in Ubuntu since Dapper.

memstat: Identify what is using up virtual memory


Article submitted by Todd Troxell. Guess what? We still need you to submit good articles about software you like!

This tool lets you discover what libraries and programs are using up memory. It is very simple to use. Here is an example of its output (the -w makes memstat not truncate lines at 80 columns):

gaius% memstat -w
    256k: PID  5465 (/lib/
    368k: PID 13019 (/var/db/nscd/passwd)
   3352k: PID 13914 (/usr/lib/gconv/gconv-modules.cache)
      8k: /usr/bin/memstat 5465
     12k: /lib/ 13019
    256k: /lib/ 13914
     88k: /lib/ 5465 13019
    256k: /lib/ 13019
   1212k: /lib/tls/ 13914
     32k: /lib/tls/ 13914
     24k: /lib/tls/ 13914
     12k: /lib/tls/ 13914
    144k: /lib/tls/ 13914
     76k: /lib/tls/ 13914
     40k: /lib/tls/ 13914
     36k: /lib/tls/ 13914
     60k: /lib/tls/ 13914
     28k: /lib/tls/ 13914
     88k: /lib/ 13914
   1212k: /lib/tls/ 5465 13019
     12k: /lib/tls/ 13019
    144k: /lib/tls/ 13019
     76k: /lib/tls/ 13019
    480k: /bin/zsh-beta 13019
    212k: /var/db/nscd/passwd 13019
    788k: /usr/bin/irssi 13914
    148k: /usr/lib/ 13019
    176k: /usr/lib/perl5/auto/Irssi/ 13914
     80k: /usr/lib/perl5/auto/Irssi/Irc/ 13914
     80k: /usr/lib/perl5/auto/Irssi/UI/ 13914
     12k: /usr/lib/gconv/ 13914
     24k: /usr/lib/gconv/gconv-modules.cache 13914
     76k: /usr/lib/ 13914
    584k: /usr/lib/ 13914
   1128k: /usr/lib/ 13914
     12k: /usr/lib/ 13914
   1240k: /usr/lib/i686/cmov/ 13914
    248k: /usr/lib/i686/cmov/ 13914
      8k: /usr/lib/zsh-beta/4.3.2-dev-1/zsh/ 13019
     24k: /usr/lib/zsh-beta/4.3.2-dev-1/zsh/ 13019
     56k: /usr/lib/zsh-beta/4.3.2-dev-1/zsh/ 13019
    116k: /usr/lib/zsh-beta/4.3.2-dev-1/zsh/ 13019
    196k: /usr/lib/zsh-beta/4.3.2-dev-1/zsh/ 13019

This output lists many libraries and processes loaded into memory and their sizes. First of all, processes and the size of their private memory are listed. This does not include their shared memory. Afterwards, shared objects are listed, and finally the total is listed.

In case you are wondering, shared object are libraries like /lib/tls/ that are shared across all processes that need them to save memory and make things run faster. Instead of loading this library into memory for every process, Linux loads one copy and uses this for any process that wants to use the library. Therefore, you may notice that these values sometimes do not add up to the amount of memory you see used on your system. If you look at ps(1) you will see two columns related to memory: RSS and VSZ. For each process, RSS is the amount of memory used by the process, and VSZ is the amount used counting shared objects. To add up memory correctly, you must count each shared object only once for the system.

It is possible to output per user statistics by running memstat as an unprivileged user. When run as root, memstat will list everything on the system.

Memstat works by scanning files in /proc and then searching for binaries in the paths listed at /etc/memstat.conf. The default file should be sufficient for most cases. If you have libraries or binaries in a non-standard place, you may need to modify this file to get accurate results.

Memstat was authored by Joshua Yelon. It is available in all current Debian and Ubuntu releases.

smartmontools: control the health of your hard disk


Article submitted by Noel David Torres Taño. Guess what? We still need you to submit good articles about software you like!

One of the packages I manually install in every new installation is smartmontools. I’ve some expertise in managing computers and networks, and it is a fact that pirate hackers and software bugs are not the main cause of problems in small and medium installations. Hardware is.

Thus, you have hardware that can fail, and Murphy says that if it can fail, it will. The point is not to avoid hardware failures, which would be impossible, but to detect them early or even prevent them.

Particularly for hard disks, the tool in charge is smartctl from the package smartmontools. IDE disks (if they’re not of the age of dinosaurs) have an integrated self-testing tool called SMART which means “Self-Monitoring, Analysis and Reporting Technology”. Modern SCSI disks have it too if they’re SCSI 3 or newer. It happens that inside the disk chipset there are routines to check parameters of disk health: spin-up time, number of read failures, temperature, life elapsed… And all of those parameters are not only registered by the disk chipset, but they have designated security limits and both parameters and limits can be checked by software who access the disk using the appropriate I/O instructions.

And that software is smartctl, a piece of the smartmontools deb package. Of course, since they access the disk in a raw way, you need to be root to use these commands.

smartctl can ask the disk for its smart identification:

# smartctl -i /dev/sda
smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is

Model Family:     Fujitsu MHV series
Device Model:     FUJITSU MHV2060BH
Serial Number:    NW10T652991F
Firmware Version: 00850028
User Capacity:    60,011,642,880 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   7
ATA Standard is:  ATA/ATAPI-7 T13 1532D revision 4a
Local Time is:    Mon May 12 02:39:31 2008 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

More interesting, smartctl can ask the disk for its parameter values:

# smartctl -A /dev/sda
smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
  1 Raw_Read_Error_Rate     0x000f   100   100   046    Pre-fail  Always       -       124253
  2 Throughput_Performance  0x0004   100   100   000    Old_age   Offline      -       18284544
  3 Spin_Up_Time            0x0003   100   100   025    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   099   099   000    Old_age   Always       -       1199
  5 Reallocated_Sector_Ct   0x0033   100   100   024    Pre-fail  Always       -       8589934592000
  7 Seek_Error_Rate         0x000e   100   087   000    Old_age   Always       -       1761
  8 Seek_Time_Performance   0x0004   100   100   000    Old_age   Offline      -       0
  9 Power_On_Seconds        0x0032   079   079   000    Old_age   Always       -       10866h+57m+47s
 10 Spin_Retry_Count        0x0012   100   100   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       1199
192 Power-Off_Retract_Count 0x0032   099   099   000    Old_age   Always       -       283
193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       6953
194 Temperature_Celsius     0x0022   100   100   000    Old_age   Always       -       45 (Lifetime Min/Max 14/58)
195 Hardware_ECC_Recovered  0x001a   100   100   000    Old_age   Always       -       62
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       459276288
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x000e   100   082   000    Old_age   Always       -       22371
203 Run_Out_Cancel          0x0002   100   100   000    Old_age   Always       -       1533257648465
240 Head_Flying_Hours       0x003e   200   200   000    Old_age   Always       -       0

As you can see, there are some attributes marked as “Pre-fail”. If any of these attributes goes beyond its threshold, the disk is about to fail in hours, maybe minutes.

Even if there are more options to smartctl , the last ones I will comment here are -a and -t.

smartctl -t launches a disk test. It needs a parameter indicating the type of the test, and in the longest case it can last for tens of minutes and will check the electrical and mechanical performance as well as the read performance of the disk, going through all its surface. smartctl -a, in its turn, shows all available information about the disk, including self testing results. Since tests will span minutes or tens of minutes, we can not see them happening. All what we will get when launching tests is like:

# smartctl -t long /dev/sda
smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is

Sending command: "Execute SMART Extended self-test routine immediately in
off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in
off-line mode" successful.
Testing has begun.
Please wait 41 minutes for test to complete.
Test will complete after Mon May 12 05:44:03 2008

Use smartctl -X to abort test.

Here, we’re being informed that (maybe) we will get a slightly lower performance on the disk for the next 41 minutes, since the test has started. It is completely background, or better ‘underground’, since it does not happen under the kernel control at all: everything is happening internally to the disk, and all what we can get is the result.

smartctl -a, in turn, show a very large amount of SMART information about the disk: almost all stored SMART information parsed for us. It is usually better to use a more specific switch, see the man page for details.

Finally, I want to comment that there is a daemon in the smartmontools package, smartd, who can take care of doing tests for you. It works by running smartctl in a periodic way (typically every 30 minutes) and logging all errors and parameter value changes to the syslog. The default configuration in Debian will also mail root if there’s any problem detected. I will not explain here about it, because I want you to read its (short and easy) documentation, but remember that in order to use it you must enable it in /etc/default/smartmontools.

The smartmontools package has been available both in Debian and Ubuntu since a long time ago.

logstalgia: pong-like apache log viewer


Article submitted by Andrew Caudwell

Logstalgia (inspired by glTail) is a website traffic visualization tool that replays or streams Apache access logs as a pong-like battle between the web server and an unrelenting army of requesting hosts. It is rendered using OpenGL, so you’ll need a 3D accelerated video card to run logstalgia.


Requests appear as colored balls (the same color as the host) which travel across the screen to arrive at the requested location. Successful requests are hit by the pong paddle while unsuccessful ones (such as 404s) are missed and pass through.

The paths of requests are summarized within the available space by identifying common path prefixes.

Related paths are grouped together under headings. For instance, by default paths ending in png, gif or jpg are grouped under the heading Images. Paths that don’t match any of the specified groups are lumped together under a Miscellaneous section. Groups can be customized to the page layout of your website fom the command line by specifying a heading, an associated regular expression and a screen percentage.

The simulation can be paused at any time by pressing space. While paused, individual requests can be inspected by passing over them with the mouse.

Logstalgia can read from either a file or standard input. To replay an apache log just run:

logstalgia /var/log/apache/access.log

You can combine Logstalgia with other tools like tail and ssh to watch the access.log of your web server in real time. eg:

ssh tail -f /var/log/apache/access.log | logstalgia -

Check out a video of Logstalgia in action:

Logstalgia is available in Debian since Lenny and in Ubuntu intrepid. A version of the package for Debian Etch is available on the homepage.

ddclient: getting access to home servers despite having a dynamic IP


Article submitted by Toni Zimmer.

There will be a day when you need access to your Debian box from another place than home, for example to get files from your home server with scp or if you’re running a webserver, an irc proxy, a ftp server, a mail server…

Most likely your ISP gives you a dynamic IP address. This problem can be solved by getting a static DNS name, so you can connect to your home even if your IP keeps changing. First of all you have to create an account with your favourite dyndns provider. I use but there are others, such as, or You can use others if you know ddclient supports its protocol.

There you can specify the hostname (combined with a domain name) for your computer. You can enable mail routing if you want to setup a home mail server.

When you install ddclient you will be asked for the dyndns service provider where you created your account. After that you must enter the complete (or fully qualified) domain name of your computer (something like and your account name (including the password, which will be stored in plaintext in /etc/ddclient.conf!). Now you have to chose the interface that connects you to internet. ddclient will get your IP address from there, so you shouldn’t be behind a NAT. Afterwards you will be asked if you want to start ddclient when connecting with PPP and if you want ddclient to run on system startup or not (probably you will use the first or the second choice). If you choose to run ddclient on startup, you can enter a delay between address checks (default are five minutes, so every five minutes your system will tell your current IP address to your dyndns service provider).

Your settings are stored in /etc/ddclient.conf and look like this:

# Configuration file for ddclient generated by debconf
# /etc/ddclient.conf

use=if, if=eth0

If everything is okay, wait a couple of minutes for the DNS information to populate and then you will be able to do something like ssh or w3m

ddlient is available in Debian since Sarge and in Ubuntu (universe) since Dapper.

FlameRobin: A GUI to Administer Firebird/Interbase SQL servers


Article submitted by Anton Kavalenka.

Firebird SQL server is popular because it is free, open, lightweight and secure. Firebird is based on the Interbase SQL server, and can be accessed by the same client libraries.

FlameRobin FlameRobin is a X-platform GUI application that makes the life of Firebird/Interbase admins easier. It’s a very light-weight solution (implemented with wxWidgets) as opposed to Tora, which tries to be universal, but is very huge and takes a while to load. FlameRobin starts almost instantly, but being lightweight doesn’t mean to be poor in features. Some of them are:

Using Firebird and FlameRobin included in Debian it is possible to backup a database from Windows, restore it on Linux and take off SQL server load from workstation. This is the only way to move database between 32-bit and 64-bit architecture. It is a feature of Firebird (or maybe bug). On the same architectures database files can be simply copied.

SQL EditorThe SQL Editor has syntax highlighting and auto-completion. SQL statements can be entered, load, saved and executed. You can prepare a query and view the execution plan without executing it.


FlameRobin is available in Debian since Etch and in Ubuntu since feisty.

mythtv: A personal TV recorder


Article submitted by Karl Erlandson. Do you think there are better alternatives to the packages posted here? Help us! Submit good articles about software you like!

No one likes to sit at home and wait for their favorite show to come on anymore and many have turned to buying hardware to record them for later viewing. Popular solutions to this problem include the expensive and proprietary TiVo and cable/satellite boxes with built-in TV recorders.

MythTV aims to solve these problems without the need to rent a cable box ($15/month) or buy a TiVo (~$200). An older computer can be used and all that needs to be purchased is a simple TV card, which can be found for under $30 on eBay. An HDTV card will cost you more, and will also require a more recent computer. If your TV card doesn’t come with a remote control, a controller will have to be purchased separately.

As of last year, the TV guide info used for MythTV in North America is no longer free. Unfortunately, if you live in the USA or Canada, you now have to pay a subscription fee if you want to access the TV guide info, but the cost is negligible at $20/year and going down with every new subscriber. There is a free trial period available. If you live in another country, you may find TV listings for your country in XMLTV.


MythTV main menuWhat MythTV gives you that those other boxes don’t is freedom, it’s open source so you can do whatever you want with your machine. For example, you can set it to automatically skip commercials (a feature that surprisingly works!).

MythTV can be divided into two main programs, the Backend and the Frontend. The Backend refers to the program that actually records programs and must be installed on a computer that has a TV tuner. The Frontend program allows you to view content from the Backend. Importantly, the Frontend program can be installed on the Backend or as a stand-alone program on any computer. With a Frontend only install, you can watch what you’ve recorded in any room of your house. They will also have the ability to watch live TV (with options to pause, rewind, fast forward).

MythTV also offers many recording options with the ability to record a show daily, weekly, once, only in a certain timeslot, etc. Since it is open source, various improvements have been added. An interesting plugin was developed that overcomes the problem of recording sports when games go on longer than scheduled. This program actually checks the web to see if the game it is recording has gone into extra time and adjusts the recording time to end later.

Mythtv browsing through the video library

MythTV will organize your music and video libraries and allow all that downloaded content to be played on your home entertainment system. Album and DVD art can be automatically downloaded from IMDB. I have to say that the music system could use a lot of work.

MythTV web interfaceOther options include the ability to schedule your recordings over the internet, watch your shows over the internet, display weather alerts, and notify you of new emails on screen.


MythTV is not available as a Debian package due to licensing/legal issues, but it is on debian-multimedia. To enable this repository, add this to your /etc/apt/sources.list:

deb stable main 

(instead of stable, put “testing” or “unstable” if you use that flavors of Debian). Now run apt-get update. The MythTV wiki provides instructions to install it in Debian stable (Etch), Debian unstable (Sid) and Ubuntu. The Ubuntu community has its own set of installation instructions. I found the KnoppMythWiki very useful in setting up my machine. They also offer a MythTV distribution.

mrxvt: Fast, light multitabbed terminal emulator


Article submitted by Hugo Carrer.

As any other Debian user I love writing obscure commands on my terminal. I love too having so many open terminals that I have to come up with a special system to find the one where my favorite obscure command is running on.

To be able to enjoy this I need a very fast multitabbed terminal emulator: mrxvt.

Some of the things I like the most about mrxvt are for example,

After installing it would look something like this:

a just installed mrxvt

You can change this rather old fashioned look by copying the example config file from
And placing it in ~/.mrxvtrc

The file is full of comments helping you with the meaning of each option. Of course you can find all available options in the man page. Some useful shortcuts are Ctrl+Shift+t to open a new tab and Ctrl+Shift+m to show the menu.

So, after playing, trying and tweaking for a little while you can get a futuristic look for your terminals. Like this one of me sketching this article on an emacs session inside mrxvt (Note all those beautiful tabs up there)

mrxvt in action

Downsides? Well it depends on the kind of user,

To sum up, it’s the perfect application to config during those boring rainy weekends and then show off to your friends at work.

mrxvt is available in Debian stable and in Ubuntu too.

DevTodo: a reminder/task program aimed at developers.


Article submitted by Raman Pandarinathan.

DevTodo is a simple command-line-based package to keep todo lists. Lists are prioritized and hierarchical. Each task in the list has a priority (very high, low, medium etc.) and a given task can be linked to another todo database, making the list hierarchical. The lists are stored as an XML file (.todo) in the current directory, so if you manage multiple projects, you can have different todo lists and DevTodo will update the information based on your current working directory.

As the Todo list is stored in an XML file, you can use an XSLT template to export it to other formats. In Debian, you can find templates to export to HTML and PDF in /usr/share/devtodo.

Managing your todo lists

DevTodo in action

Basic commands are:

With the use of some small shell scripts, when you cd into a directory with a .todo in it, DevTodo can display the Todo items for that directory. There are scripts for bash and tcsh in /usr/share/doc/devtodo/examples. To enable it under bash, add this to your .bashrc:

if [ -f /usr/share/doc/devtodo/examples/ ]; then
  . /usr/share/doc/devtodo/examples/

Pros and Cons


DevTodo is available in Debian since Sarge and in Ubuntu (universe) since Dapper.

EasyTag: a graphical interface to managing your music files’ tags


Article submitted by Dominique Cimafranca.

EasyTag is a graphical utility to edit the descriptive ID3 tags for your music files. One will think primarily of MP3 files, but it also does other formats, such as Ogg, FLAC, MP4/AAC, MusePack, Monkey’s Audio files and WavPack files (APE tag).

EasyTag main windowEasyTag’s screen real estate is divided into three windows. The left window shows you the directories of your file system. The middle window shows you the music files in your currently selected directory. The right window is further subdivided into top and bottom information boxes: the top shows you the technical information about the file (bit rate, frequency, mode, size, and time), and the bottom shows you the actual ID3 fields.

The ID3 fields are pretty complete as they let you fill in all the relevant info you could want to put in, e.g., title, artist, album, year, genre, personal comments. You can also attach a photo to the file.

Once you start up EasyTag, it will search your home directory for any and all music format files. This behavior is either helpful or annoying; if it’s the latter, you can simply stop the search and go to the directory of your choice. It will resume the search from there.

Tagging files

There are three ways to tag music files with EasyTag:

Manual tagging is pretty much self-explanatory (and tedious.)

The mask editor dialogAutomatic Fill Tag relies on the filenames of your music files to automatically fill in the ID3 entries. EasyTag has a couple dozen formats that cover almost every imaginable case.

Automatic CDDB tagging only works if files are sorted per album and if the actual CDDB entry exists. You don’t actually have to have the CD on hand: you can search for the album ID through EasyTag. Once found, it will label the files for you.

All in all, a great way to manage and maintain information on your music files.


EasyTag is available in Debian since at least Sarge and in Ubuntu (universe) since Dapper.

aria2: high speed command line download utility


Bonus article this week, submitted by Anthony Bryan and Tatsuhiro Tsujikawa.

If you’re a frequent downloader and comfortable on the command line, then you need to try out aria2. aria2 is a cross platform download utility, similar to graphical download managers except that it uses less system resources.

aria2 has a number of invaluable features such as download resuming, BitTorrent and Metalink support, segmented downloading, downloading a single file from one or multiple servers (including integrated BitTorrent and HTTP/FTP transfers), downloading many files at the same time, automatic error recovery/repair (BitTorrent and Metalink downloads only), etc.

aria2 is a command line application, but don’t let that scare you off. You can use aria2fe, a graphical front end, if that makes you more comfortable.

Keep in mind that aria2 is more for heavy downloading, and if you want a webspider then wget would be a better choice.

How to use it

The easiest way to invoke aria2 is by typing aria2c URL/fileName

$ aria2c http://host/image.iso

The URL can be either a regular URL to a file, a URL to a .torrent file, or a URL to a .metalink file. For BitTorrent and Metalink downloads, there are extra options available such as throttling upload speed, only downloading selected files, changing listening ports, and seed time and ratio. To pause a download, press Ctrl-C. You can resume the transfer by running aria2c with the same argument in the same directory.

Downloading identical files from multiple sources

aria2 supports multiple URLs for the same file. You can specify them on the command line (space separated) and aria2 will download from multiple URLs at the same time.

$ aria2c http://host/image.iso http://mirror/image.iso

This command will split the download between multiple servers. aria2 can even download the same file from BitTorrent and FTP/HTTP at the same time, while the data downloaded from FTP/HTTP is uploaded to the BitTorrent swarm.

Repairing damaged downloads

aria2 can repair downloads with errors by using the information in .torrent or .metalink files.

$ aria2c -M test.metalink --check-integrity=true

The -M option specifies a local file called test.metalink to get the information to repair the download.

Parameterized URLs

You can specify set of parts. The following command will download part of the same file from 3 servers, don’t forget to escape the parameter to avoid shell expansion.

$ aria2c -P 'http://{host1,host2,host3}/file.iso'

You can specify numeric sequence using []. This command will download image000.png through image100.png from the same server.

$ aria2c -Z -P 'http://host/image[000-100].png'

The -Z option is required if the all URIs don’t point to the same file, such as the above example.

Other options

aria2 has a lot more options, you can for instance use:

aria2 has many other options. To read the man page, type:

$ man aria2c


aria2 is available on most Linux distributions. Official Debian and Ubuntu package are available:

Community & developers

aria2 is actively maintained and developed by Tatsuhiro Tsujikawa. Bug reports, feature requests, and forums are found on SourceForge.


email-reminder: Never forget a birthday or an anniversary again!


Article submitted by François Marier. Guess what? We still need you to submit good articles about software you like!

Email-Reminder is a simple tool to define events for which you want to receive a reminder by email. These reminders (sent out daily by a small cronjob) can be either on the day of the event and/or a few days beforehand.

Events can be:

Sample Reminders

Here is an example of what you get in your inbox for an upcoming birthday:

From: Email-Reminder
Date: Tue, 12 May 2007 04:00:22 -0400 (EDT)
To: Francois Marier <>
Subject: Trent Reznor’s birthday

Hi Francois,

I just want to remind you that Trent Reznor is
turning 42 in 5 days.

You can reach Trent Reznor at

Have a good day!

Sent by Email-Reminder

And here is one on the day of an anniversary:

From: Email-Reminder
Date: Tue, 29 Jul 1996 04:00:11 -0400 (EDT)
To: Francois Marier <>
Subject: 15th anniversary of Prince Charles and Lady Diana

Hi Francois,

I just want to remind you that the 15th anniversary
(Crystal) of Prince Charles and Lady Diana is today.

Have a good day!

Sent by Email-Reminder

Event Definition

Events for each user are defined in an XML file (~/email-reminders) in that user’s home directory, click here to see a sample file. You don’t actually have to define each event by hand in the XML file though. Email-Reminder comes with a simple GTK user interface:

email-reminder GUI 1 email-reminder GUI 2


Email-Reminder has been in Debian since Sarge and in Ubuntu since Dapper. It is licensed under the GPL.

More Information

You can find out more about Email-Reminder by visiting its homepage and subscribing to its news feed.

If you want to get involved, see the roadmap and feel free to contribute some patches!

aiccu: add IPv6 connectivity to your machine


Article submitted by Caspar Clemens Mierau. Guess what? We still need you to submit good articles about software you like!

It’s time: no reason should prevent you from adding IPv6 connectivity to your machine. Of course it’s still an issue, as most ISPs don’t provide native IPv6. So in most cases the easiest way for you is to set up a tunnel to an IPv6 broker. There are currently several free brokers. I’ll show a simple way of getting IPv6 connectivity with the aiccu and SixXS.

Apply for an account

First you have to apply for an account on SixXS. Please note: as a kind of ISP, Sixxs really need valid information from you. You may give them a link to your Xing or LinkedIn profile.

Your application will be checked and (probably) approved. Wait for the mail. After that go to the SixXS website, request a new tunnel, and pick an entry point near you. This step also needs to be approved. Wait for the mail (it takes up to a day).

Set up aiccu

Now let’s get it running. Install the package aiccu (apt-get install aiccu). During installation you will be asked, which broker you are using. SixXS is already preconfigured, so choose it and input your account information. If everything is fine, aiccu will check SixXS and ask for your tunnel information.

Open a terminal and run ifconfig sixxs—it should show a new network interface with an IPv6 address. Now let’s check IPv6. Open Firefox and go to If the turtle logo is moving, your are using IPv6, if it does not, you don’t.

The SixXS credit system

You should understand the SixXS credit system. It’s used to limit users in repeating bad actions and to make sure they maintain their tunnels. For example if a static tunnel is down it will cost you some credits, thus you better keep it up. One could see the credit system as a bank, you got a credit limit and you can’t go over it and buy everything you want, but when you earn credits because your tunnel is up you can do a lot with it.

Security issues

Note that all your IPv6 traffic will be directed through the broker, so you have to take care of the security.

IPv6 content

Check for interesting IPv6 content: high traffic news servers, the IPv6 freenode server and so on. Always keep in mind, that not every application is ready for IPv6 and many applications need to be configured for IPv6. With Debian/Ubuntu you should be able to use at least Firefox, Thunderbird, Pan, and Irssi.

aiccu is available in Debian since Etch, and in Ubuntu since Feisty

Happy networking!

Debian- administration .org on rinetd


Unusual non-article ahead: has a nice article about rinetd entitled “Easily forwarding arbitrary TCP connections with rinetd”, go and check it, it is an interesting package I didn’t know about!

file: classify unknown files on the console


Article submitted by Caspar Clemens Mierau. Guess what? We still need you to submit good articles about software you like!

Somebody just sent you a mail with attachments that don’t have usable file extensions so you don’t really know how to handle them. Audio file? PDF? What is it? The same problem might occur after a file recovery, on web pages with upload features, etc.

While you can try to give the file an extension and open it with a software you think might be suitable, the better way is to let your computer find out what is all about. As a GNU/Linux user you probably already think “There is surely a command line tool for this”. Of course there is: the file by Ian Darwin.

It often gets automatically installed by dependencies. In any case, aptitude install file will help you. file depends on libmagic which provides patterns for the so called “magic number” detection.

Let’s assume we have the following directory with unknown files:

$ ls -l
total 2152
-rw-r--r-- 1 ccm ccm    4118 2008-03-30 06:32 unknown.0
-rw-r--r-- 1 ccm ccm   10220 2008-05-06 02:23 unknown.1
-rw-r--r-- 1 ccm ccm   12693 2008-05-06 02:23 unknown.2
-rw-r--r-- 1 ccm ccm   25933 2007-10-26 07:41 unknown.3
-rw-r--r-- 1 ccm ccm    2121 2007-10-26 07:41 unknown.4
-rw-r--r-- 1 ccm ccm     185 2007-10-14 20:14 unknown.5
-rw-r--r-- 1 ccm ccm 1189011 2008-05-17 22:37 unknown.6
-rw-r--r-- 1 ccm ccm  824163 2008-02-02 05:02 unknown.7
-rw-r--r-- 1 ccm ccm   82367 2007-09-20 06:18 unknown.8
-rw-r--r-- 1 ccm ccm    8872 2006-04-24 12:43 unknown.9

Now we want to know what’s inside those black boxes. Therefore we just call file * on the console:

$ file *
unknown.0: XML
unknown.1: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
unknown.2: ASCII C program text
unknown.3: PDF document, version 1.4
unknown.4: LaTeX 2e document text
unknown.5: perl script text executable
unknown.6: gzip compressed data, from Unix, last modified: Wed Oct  8 16:27:09 2003
unknown.7: Ogg data, Vorbis audio, stereo, 44100 Hz, ~192003 bps, created by: Xiph.Org libVorbis I (1.0)
unknown.8: PNG image data, 492 x 417, 8-bit/color RGBA, non-interlaced
unknown.9: HTML document text

Hey, that’s all. Pretty impressive, isn’t it? file does even not only distinguishes binaries and text files, it even tries to guess what programming language a text file is written in. And the magic is not that much magic: for example, in case of the ZSH script it just sees a shebang pointing to the zsh in the first line of the file, a PDF file typically starts with “%PDF” and so on. It’s all about patterns.

file provides you with some command line options that make it’s usage even more helpful. The most interesting is -i as it prints out MIME-types instead of verbose file types. If you are a web developer and want to know the exact MIME-type for a file download, this can save you a lot of time:

$ file -i *
unknown.0: text/xml
unknown.1: application/x-object, not stripped
unknown.2: text/x-c; charset=us-ascii
unknown.3: application/pdf
unknown.4: text/x-tex
unknown.5: application/x-perl
unknown.6: application/x-gzip
unknown.7: application/ogg
unknown.8: image/png
unknown.9: text/html

Great, isn’t it? The Apache web server also uses libmagic for this purpose. With file you just use a wrapper for the same task.

file is available in Debian and Ubuntu for a long time.

zsh: a REALLY nice alternative for bash


Article submitted by Danilo Martins. Guess what? We still need you to submit good articles about software you like!

After years using ZSH instead of BASH, I still don’t understand why isn’t everybody using it. ZSH is a complete shell that will certainly make your life easier. Give it a try.

First of all, you need it installed (duh). APT and its super cow powers will do this for you. You can simply use:

$ sudo apt-get install zsh

and you should be all set. Alternatively, you can install the package “zsh-beta”, but it tends to crash once in a while… ZSH is available on any repository of Debian and Ubuntu.

To try it out, you can simply type zsh, but you wouldn’t be very happy with the result. Let’s personalize it first. First of all, create a file named .zshrc on your home directory. Inside, you should put the text listed here (note: see the commented lines —be sure to try each of them out sometime)

Editor’s note: I’ve moved the sample script to a separate link, to ease cut&paste. Also, note that if you run zsh from Debian testing/unstable for the first time without a .zshrc file, it will greet you with an initial configuration dialog.

Now do run zsh. If you see a different prompt (specially if you did not comment the prompt lines on the .zshrc example above), it’s working. Now, it’s time you see what you can do with this.

First example. Lets suppose you’re doing a long command (cat /etc/mailcap | grep “^audio” | sed s/mplayer/gmplayer) and forget the command syntax for the sed program. You simply move your cursor to the command “sed” and press ALT-H. This should open the man page for sed. After you close the man page, you will automatically be returned with the command you were typing.

Second example. You’re connecting to a remote host using SSH. You remember that you want to use the X11 forwarding, but you don’t remember how to do this. Then, you type “ssh -” and press TAB. Yes, ZSH auto-completes not only files, but also command parameters. Be sure to try it out with whatever command you want to use.

Third example. You have a SSH key to a remote host, and you wish to copy a file from there using SCP. But you do not remember exactly where the file is. You simply type “scp user@remotehost:/home/myuser/myf”, press TAB and watch ZSH doing its amazing trick. Not only ZSH auto-completes files and parameters, but also remote files (remember that for this to work you need to have the RSA/DSA key on the remote host).

Fourth example. You want to install a Debian package (I love this one), but you don’t remember (or are too lazy to) type the whole name of the package. Instead, you simply type “apt-get install mysql-client” and press TAB, and watch ZSH magically auto-completing the package name. If you have more than one, it will list all available below, and if you keep pressing TAB it will complete through each one of them, one at a time. And yes, not only ZSH auto-completes files, parameters and remote files, but it also auto-completes package names. Well, I think we had enough of the “auto-complete” examples, didn’t we?

Fifth example. Yesterday you used a loooooong command and you are too lazy to type it all again. You also do not want to press UP until it appears. Instead of it, you simply type the beginning of the command and try the ALT-P combination. ZSH will auto-complete your command from the history. You can keep using ALT-P and swapping to the previous entries. If you missed it, ALT-N gets you to the next.

Last example. You typed apt-gey install foo bar foo2 bar2 foo3 bar3 foo4 bar4 … foo239 bar239 and pressed ENTER. Oh, shit, apt-gey does not exist. Instead of pressing UP, HOME, going to “gey” and changing it to “get”, you can simply use ^gey^get. This is a shortcut to “repeat the last command, but all occurrences of “gey” are now “get”.

If you liked the way ZSH works and want to use it as your default shell, you can always use the chsh command, and put /usr/bin/zsh there. It’s now your default shell.


Ghextris: tetris clone with a hexagonal makeover


Article submitted by Alex Drachmann. Guess what? We still need you to submit good articles about software you like!

The object of the game is much the same as with tetris, only the frame and the falling objects are hexagons. You have to slot the coloured pieces together making rows, which disappear once they are complete, the game ends if the stack of pieces reaches the celling.


Hexagons are hard to stack, so the game is more challenging than other games of its type, but it gets easier with practice. The game play gets rapidly challenging, as you make mistakes or run out of room and to make it worse, the objects you get are often the most useless for the job, plus it seems as if they fall at an increasingly faster rate. A score is kept based on how many lines you complete. Your current score and the highest score can be viewed on the bottom of the window, so you can try to match or beat your best score or that of a friend.

The interface and graphics are simple and integrates nicely in with the gnome environment. The colouring of the pieces is plain, with no texture or shading, so it doesn’t distract away from the game play. The top bar has two entries: play and hepl. The play menu has three actions, «play» (keyboard shortcut: ctrl+n), «pause» (ctrl+p or just p) and «quit» (ctrl+q). The help menu only has the infamous «about» option, with details about the version and author available.

The keys for playing the game are the direction keys, left and right on the keyboard, which moves the pieces left or right. The up and down keys turn the pieces 90 degrees in one direction or the other. Pressing the space bar makes the current piece crash into the slot directly beneath it.

The version I played was version 0.9.0, which is the current version in the universe repositories of Ubuntu Hardy Heron 8.04 and in the Debian repositories. Ghextris is available in all current releases of Debian and Ubuntu.

The official site of the game is:

The author of the game and lone developer of it is Mikko Rauhala, who admits to being inspired by a similar game called Xhextris by David Markley.

JOE Joe’s own editor: a really usable text editor


Article submitted by Neil Stewart. Guess what? We still need you to submit good articles about software you like!

Back in the day, when I was new to Linux, joe was the first text editor that I managed to quit without having to reboot my machine. That I am still using it today, many years later, goes to show just how simple yet powerful joe is. If you don’t want to use emacs (because what’s the point of running two operating systems?) and still can’t work out how to use vi, then joe is for you.

joe is started from the command line with joe or joe filename to edit filename. When you start joe you get a single header bar with information about where the cursor is, what time it is and, crucially, the message «Crtl-K H for help» (^KH in joe shorthand). So if you press Ctrl and K together, release them, and then press and release H, the top half of the screen is given over to a brief list of commands. And it’s here I learnt how to quit (without rebooting), how to open a new file, how to save a file. And how to move the cursor around, how to find and replace, how to skip over words and lines, how to marks blocks of text and move them about. And you can carry on working on your file —you just type— with the help up. So within a really short amount of time you’ll be up to speed.


But joe is powerful too. For example, you can process any block of text through any shell command. joe’s help file gives a good example. If you mark the block of text by moving the cursor to the beginning and ^KB, then move to the end and ^KK, then pipe the block of text through sort with ^K/ sort. joe then runs the block of text through sort and replaces the block with the result. Powerful, especially in conjunction with old faithfuls like tr and sed.

Search and replace is also easy. ^KF and enter a search term. That’s it. But search and replace is powerful too. You can reuse old search terms by pressing the up cursor key, including terms from previous sessions. You can use tab completion to complete from any of the words in your current document after you’ve typed the first few letters. Then you can choose what to do when you find it. To replace press R and enter the replace term. You can replace one by one, or replace all. ^L finds the next entry. And you can use regular expressions —this is unix after all. Again the help file has a neat example. If you search for \*,\*,\*$ (\* matches zero or more characters and $ matches the end of a line) and replace with \2,\1,\0 (\X matches Xth pattern found) the string «one,two,three» becomes «three,two,one». Bring up help with ^KH and skip a few screens with ^[. a few times to remind yourself of the regular expressions.

Macros are easy too. Start recording one of ten macros with ^K[ and then a digit. Finish the macro with ^K]. Then use ^Kdigit to play the macro.

joe has many more features. joe remembers where it was in the file when you next edit it. joe colours your C, Java, LaTeX, HTML, and many other formats by default. joe indents your source code and justifies your text. joe supports multiple windows. joe can set bookmarks. You can compile your source code from within joe (^[C) and then skip to the errors the compiler identifies (^C= next error, ^C- previous error).

Finally, joe is old, stable, and just works. It’s in version 3.5 in etch and lenny. I use it for everything, all day every day, and it never fails. Find out much more with info joe or at the Sourceforge home page.

mhddfs: join several real filesystems together to form a single larger one


Article submitted by Roman Mamedov. Guess what? We still need you to submit good articles about software you like!

Suppose, you have three hard drives - sized 80, 40 and 60 GB. And 150 GB of music files, which you need to store on these drives. How would you do it?

The two solutions I knew of, were:

However, the first method is quite tiresome, as one needs to decide how to split the data between the drives and keep track of what is stored where. For example, I might decide to store all «Classical» music on the first disk, and «Rock» music on the second. Then, suddenly, the first drive fills up and the second one still has plenty of space. Now I need to move the files between the disks, or jump around with symlinks.

The RAID method, while solving this problem, always incurs significant loss of either storage reliability or usable disk space.

But recently, I found a better solution to this problem and similar ones: mhddfs. It is a FUSE filesystem module which allows to combine several smaller filesystems into one big «virtual» one, which will contain all the files from all its members, and all their free space. Even better, unlike other similar modules (unionfs?), this one does not limit the ability to add new files on the combined filesystem and intelligently manages, where those files will be placed.

The package is called «mhddfs» and is currently present in Debian Testing and Unstable. It does not seem to be available in Ubuntu at the moment.

Let's say the three hard drives you have are mounted at /mnt/hdd1 /mnt/hdd2 and /mnt/hdd3. Then, you might have something akin to the following:

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              80G   50G   30G  63% /mnt/hdd1
/dev/sdb1              40G   35G    5G  88% /mnt/hdd2
/dev/sdc1              60G   10G   50G  17% /mnt/hdd3

After you have installed the mhddfs package using your favourite package manager, you can create a new mount point, let's call it /mnt/virtual, which will join all these drives together for you. The beauty of FUSE means you don't really have to be root for this (can be just a member of the fuse group), but for the sake of examples' simplicity, let's suppose we are logged in as root here.

# mkdir /mnt/virtual
# mhddfs /mnt/hdd1,/mnt/hdd2,/mnt/hdd3 /mnt/virtual -o allow_other
option: allow_other (1)
mhddfs: directory '/mnt/hdd1' added to list
mhddfs: directory '/mnt/hdd2' added to list
mhddfs: directory '/mnt/hdd3' added to list
mhddfs: move size limit 4294967296 bytes
mhddfs: mount point '/mnt/virtual'

The «-o allow_other» option here means that the resulting filesystem should be visible to all users, not just to the one who created it.

The result will look like this:

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              80G   50G   30G  63% /mnt/hdd1
/dev/sdb1              40G   35G    5G  88% /mnt/hdd2
/dev/sdc1              60G   10G   50G  17% /mnt/hdd3
mhddfs                180G   95G   85G  53% /mnt/virtual

As you can see, the new filesystem has been created. It joined the total size of all drives together (180G), added together the space used by all files there (95G) and summed up the free space (85G). If you look at files in /mnt/virtual, you'll notice that it has files from all three drives, with all three directory structures «overlayed» onto each other.

But what if you try to add new files somewhere inside that /mnt/virtual? Well, that is quite tricky issue, and I must say the author of mhddfs solved it very well. When you create a new file in the virtual filesystem, mhddfs will look at the free space, which remains on each of the drives. If the first drive has enough free space, the file will be created on that first drive. Otherwise, if that drive is low on space (has less than specified by «mlimit» option of mhddfs, which defaults to 4 GB), the second drive will be used instead. If that drive is low on space too, the third drive will be used. If each drive individually has less than mlimit free space, the drive with the most free space will be chosen for new files.

It's even more than that; if a certain drive runs out of free space in the middle of a write (suppose, you tried to create a very large file on it), the write process will not fail; mhddfs will simply transfer the already written data to another drive (which has more space available) and continue the write there. All this completely transparently for to the application which writes the file (it will not even know that anything happened).

Now you can simply work with files in /mnt/virtual, not caring about what is being read from which disk, etc. Also, the convenience of having large «contiguous» free space means you can simply drop any new files into that folder and (as long as there's space on at least one member of the virtual FS) not care about which file gets stored where.

If you decide to make that mount point creating automatically for you on each boot, you can add the following line to /etc/fstab:

mhddfs#/mnt/hdd1,/mnt/hdd2,/mnt/hdd3 /mnt/virtual fuse defaults,allow_other 0 0

For more details, see man mhddfs.

The last, but not the least important thing to mention, is the fact that it's very simple to stop using mhddfs, if you later decide to do so - and not lose any file data or directory structure. Let's say, at some point in time, you purchase a new 500 GB hard disk, and want to sell the smaller disks on Ebay. You can just plug in the new drive, copy everything from /mnt/virtual onto it, and then remove mhddfs mount point and disconnect old drives. All your folders, which were previously merged in a «virtual» way by mhddfs, will now be merged in reality, on the new disk. And thanks to the fact that files themselves are not split into bits which are stored on different drives, even in the unlikely event when mhddfs suddenly no longer works for you (or disappears from existence), you can still copy all your data from all three drives into one single folder, and have the same structure you previously had in that /mnt/virtual mount point.

potrace: Transform bitmap images into vector graphics


Article submitted by András Horváth. Guess what? We still need you to submit good articles about software you like!

You can face the task sometimes that you need a high resolution material from a particular image. Most probably when you’re a graphic designer (or even a tattoo artist), you might want to have a good quality result from a low resolution image that you can magnify no matter how much, it will give you smooth edges in high quality.

For this, you have the following possibility without a trace program: using a pixel graphic software like Gimp, you can resize the image with the best resampling method and apply a selective blur filter on it. Most of the times this doesn’t give the necessary quality.

There is a small but powerful utility called potrace developed by Peter Selinger, a mathematics professor at the Dalhousie University.

With a trace program like potrace, all you have to do is to give the image as an input, and there you have the result in the standard SVG format. potrace can produce even PDF format as an output.

Command-line example:

$ potrace -s image.bmp

With this process, the program transforms the images’ pixels into filled curves that have infinite resolution with smooth lines at any zoom.

In my personal experience while working as a graphic designer, potrace gave me very good results to many input images. Compared to other high expensive proprietary software, when the input image had sharp endings, potrace gave sharp edges in the result and other programs gave bad results, curving the edges. That needed a lot of manual correction.

Pros (compared to other programs):


This is an example found in the homepage, you can see the original bitmap and the vectorised image:

Original bitmap potrace output

The package has been available both in Debian and Ubuntu since a long time ago.

Related links:

kteatime - Small tray utility which reminds you of steeping tea


Article submitted by Stephan Windmüller. Guess what? We still need you to submit good articles about software you like!

For some people coffee seems to be the only liquid they drink in front of their workstation. But for those who enjoy a cup of tea once in a while, kteatime may be a neat little helper.

I expect every one of them knows this situation: The water just boiled, you put some green tea in your cup, add the water and return to your work. 15 minutes later you realize that you forgot your tea and only dozens of sugar cubes will rescue it. ;)

kteatime helps you to prevent this situation in form of a little timer in the tray.

kteatime configuration window

After selecting the appropriate kind of tea and starting the timer it will display a little circle which turns from red to green. The tooltip informs you how long your tea will need.

When your tea is ready, kteatime informs you with a beep and a little pop-up. You can also specify a command which should be run.

tea ready pop-up

For me kteatime is the only reason besides k3b to keep the KDE libraries installed. Even as a KDE application it just works fine under XFCE.

kteatime is available since Debian Sarge (perhaps even longer) and also part of every version of Ubuntu.

cu: Simple serial communication program


Article submitted by Floris Bruynooghe. Guess what? We still need you to submit good articles about software you like!

If you have servers, embedded systems or high end routers (or old PC’s doing those jobs) chances are that they will have a console on a serial port instead of being equipped with a display and keyboard. Even when normally you use ssh(1) or similar to log in to those machines, in debugging and rescue sessions you often want to see console messages, pull down the network interface or maybe play with the boot loader (like launching alternate kernels from within grub). You then need a null modem cable (often supplied by vendors when they use RJ45 plugs for the serial console instead of RS232) to connect the serial port of your computer to the serial console of the device.

Now you also need a program, often called a “serial communications” program, that can connect to your serial port and allow you to use your terminal as the console of the attached device. Most serial communication programs however where actually made in an era when most networking happened by using a modem —attached to the serial port— to dial up other systems. As a result of this they tend to have very heavy and bloated interfaces, giving you all sort of modem-specific functionality via a complicated interactive interface. This is where cu comes in! It is a very simple version of it: a simple command line program doing the bare minimum needed.

In it’s simplest scenario, described above, invocation is trivial:

$ cu -l /dev/ttyS0

For example this is how I connect to my home router (normally I’d use apt-get over ssh though):

flub@laurie:~$ cu -l /dev/ttyS1

Debian GNU/Linux 4.0 balder ttyS0

balder login: root
Last login: Sun Apr 13 19:58:46 2008 on ttyS0
balder:~# apt-get update
balder:~# apt-get upgrade
balder:~# logout

Debian GNU/Linux 4.0 balder ttyS0

balder login: ~.

As you can see here I used the seconds serial port (ttyS1) of my local machine (laurie) to connect to the first serial port (ttyS0) of the router (balder), which is configured to run a getty on it. This allows me to log in and do any task I want just like from any other terminal. Disconnecting is done just as in ssh by default: by typing `~.‘ just after you have typed a newline.

The above will connect you to the serial line configured as 9600, 8n1 (9600 baud rate, 8 data bits, no parity, 1 stop bit). This is most likely the default setting on the device. However as this is sometimes a little slow you might want to configure your server (or whatever the device is) to use a faster baud rate, or maybe your vendor did that already and told you in their documentation what speed to use. The speed is easily changed by another command line switch:

$ cu -l /dev/ttyS0 -s 150000

If you need to change the parity this can be achieved by using -e for even and -o for odd parity. The stop bits and data bits can’t be changed by command line switches unfortunately, but needing them seems very rare.

cu does have a fair few more options and some more commands starting with the `~‘ escape character. Most of these have to do with using modems to dial other systems however and are not applicable for null modem use. The manual page, cu(1), gives a detailed description of more advanced features.

(1) If you’re unlucky enough to not have a serial port anymore, like many modern laptops, a USB-dongle with a serial port is usually assigned to /dev/ttyUSB0.



Hi again,

A few weeks ago, I wrote a call for help as we were lacking material for keeping the site alive. I’m very happy to say that it was a success! We received many great articles that we’re currently drafting for publication (you have already seen some), and lots of support. You people rock!

We will be keeping the weekly schedule for now, just to be on the safe side. If the contributions keep flowing, we might be able to do twice a week posts again.

So thanks to all of you: silent readers, commenters and writers. You’re great and you are the reason and life of this site!

Sonata: an elegant music client for MPD


Article submitted by Fatih Altınok. Guess what? We still need you to submit good articles about software you like!

Sonata is a GTK+ music player, written in Python. Actually, it is an MPD client, which is it’s most important advantage. MPD is a daemon that plays your music at background (maybe on a different computer). It can use different front ends, you can use it even from command-line and it continues playing even if your client or X is crashes. Sonata takes advantage of MPD and serves it in a clean and user-friendly interface.

Sonata - Mini

Sonata offers a clean interface to your music. You can choose a collapsed or expanded view. You can browse around tabs to reach your queue, play lists, library, song info or streams. The interface is customizable; you can remove unwanted tabs, playback buttons, progress bar, status bar and album cover. You can hide the main window by clicking the tray icon or by entering sonata -t into the command line —which you can bind to a keyboard shortcut to make it easier. And you can see the song changes from the notification pop-ups.

Sonata - Playlist Sonata - Library Sonata - Info Sonata - Options

Sonata has lots of features you’d want from it. It can fetch song lyrics from and saves them to the ~/.lyrics folder. It can “scrobble” your songs to (you can use a daemon for that too, but it’s your choice.) You can view and search your music database from the library tab. You can edit your ID3 tags, one by one or batch. It can show album covers —both local or remote, depends on your decision—. If you click on the cover art; you’ll go to the song info where you can enlarge the image, see the lyrics and other song-related information. It also has support for listening to on-line streams.

You may think these features are just ordinary for an advanced music player, but there’s one more thing. Sonata’s interface is simple and user-friendly. Forget about the music players which you can’t use unless it’s full-screen. Sonata doesn’t cover more place than a sidebar. Think about music players with lots of features that makes it complicated. Sonata has what’s necessary. It makes listening to music enjoyable, not confusing.

You can install Sonata if you’re using Debian testing or unstable; or Ubuntu on all repositories. Sonata is currently being developed and pretty stable. Ready to make you enjoy your music!

Sitebar: centralized bookmarking


Article submitted by Arve Seljebu. Guess what? We still need you to submit good articles about software you like!

Like many people nowadays, I use many different computers. You use your computer at work, home, school and in public places. Maybe you also got several computers at home? One thing that easy comes to annoyance is bookmarking. With different bookmarks on every computer, I’ve long searched for a good way to sync my bookmarks between browsers and operating systems. Maybe you’ve used Google bookmarks, or similar social bookmarking. I’ve been using Google bookmarks, and my problem arrived when I wanted a good way to view my bookmarks in the Opera web browser. The solution was to add a speed dial to, which to me wasn’t very appealing to me.

Sitebar is an easy way store your bookmarks in one place. It has support for many browsers and platforms. It comes both as a service, or self installed software. The latter is my preference. The great news is that sitebar comes as a package in Debian. All you need is apache, mysql and php. Installing is as easy as apt-get install sitebar, set up a mysql database through the install wizard and then browse over to http://yourserver/sitebar/ and set up your preferences.

To get started, sitebar includes ways to import and export your bookmarks in many formats. It’s as simple as right clicking inside the bookmark area and choose Import Bookmarks. Sitebar can import the following input formats: Atom, OPML Link Type, OPML RSS Type, Opera Hotlist, Netscape Bookmark File, RDF/RSS, and XBEL. You can also select Auto, which is the easiest way.

The use of Sitebar may vary some between different browsers. For example, in Firefox several add-ons are available, and in Opera the side panel is used. That’s why the sitebar-menu will show up when right clicking the bookmarks under Firefox, but in Opera you will need to use CTRL left-click to get the same menu. As for use in Opera, I prefer getting Opera’s menu when right-clicking, which means you can open bookmarks in new tabs and such.

Adding bookmarks is simple too. You can make yourself a short cut to adding bookmarks in your browser. You could also right-click/CTRL-left-click where you want your new bookmark and then choose “Add Link”. And here comes the beauty, under “Add Link” you’ve got a button called “Retrieve Link Information” which gets title, description and icon from the web page you are adding.

After a link is added, you can email, copy, delete or edit it. There is also security features that lets you choose rights for trees and folders. User management and groups are available too. All of these functions are easy understandable.


Full screen shot of Sitebar in Firefox/Iceweasel
Sitebar in Firefox/Iceweasel
Sitebar menu
Sitebar menu
Importing bookmarks
Importing bookmarks
Adding a bookmark
Adding a bookmark
Creating a folder
Creating a folder




Sitebar has been available in Debian since at least Sarge, and in Ubuntu since Dapper.

wesnoth: a turn-based fantasy strategy game


Article submitted by Vasiliy Faronov. Guess what? We still need you to submit good articles about software you like!

The free software community makes games, too. Among the more well-known ones is the Battle for Wesnoth — a turn-based strategy game with a fantasy setting. It doesn’t have shiny 3D graphics or cut-scenes, but it is an interesting and original game and is fun to play.

This game is often simply called “Wesnoth”, and the package name is “wesnoth”.

A typical Wesnoth action
A typical Wesnoth action.

Wesnoth is played on a map divided into small hexagons. Each player controls a number of units which move over the map and attack enemy units. Different units possess different abilities and weapons. An important tactical element in Wesnoth is terrain: it determines the defensive ability of the units. For example, an Elvish Fighter can defend himself better in the forest than on open grassland, so enemies are less likely to harm him in the forest. As you kill more and more of your foes, your followers advance to higher levels, improving their skills and other characteristics. Careful positioning, movement and advancement of units is the key to victory.

The game’s interface is quite nice and usable. Among other things, Wesnoth ships with a complete in-game help reference where you can find detailed information as well as general overviews.

Wesnoth help
The in-game help, complete with pictures and hyperlinks.

The game ships with a number of campaigns that pit you against an artificial intelligence (AI). Of course, you can also play against other people. There is a dedicated multiplayer server where you can compete with your friends or strangers (note that direct connectivity with your opponent is not necessary, so you can play even from behind a NAT router or similar obstructions). For users of the stable Debian distribution, there is a server at — it lets you play with the Debian’s version of the game even after the developers release a newer one.

The virtual “lobby” of the multiplayer server
The virtual “lobby” of the multiplayer server.

Wesnoth can also be expanded: you may create your own campaigns, maps, units and all other sorts of things. A special add-on service has been developed to make it easy for players to find and install such enhancements. Just connect to it, pick what you like, click a button, and you are ready to go.

The add-on installation dialog
The add-on installation dialog.

The game is actively developed, has a well-maintained web site and a thriving community on the forums. Wesnoth has been available in Debian since release 3.1 “sarge”, and in Ubuntu since release 6.06 “Dapper Drake”.

A call for help


Hi there,

Once again, we urge you to help us keep this site up and running. Since February we only had three posts, far from the twice a week intended publishing rate (the one article per day idea was dropped long time ago). We desesperately need new articles to publish, remember that this site is made from the material our readers contribute, so it’s up to you to keep it running! We also need help editing articles, but that’s void if we don’t get articles to edit.

Now, we have a only couple of articles to publish, on Sunday you’ll be able to enjoy one and for now we’ll switch to a weekly rate. If things go better, we could go back to twice a week. If things don’t go better, it will be time to end the project.

Thanks for your attention, Tincho.

stellarium: A Planetarium on your Desktop


If you usually read Debaday, you must have noticed the recent lack of articles. We apologise for that, we’re lacking articles and editing manpower. We really need your help to keep the site running!

Article submitted by David Newgas. Guess what? We still need you to submit good articles about software you like!

I’ve always been interested in astronomy. But it was only after moving out of the city that I discovered merely by tilting my head up I could see some of the amazing things I had seen pictures of and learned about. Unfortunately, I knew very little about how to find interesting things in the sky.

This is where Stellarium comes in! Stellarium is a free/open source planetarium for your PC. It offers a splendid interface:

Stellarium Interface

Many "Sky Cultures":

Stellarium Sky Cultures

And beautiful graphics:

Stellarium Nebulae

To install, just apt-get install stellarium. The user interface is easy — left-click and drag to move around, and mouse wheel to zoom in and out. Alternatively arrow keys can be used to move, and Ctrl-Up/Down to zoom. Usually Stellarium shows the stars rotating at the same speed as in reality (which is only obviously visible at high zoom). However, the controls in the bottom right corner allow time to be sped up or reversed. This is important for figuring out where objects will be in the sky.

Time shifting means that Stellarium can be used to simulate solar eclipses, comet passes and meteor showers (all of which have something which can be seen in the simulation).

The magnifying glass icon or Ctrl-F allows you to find objects. I recommend finding the especially beautiful Dumbbell Nebula, or the recently famous Comet McNaught (Hint, it is recognised as C/2006 P1).

Stellarium is beautiful to use to look at constellations. Turning on the first three toolbar options displays the constellations, their names and artwork of what they represent. In the language tab of the settings window (the spanner or "1" key) the “sky culture” can be changed, showing the constellations of the Chinese or Inuits, to name just two.

One fun thing to do is find a solar system object and press Ctrl-G. This takes you to a view from that planet, with positions and phase of other solar system objects calculated correctly.

After having a little play around with Stellarium, it#8217;s down to business. Find a little free time after dark, and before you go out, jump onto Stellarium. Set the time, date and place in the configuration window to when and where you will go out. Then find a few objects (maybe a dimmer planet like Saturn or Jupiter) with magnitude less than five (Magnitude is a negative logarithmic scale, lower numbers are brighter), and note down their positions relative to the cardinal points and nearby stars.
when you go out, try and find them! Many objects such as Orion’s Nebula or the planets can be seen with the naked eye. Charles Messier catalogued over 100 objects that can be made out with the naked eye. Try searching for M1 - M110 to find these. Binoculars or a small telescope make these more visible.

For those of you who feel like shelling out a bit of cash, Stellarium can be used to control telescopes, or even be projected onto a dome.

Have fun stargazing, both real and virtual!

Bootchart: boot profiling


If you usually read Debaday, you must have noticed the recent lack of articles. We apologise for that, we’re lacking articles and editing manpower. We really need your help to keep the site running!

Article submitted by Stevem. Guess what? We still need you to submit good articles about software you like!

On a recent vacation my laptop boot time (>4 min.) started getting on my nerves. I resolved to enjoy the vacation but fix things on my return. At home a few minutes with Google brought bootchart to my attention.

Boothchart won’t cure lengthy boot times but it will provide details about how the time is spent. Bootchart is actually two packages, bootchart, the profiler daemon to gather resource data from /proc during boot, and bootchart-view to create an image from the collected data.

bootchartd starts measuring as soon as /proc is mounted. From /proc it collects a sizeable amount of data about processes, including (in 2.6 kernels) disk utilization and throughput.

The documentation suggests to use BSD process accounting to exactly reconstruct the process tree. The CONFIG_BSD_PROCESS_ACCT_V3 feature is enabled in stock Debian kernels, so to use this, you just need to install the acct package.

I expected profiling the system boot would be complicated and I was prepared for some serious hacking to measure the process. In fact, it couldn’t be much easier.

The boot profiler is started as an option to the boot/loader kernel command line.

It works with LILO but Grub’s interactive boot makes it very simple:

  1. Select your image entry from the boot menu
  2. Type ‘e‘ to edit the entry
  3. Append ‘init=/sbin/bootchartd‘ to the command line
  4. Type ‘b‘ and you’ll be booting with bootchart profiling in effect

bootchartd starts itself and then launches /sbin/init. There’s no indication that logging is in effect, console output appears as usual. Once you login you’ll find all the boot data stored in a compressed tar, /var/log/bootchartd.tgz.

To view the data run bootchart-view. It defaults to creating a SVG image but EPS and PNG outputs are possible with the --format option.

Here’s an example of the output:


By default the chart renderer doesn’t display most child processes. If you think that level of detail will be helpful, bootchart-view has a --no-prune option. Be warned, it will create a fairly large image.

Conclusion: I still haven’t significantly decreased my boot time, many before me have tried and failed, but I discovered a clever, easy-to-use profiling tool to diagnose boot problems.

rkhunter & chkrootkit: wise crackers only


Article submitted by Claudio Criscione. Guess what? We still need you to submit good articles about software you like!

Rkhunter and chkrootkit are tools to check for signs of a rootkit. They will inspect the system they’re running on and report anomalies either through the shell or via email.

Although an attacker able to install a rootkit is likely also able to easily escape or delete these tools, not every attacker is a skilful one. Not every script kiddie knows about these tools or the way to cover its tracks. Since every single error can make the difference, on either sides, an effortless passive protection can do no harm and adds one more (maybe thin) layer of security.

Both rkhunter and chkrootkit, indeed, can be deployed quickly and require little management effort.


Thanks to apt-get, aptitude and their super cow powers, we can just go for a

$ sudo aptitude install chkrootkit rkhunter

Or go root if you’re not a sudoer. Once installed, both packages will add a cron entry and automatically execute every day.

What they do

Both chkrootkit and rkhunter use a signature-rule/filter based system: they can detect the presence of known rootkits &emdash;via files or similar indicators&emdash; and flag anomalous conditions, like interfaces entering promiscuos mode or hidden files. In fact, not unlike anti-virus programs, rkhunter and chkrootkit indeed need periodical updates.

The signature based approach is a quite simple one, something like a big grep and strings combo: it is strongly suggested to have an alternate copy of some binary (egrep and strings, just to name a couple) so that &emdash;at the very least&emdash; the aggressor has to patch them too. Obviously, mounting the disk via another machine is far more reliable, even if it won’t allow you to find modified rootkits.

Both softwares provide MD5 signature verification on known binaries, with sort of a white list approach, thus trying to ensure that none of the most important binaries were tampered with. Among others, checks performed include searching for hidden directories and scanning for promiscuous interfaces and suspicious file permissions.

So, what are the differences?

Rkhunter pros

The autoupdate feature is a very nice feature to have. You just have to run rkhunter –update and the software will update the rootkit definitions. You can control the autoupdate behaviour via the /etc/default/rkhunter file, using the CRON_DB_UPDATE parameter, which is enabled by default. This will upgrade the system binaries MD5 database and the good/bad/black list of applications and program versions.

Other features of note include the ability to use WebJob to run rkhunter in a centralized manner, thus simplyfying administration, and the colorful interactive mode you can run with rkhunter -c.

rkhunter in interactive mode

Chkrootkit pros

Chkrootkit provides a differential mode where it reports only what changed between the latest scan and the previous one. While this is a very nice feature to limit the impact of false postives, one single missed mail can make the difference, so choosing whether it should be enabled or not is an important decision.

If the whole “grep and look for signatures” stuff is not enough for you, you can root chkrootkit in expert mode, with

# chkrootkit -x

This will give you a greatly improved control on what’s going on and more verbose output, but make sure to redirect the output somehow.

Chkrootkit has a nice modular design, with subcomponents taking care of differenct aspects, like lastlog and wtmp deletions. Last but not least, chkrootkit can run without installation and from a read only media.

The big decision

Maybe now you’re wondering “which one should I use?”. My answer is simply “both of them”. There is no reason not to do that, so go for it. Chkrootkit has been available since, at least, Sarge and Dapper. Rkhunter, being newer, has been available since Etch.

dillo: a super fast web browser


Article submitted by Kam Salisbury. Guess what? We still need you to submit good articles about software you like!

Dillo is a extremely stable, fast and light web browser. Based on GTK+, you can install Dillo from apt-get or snyaptic for just about any hardware platform and window manager supported by Debian or Ubuntu. Dillo is written entirely in C for speed and compatibility and is best for tasks where being fast and frugal on memory are the highest priorities. Perfect for large image archive displays!

Dillo showing

Dillo does not support several web protocols which helps it run faster. For example, standards compliant HTML content will be rendered correctly but do not expect the CSS, DHTML or Javascript to work correctly or at all.

Nevertheless, the version found in Debian already includes some patches that improve Dillo giving it support for: different encodings, anti-aliased fonts, frames, tabs, SSL and miscellaneous improvements. See this page for details.

A recent addition to the package, bugmeter displays the amount of HTML errors of the web page being viewed.

The project is currently looking for new developers, if interested please review the contact information at

Dillo has been available in both Debian and Ubuntu for many years

VYM (View Your Mind): Easy mind mapping and drafting tool


Article submitted by Nigel Barker. And guess what? We still need you to submit good articles about software you like!

View Your Mind is a graphical mind mapping tool, which can be used for brainstorming, planning, drafting, gathering resources; or as a quick way to convert ideas into a web page or Open Office presentation. The UI is intuitive and takes almost no time to learn. When you open the program you are presented with a blank map with a yellow starting box already selected for your central idea.


Then by clicking the branch tool you begin to add further thoughts and sub-levels. If an idea is too big to fit on the page (though there is no limit and you can zoom, scroll or link to a new map), then there is also a built in rich text editor where you can type longer entries. A set of emoticons are available for those who like to label their thoughts - good for brainstorming.


Images can also be attached to branches, and later saved back out of the map into an image file. However, if an image is large it will not be scaled and you will struggle to scroll around your map. Also the saved images don’t open for me - something buggy here? Branches can be made into URLs, which launch your default browser when clicked, and also work later when you export the map.


When you have finished jotting down your thoughts or writing your draft, then it is time to export. Several interesting options are available, and this is what makes vym really useful for me. The map doesn’t have to be the end product - it can be just the beginning. You can hide branches that you don’t want to export, then choose from a list that includes a web page (with an image map linking to all the text editor notes you wrote (anchored further down the page), and external links from branches you added as URLs), ascii text which contains just enough structure to enable easy formatting in a word processor, an Open Office presentation (large amounts of text won’t fit, but good for simple bullet point slides), and other options I haven’t tried such as LaTeX and csv.


Vym can import maps from Freemind, another GPL mind mapper, and from Mindmanager, a commercial product. To be honest I haven’t used Freemind, but I like the way branches can be dragged around in vym, and re-ordered by dropping them on parent nodes, which doesn’t seem to work in Freemind. I use vym with my kids at school, because it is very useful but easy to learn. Freemind looks as though you have to spend some time finding out how it works.

Vym is available in Debian since Etch (Sarge via backports) and Ubuntu since Dapper.

Vym is maintained by its author Uwe Drechsel, and is available in English and German.

Project homepage:

LyX: A text editor that stays out of the way


Article submitted by Nicolas Brailovsky. And guess what? We still need you to submit good articles about software you like!


Did you ever get to struggle against your text editor’s random format feature while trying to write a document? Open Office may be a great project, but when you want to focus on the content, it can be annoying to have your editor format or unformat your text, seemingly at random.

Well there are good news for those of us using Vim to create content and then Abiword to format it: LyX is a text editor that produces beautiful documents, without the need of being a designer, and yet manages to stay out of the way. From the tutorial and the homepage (

LyX is the first WYSIWYM (What You See Is What You Mean) document processor. The basic idea of LyX is that you do not need to handle style, or actually, you use a set of predefined styles and concentrate on your document content, This makes sure that your resulting document will be typographically correct and good looking visually. […] LyX uses Latex as its back end typesetting mechanism.

Sounds great already, doesn’t it?

A first look into LyX

Upon start LyX looks more or less like any other graphical text editor in the universe:


Well, it’s logo may look nicer, but that’s about it. Anyway, the magic starts just as you start writing: you’ll notice most of the common format options seems missing, but you can define what you’re writing instead:

lyxMenuNote that we don’t tell it to center it or to make the font larger and bold. LyX takes care of all that automatically. Simply click on the format menu (below File, and it has the default value of “Standard”).

So instead of defining Times New Roman 12px bold centered, you say «Title». WYSIWYM, remember? In the homepage there is a «Graphical Tour» with all the basic functions, it’s quick and it’s great:

Some useful features

LyX also provides a great support for math formulas (and all the weird symbols you can think off). Just click the button «Insert Equation» and a box to enter math symbols will appear. No more struggle to align the dividend and the divisor!


Of course, LyX provides the usual features such as tables, spell checking, footnotes and many more. The tutorial of the application is more than complete, and easy to follow.

LyX documents formats

LyX documents can be exported to a wide variety of formats, mainly because being based on Latex it takes advantage of the already existing conversion programs. Some of the possible export plugins installed by default are PS, PDF, DVI, Latex, HTML and Plain text, but custom ones may be defined.

What LyX isn’t for

Although LyX may be a valuable piece in anyone toolkit it’s worth noticing it isn’t exactly the Swiss army knife of the text editors. If you need to define a very customized layout or format, like slides for a presentation, this is the wrong tool for the job.


According to it’s homepage, LyX 1.5.3 was released the 16 th of December, 2007. It’s available in Debian since Sarge ( Lyx Version 1.5.1, released 4 th of August, 2007, is available in the repository of Ubuntu 7.10. Development is still active. There’s also a Windows version for those of us stuck with primitive a OS at work.

synergy: sharing the keyboard and mouse


Article submitted by Carles Pina from Catux-LUG. And guess what? We still need you to submit good articles about software you like!

There are many occasions at which a user needs to use two computers at the same time, even with two different operating systems, all in the same desktop. One of the most annoying things that might happen is that you will need to use a different set of keyboard and mouse for each computer with the resulting waste of space on your table.

One of the first solutions that firstly came to mind was to use only one set of keyboard and mouse to access the other computer through some kind of terminal software such as VNC, ssh, FreeNX,… but, sometimes we would prefer to really use the other computer, providing us with access to two real screens (very comfortable), for graphical design tasks, games, closer feeling to the user interface, etc. This is the case we are going to talk about.

What is synergy?

Synergy is a multi-platform client-server program designed to share the same keyboard and mouse for different computers connected by network.

How do yo use it? (in other words, how to change from one computer to the other): The basic usage consists of just moving the mouse pointer from one screen to another, though it also includes some kind of protection for those cases when the pointer is at the corner of the screen for other purposes like closing a window using the x at the top-right. Nevertheless, the option to configure a keyboard shortcut to move between screens is given.


The configuration is pretty straightforward: you need to define the screens’ layout (which screen is situated on the right, left, top, bottom).

For example, if we had two computers, one called “desktop” and the other one “laptop”, and we wanted to use the keyboard from desktop (then desktop will act as the server), we need to write the following configuration file in /etc/synergy.conf, or any location if we started synergys with the –config PATH_TO_CONFIG flag.

section: screens

section: links
        right = laptop
        left = desktop

Computer names are the same name the hostname command reports.

Then, in the computer that acts as server we will execute, to read the configuration from /etc:

$ synergys

Or, to read the config from our home directory:

$ synergys --config ~/.synergy.conf 

And then, in each client computer:

$ synergyc SERVER_IP

If we have problems, we can track them using:

$ synergyc -f SERVER_IP


In the project’s webpage you can find very good documentation.

Please note that synergy doesn’t offer secure connections yet, but we can use any VPN or SSH tunnel to avoid our sessions being captured in the network. See the security page in the project’s website.

Also check the quicksynergy package, which is a graphic user interface for synergy.

Synergy has been available at the Debian and Ubuntu repositories since long ago.

Thanks a lot to Fran Hermoso for the extensive text correction and improvement and to Peral for showing me synergy.

psmisc: a closer look to a standard package


Article submitted by Adrian von Bidder. And guess what? We still need you to submit good articles about software you like!

The psmisc package is probably installed on almost all Debian and Ubuntu installations and contains a number of small tools related to process management on Unix systems. Namely, these are pstree, killall, fuser and peekfd. Below follows a short description of these useful tools. While everybody certainly knows killall and probably pstree, the package also contains fuser and peekfd, which were new to me until very recently (though I hear at least fuser is an age-old tool. Shame on me.)

killall is exactly as evil as it sounds: it kills all processes with a given name. SIGTERM is used by default, but it can of course use any other signal. It also has options to match processes by user, by a specified regex or by process group. I usually use it to shoot parts of KDE with invocations like:

$ killall kio_imap4

Since kmail seems to have something of a troubled relationship with my IMAP server. (As an aside, I’d also like to point out the program slay, packaged in the slay package, which simply kills all processes belonging to a specified user.)

A nice overview on what is running on a system is the output of pstree. Part of the output on my system is:

$ pstree
     │                    ├─hald-addon-cpuf
     │                    ├─hald-addon-dell
     │                    ├─hald-addon-inpu
     │                    └─hald-addon-stor
     │         ├─2*[kio_file]
     │         ├─kio_http
     │         ├─3*[kio_imap4]
     │         ├─kioexec──────wfica
     │         ├─klauncher
     │         ├─konqueror
     │         ├─konsole───bash─┬─pstree
     │         │                └─xchat───{xchat}
     │         └─kwin
     │     └─kdm───startkde───kwrapper

Options to pstree include display of PIDs, users and SE-Linux contexts.

fuser lets you find out what processes use a certain file, for example:

$ fuser -v /home/avbidder/.xsession-errors
                    USER        PID ACCESS COMMAND
                    avbidder   4409 F.... startkde
                    avbidder   4533 F.... kdeinit
                    avbidder   4536 F.... dcopserver
                    avbidder   4538 F.... klauncher
                    avbidder   4540 F.... kded
                    avbidder   4547 F.... kwrapper
                    avbidder   4549 F.... ksmserver
                    avbidder   4550 F.... kwin
                    avbidder   4552 F.... kdesktop
                    avbidder   4554 F.... kicker
                    avbidder   4562 F.... artsd
                    avbidder   4567 F.... kmix
                    avbidder   4568 F.... konsole
                    avbidder   4572 F.... beagled
                    avbidder   4574 F.... lineakd
                    avbidder   4579 F.... knetworkmanager
                    avbidder   4680 F.... knotify
                    avbidder   4916 F.... kio_uiserver
                    avbidder   5706 F.... akregator
                    avbidder   5708 F.... kttsd
                    avbidder   5742 F.... kio_file
                    avbidder   5864 F.... beagled-helper
                    avbidder   6939 F.... konqueror
                    avbidder   7076 F.... konqueror
                    avbidder   7185 F.... kmail
                    avbidder   7696 F.... kio_imap4

fuser also has options to send signals to these programs, so you can easily KILL all these programs with fuser -k /home/avbidder/.xsession-errors (this uses SIGKILL by default, but of course you can change this.)

While fuser is a regular system administrator’s tool, peekfd is a real deep-diver: it lets you watch what goes on on a filedescriptor of a process. (Please note that peekfd is not available in etch, you need psmisc from Lenny or newer.)

If you type peekfd <pid> at a terminal, it will follow all file descriptors of the process, to get an output like this:

$ peekfd 7808

writing fd 1:
foo bar

Where 7808 is just cat >/dev/null in another terminal window, with me typing “foo bar” in it. The manual page warns about it killing the monitored process (which I haven’t seen so far) and I’ve had peekfd segfault on me a few times, so I guess there’s some real ugly magic going on behind the scenes.

Instead of following all input and output of a process, by specifying the file descriptor number, you can follow only a selection of the files a process has opened. The directory /proc/<pid>/fd is a good way to find out which file descriptors might be worth looking at.

So let this article be a motivation to have a closer look at all the packages that you’ve installed on your system since at least potato and haven’t really looked at lately…

colordiff: put some color in your diffs


Article submitted by arno. We are running out of articles! Please help DPOTD and submit good articles about software you like!

colordiff is a small tool to colorize diff output which greatly improves readability.

colordiff can be used as a wrapper around diff, a tool used to compare files line by line. Simply run:

$ colordiff file1 file2

That will output differences between file1 and file2 in a colored way. You can also pass diff options to colordiff. So, to output a colored difference between two directories, you can run:

$ colordiff -Nur dir1 dir2

colordiff can also be used through a pipe. Just give it some diff content on its input and it will output the same content with colors.

$ cat some_patch_file | colordiff


$ cvs diff | colordiff

colordiff even works with wdiff since version 1.0.7 (currently only in Debian unstable, not in Ubuntu).

Default colors are very clean on a dark terminal: blue for new text, red for old text, magenta for other diff stuff. You can also modify them easily if you wish. Because colordiff has no way to determine if it writes on a dark or on a light terminal, default colors may be quite harsh on a white terminal. So, colordiff comes with colordiffrc-lightbg file, a configuration example for light backgrounds.

Related tools

Many text editors can display differences with two or more files. Graphical tool xxdiff can display differences between two or three files (it also has more features).

If you like to colorize everything on the console, you may like ccze to colorize log files, colormake to colorize make output, colorgcc to colorize gcc output, or highlight (with --ansi option) to colorize source code for more than 100 languages.


diff alias

Colordiff can be used anywhere diff is used. So, you may want to set colordiff as an alias for diff. Put in your shell configuration file:

alias diff=colordiff
svndiff function

If you use version control regularly, it may be useful to define a diff wrapper in your ~/.bashrc, ~/.zshrc, or other shell configuration file. For example, here is my svndiff function:

svndiff () { svn diff "${@}" | colordiff | less -R -E }

So, I can run svndiff in a directory controlled by svn, and get very readable differences information. You can find a cvsdiff function in colordiff manual, or write one for your favorite control version.


You can find some screenshots on colordiff site:

colordiff is available in Debian from oldstable Sarge to unstable Sid and for Ubuntu from Dapper to Gutsy.

pwsafe: A cross-platform tool for password management


Entry submitted by Kam Salisbury. DPOTD needs your help, please contribute!

PWSafe is a Command Line Interface (CLI) tool for managing and securely storing passwords. Using the public domain cipher Blowfish, PWSafe maintains an encrypted database of login account details and their associated passwords. The database format PWSafe uses is cross platform compatible with Counterpane PasswordSafe (for Windows), MyPasswordSafe for QT application environments (KDE) and Password Gorilla for the tck/tk application environment (Windows, Mac OS X, Linux, Solaris, *BSD).

Installing PWSafe is accomplished via command line (apt-get) or X Windows (Synaptic) and has been available in both Debian and Ubuntu since a long time ago.

PWSafe is used from the command line prompt but also supports copying the passwords into the X selection buffer and into the clipboard. One main password is used to “unlock” the datafile. Screen shots of PWSafe in operation are available from the author’s (Nicolas Dade) website. Should you need to, PWSafe also supports random password generation.exporting databases to text, and merging separate databases together.

A strength of PWSafe is the cross platform compatibility of the data files. For example, you could store a copy of your PWSafe data files on a USB Flash Drive, along with installers or executables for some platforms and now you have a secure account and password management utility across a wide variety of computing platforms available to you all the time. You could keep that USB Flash Drive in your safe deposit box, should something ever happen to you, your spouse could recover and coordinate turn over of administrative accounts to others. PWSafe, secure password management as simple as it gets.

Rhythmbox: An OpenSource iTunes Clone


Entry submitted by Kevin Hunter. DPOTD needs your help, please contribute!

The Linux desktop environment has made great strides in terms of usability in the past couple of years. In that light, I present Rhythmbox, an OpenSource music player ala iTunes for the Gnome desktop. Some of its features include an iTunes-style layout, search box, playlist management, podcast handling, and iPod integration. If you learned iTunes, using Rhythmbox will take only a slight adjustment, mostly involving a minimally different look-and-feel.


Thanks to the power of apt/aptitude/synaptic, installation should be a breeze:

$ sudo aptitude install rhythmbox

When complete, take a gander at your Applications → Sound and Video menu. Select Rhythmbox Music Player and you should be in business.

How to Use It

first run

The main Rhythmbox window has four frames. The first, partially obscured in the picture to the left, displays different sources of audio media. Think Library, Playlists, or Podcasts. The two medium frames, titled Artist and Album, list all the artists and albums in your collection. Clicking on one of the entries filters the main list below … At least that will be the case soon: since this is the first time running Rhythmbox, it won’t know about any of your music files. Note the main list (large white square) is empty. To remedy this, tell Rhythmbox to import your music folders via the file menu item Music → Import Folder.

I have chosen to place my music in my home folder under Media/, so I would navigate the dialog box to ~/Media/Music/. Once you click Open, give Rhythmbox some time to index your library.

importing a folder

When it completes, you are ready to rock. Double click a song in the main song list and start listening. Alternatively, you can enter a couple of terms in the search box above, or select a specific artist or album to filter the main list, then make your selection.

Rhythmbox has the other half covered as well: For those just starting or augmenting their digital music collection, Rhythmbox has integrated ripping: pop a music CD into your computer, right-click on the new icon and select Copy to Library. (Fiddlers: relax! There are always choices. If you don’t want to rip to the ogg file format, or want to adjust where your freshly ripped files go, have a look through Edit → Preferences.)

importing a cd

The Good Stuff

But ho hum. At this point, I’ve told you about all the ways that Rhythmbox is like iTunes. Are you trying to convince your boss that she should run Linux because there’s an iTunes clone? Get a clue! you say. You’re right. That’s the blasé —but important— stuff. The fun begins when you take note of the plugins. Plugins are what make Rhythmbox cool and give it any worthwhile functionality. I’ll explain about my two favorite plugins, Jamendo and Magnatune, and leave the others to your capable exploration (Edit → Plugins).

While I focus on the technology here, I’ll first briefly describe Jamendo and Magnatune. They are companies that embrace the world of digital media. Functionally, their added-value is trust of customers and respect for artists: you can listen to their libraries for free, on demand, and choose the price, if any, you want to pay. Philosophically, however, they are much more that. I highly encourage you to check them out: Jamendo, Magnatune.

The Jamendo and Magnatune plugins combine the media-browsing power and usability of Rhythmbox with the richness of their respective content. The beauty is in the seamless integration so that you (almost) forget that you haven’t (yet) bought the music —and lest you think I’m suggesting you mooch, I’m not. (Do check out both companies.)

To show off the power of these plugins, click on one of their icons under Stores in the sources list. (If an entry isn’t there, make sure its plugin is enabled. Edit → Plugins) Rhythmbox will take a minute to download an index of available music and then display the list in the main frame. Now you can peruse and listen to their library as if it were your own. No 30-second teasers. Way cool.

Playing music from

Rhythmbox has other plugins, not limited to DAAP streaming (share your music, even with iTunes), lyrics look-up (still has a few kinks, but cool nonetheless), and visualizations. Again, fiddlers and tinkerers alike, don’t worry. Be happy: there is well-written documentation detailing how to write a Rhythmbox plugin.

The Bad Stuff

I have only encountered a couple of sticking points with this otherwise great piece of software. At the time of this writing, Rhythmbox is at v0.11.3, meaning that it has a couple of rough spots. The ones that I have encountered were random crashes and were spaced far enough apart that I have not taken the time to track them down.

Another issue is one of memory. I unfortunately don’t know how it compares to its OpenSource competitor, Amarok, but I do notice the age of my box when running Rhythmbox with any other memory-hogging applications. My favorite plugins also use a lot of memory (presumably to hold the company music index). Rhythmbox is not alone in this area though, so it’s not a huge shock. Just annoying.

The last issue I’ll bring up is one of integration with the industry standard mp3 format. While I use the Ogg Vorbis codec for any new songs I rip, I still have a large personal library of mp3s I ripped during my Microsoft days. (Not to mention that most portable players, iPod included, don’t support ogg.) It’s the same problem that every other *nix media player has with licensing. The necessary codecs are fairly easy to acquire, but it is still a (major) problem.


To one whose main issue with Linux six years ago was the power, quality, and ease of media handling, Rhythmbox was a welcome find. I hope you enjoy it as much as I do.

Rhythmbox has been a member of the Debian archives since at least Sarge, and Ubuntu since Dapper.

mytop: a top clone for MySQL


Article submitted by Claudio Criscione We are running out of articles! Please help DPOTD and submit good articles about software you like!

Ever wondered “what the hell is that mysql server doing”? Search no longer, My top is the answer.

Mytop is a clone of top, a utility every sysadmin knows about, but instead of monitoring the system, it follows MySQL threads. In a nutshell, it’s a nifty command line tool that will connect to a MySql server and periodically run the SHOW PROCESSLIST and SHOW STATUS commands. It will then provide nice summaries of the results, and let the user apply various filters.

After the installation you can run mytop providing some parameters, for example: mytop -u root -p rootpass -d database, where database is the database you want to monitor, or you may create a .mytop file containing the configuration directives so you don’t have to type everything every time.


As you can see in the screen shot, the main screen can be divided in two parts. The upper part, the header, which you can remove pressing H, contains statistical informations on the server. On the the first line, you have the host name, the version and the uptime of the MySQL server (in days+hour:minutes:seconds format).The second line will show you the total number of queries the server has processed and the average number of query per second. The slow label marks the number of slow queries —remember you can log slow queries configuring your mysql server.

The third line contains now information: queries per second, slow queries and —if your MySQL version is recent— threads information. On the fourth line you can see the efficiency of the key buffer —that is, how often mysql will find keys in the buffer instead of reading from the disk— the average number of bytes that MySQL has sent and received and how many bytes it is sending and receiving now.

The second part of the screen will list the active threads. As you can see in the screen shot, the thread mytop is using will be listed too. The thread list will show you the user name, database and host name for each thread, which query each thread is running or its state. As the documentation states, it might be a good idea to run mytop in an xterm that is wider than the normal 80 columns if possible, so you can see the whole line.

While inside mytop, you can use h and d to filter for a particular host or database in the thread list, or u to filter on user name. The F key will reset all the filters.

A very useful command is the k command, able to kill a given thread, and you can use f to get more information about a running thread.

If you want to embed mytop in your script or webapp, you can use the -b switch to have mytop run in batch mode. In batch mode, mytop runs only once, does not clear the screen, and places no limit on the number of lines it will print; as the documentation says.

Mytop has been available both Debian and Ubuntu since a long time ago.

cpipe: Determine the throughput of a pipe


Article submitted by Todd Troxell. Please help DPOTD by submitting good articles about software you like!

A package I find useful is cpipe. It is simple tool you can use to determine the throughput of a pipe. Potential uses of cpipe might include determining the speed of:

For example, to determine the speed at which you can read from /dev/urandom and write to /dev/null, run:

$ cpipe -vt < /dev/urandom > /dev/null

This will produce output like the following:

thru:  56.045ms at    2.2MB/s (   1.3MB/s avg)    1.1MB
thru:  74.936ms at    1.7MB/s (   1.3MB/s avg)    1.2MB
thru:  21.748ms at    5.7MB/s (   1.4MB/s avg)    1.4MB
thru:  90.131ms at    1.4MB/s (   1.4MB/s avg)    1.5MB

You can also use it to measure read times, write times and to limit throughput:

$ cat /dev/zero | cpipe -s 100 -vt > /dev/null
thru: 1256.079ms at  101.9kB/s ( 101.9kB/s avg)  128.0kB
thru: 1259.942ms at  101.6kB/s ( 101.7kB/s avg)  256.0kB
thru: 1260.469ms at  101.5kB/s ( 101.7kB/s avg)  384.0kB

Cpipe’s upstream homepage is It is written by Harald Kirsch. It has been available in Debian since (at least) sarge, and Ubuntu since (at least) dapper.

Liferea: an RSS reader for GNOME


Article submitted by Paul Gear. Please help DPOTD by submitting good articles about software you like!

I recently discovered Liferea, an RSS reader/aggregator that uses Mozilla’s xulrunner as its web browsing engine. Its interface resembles that of a mail client such as Mozilla Thunderbird (a.k.a. icedove), and it works in much the same way, marking items as read when you click on them. Here’s a screen shot of Liferea in action:


Useful features include:

Installation is typically straightforward using the standard package management tools on Debian or Ubuntu. A GNOME menu item is automatically created, and I was immediately productive after finding the basic menu items. Each feed has a number of options available, and Liferea will intelligently choose an appropriate refresh interval for each feed, or use your default if you prefer that instead.

One feature that would be useful to add to Liferea (this review is based on version 1.0.27 from Debian etch) is emailing of links, but this is easily worked around by opening in an external browser, and using the email link option from there.

Despite discovering it largely by accident (I saw it in the user agent portion of my blog’s Apache log), Liferea has become a mainstay desktop application for me. If you don’t find Liferea appropriate for your needs, you might want to check Wikipedia’s list of feed aggregators for one more appropriate to your needs.

Liferea has been in Debian since at least sarge and Ubuntu since at least dapper (it was in the universe repository prior to feisty).

HTTrack: Website crawler / copier


Article submitted by Zhao Difei. We are running out of articles! Please help DPOTD and submit good articles about software you like!

HTTrack is a powerful tool that allows you to download / mirror a website to a local location.

Basically, HTTrack follows the links of the original website, recursively downloads them to the local directory while re-arranging the hyper-links structure so you can just simply open a downloaded HTML file and browse at the local machine. In contrast, the recursive mirror function of Wget will not rearrange the hyper-links on the web pages you downloaded, so they might still be pointing to remote locations.

HTTrack is a powerful tool but the syntax is very simple, let’s have a look at the basic usage:

$ httrack –help

HTTrack version 3.41-3 (compiled Jul 3 2007)
usage: httrack <URLs> [-option] [+<URL_FILTER\>] [-<URL_FILTER>] [+<mime:MIME_FILTER>] [-<mime:MIME_FILTER>]

A simple example that copies the website to the local “httrack” directory:

$ mkdir httrack
$ cd httrack/
$ httrack
Mirror launched on Sun, 30 Sep 2007 18:05:40 by HTTrack Website Copier/ [XR&CO’2007]
mirroring with the wizard help..
* (17854 bytes) - OK

HTTrack can also apply download filters, you may have noticed the “*_FILTER” things from the httrack usage line above, the plus sign + means to download a specific patter, and the minus sign - means to avoid download. The following examples (mirroring slashdot) show a simple usage of filters, the first one will not download items from the site, and the second one will not download items which have a MIME image/jpeg type, please notice that you can still view the things you did not download if you have the Internet connection available, because HTTrack will arrange the hyperlinks for you:

$ httrack*
$ httrack -mime:image/jpeg

To download two sites that share lots of common links, you can do:

$ httrack

There are still many options and more advanced usages left, interested readers may always read the manual. HTTrack is available in Debian from oldstable Sarge to unstable Sid and for Ubuntu from Dapper to Gutsy.

gddrescue: a tool for recovering data from damaged media


Entry submitted by John Carlyle-Clarke. DPOTD needs your help, please contribute!

I wanted to recover data from a failing hard drive, and asked on IRC if any good tools existed for Ubuntu. Someone pointed me towards GNU ddrescue (named gddrescue in Debian and Ubuntu), which is designed for rescuing data from any file or block device.

Don’t confuse this with dd_rescue (package name ddrescue). GNU rescue is a better tool.

The GNU site describes GNU ddrescue as a data recovery tool, and lists these features:

The algorithm of GNU ddrescue is as follows:

  1. Optionally read a log file describing the status of a multi-part or previously interrupted rescue.
  2. Read the non-damaged parts of the input file, skipping the damaged areas, until the requested size is reached, or until interrupted by the user.
  3. Try to read the damaged areas, splitting them into smaller pieces and reading the non-damaged pieces, until the hardware block size is reached, or until interrupted by the user.
  4. Try to read the damaged hardware blocks until the specified number of retries is reached, or until interrupted by the user.
  5. Optionally write a log file for later use.

To use it, you need to install gddrescue, but it is invoked as ddrescue. This is confusing, but it’s because dd_rescue had already taken the name.

The syntax is simple and the man and info documents are pretty good. Here is an example session with a data CD (no errors found).

$ ddrescue -v /dev/cdrom Recovered.iso ddrescue.log

About to copy 101763 kBytes from /dev/cdrom to Recovered.iso
    Starting positions: infile = 0 B,  outfile = 0 B
    Copy block size: 128 hard blocks
Hard block size: 512 bytes
Max_retries: 0    Split: yes    Truncate: no

Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued:         0 B,  errsize:       0 B,  errors:       0
Current status
rescued:   101763 kB,  errsize:       0 B,  current rate:    3801 kB/s
   ipos:   101711 kB,   errors:       0,    average rate:    2702 kB/s
   opos:   101711 kB

Useful links:-

Related software:-

gddrescue is available in Debian since Etch, and in Ubuntu since Edgy. It was started by Antonio Diaz Diaz in 2004.

Clusterssh: control serveral ssh sessions via a single interface


Article submitted by Maurizio Pedraglio. We are running out of articles! Please help DPOTD and submit good articles about software you like!

Clusterssh is a graphical utility that allows you to open several ssh connections and execute commands simultaneously in all of them. I find it powerful in many cases, for example when I’ve to perform a dist-upgrade on many different servers.

It provides a small window to control the sessions, and one xterm window for each one of them. Here are some screen shots using it on Ubuntu and Gnome 2.20.

You can open a ssh session simply clicking on “Host” and then “Add Host”.


Type user@server in the “Add Host” window and a new shell will appear in a new window.

You’ll be able to open n different ssh session versus n hosts. You should focus the input box in the controlling window to send commands to all the shells at once.


If you want to execute a command only in a single host, simply focus the right shell. The other shells won’t receive anything, and the command will take effect only on the selected host.

If you want to detach a shell from the parallel command execution, simple uncheck it in the “Host” menu. In the case below commands will be executed on host and localhost1 but not on localhost


Others commands available: use “Toggle active state“ to uncheck all host; “Retile” allows you to reorganise windows in the desktop. Clusterssh can also be launched from the command line, just type in a shell:

cssh serverA serverB … serverN

Clusterssh has been available both in Debian and Ubuntu since a long time ago

VirtualBox: A virtual PC for you


Article submitted by Tomas Pospisek. Please help DPOTD by submitting good articles about software you like!

VirtualBox is a piece of software that uses virtualisation to simulate a PC. With it you can run Windows, Open BSD or even Linux from your Debian system. Since it also runs on Windows and Mac OS, you can use it to run Debian from that other non-free OS. Note however that it only works on x86 and x86_64 hosts.

You can use it if you want to test or have a look at a live CD distribution or to help the KDE project test the new KDE4 without messing up your current desktop.

You can do all this in a nice and hassle free GUI, driven by menus or application wizards. Here you can see the mentioned "KDE Four Live" CD booted up and ready within VirtualBox.

virtualbox-ose screenshot

VirtualBox requires to load its own set of kernel modules and won’t start without them. There is a package providing pre-built modules for the stock kernels in testing, you will need to manually install the correct version for your kernel. If those packages doesn’t suit you, you will need to compile them; the standard Debian way to do this would be:

$ sudo apt-get install virtualbox-ose virtualbox-ose-sources module-assistant
$ sudo module-assistant prepare virtualbox-ose
$ sudo module-assistant auto-install virtualbox-ose
$ ls /usr/src/virtualbox-ose-modules-*
$ sudo dpkg -i /usr/src/virtualbox-ose-modules-*.deb

That last line will need to be re-written to pick the virtualbox-ose-modules package that corresponds to your kernel.

You’ll also need to add the users that should be allowed to run VirtualBox to the vboxusers group. I’m adding the current user here:

$ sudo adduser `whoami` vboxusers

Now you have to re-login so that your process context picks up the fact that you now belong to then vboxusers group. You can do that by "su"ing into yourself:

$ su `whoami` -

And here you go:

$ virtualbox

Note for those who like to know how it works: VirtualBox tries to run native code whenever possible, when it’s necessary it uses dynamic recompilation as QEMU does. It also moves guest code intended to run on ring 0 to ring 1, and because of this it doesn’t use the VMX features from the processor too much. See the technical documentation for details.

The virtualbox-ose package is available in Debian testing and unstable, and in Ubuntu since Gutsy (if you’re thinking of upgrading to testing, be sure you are aware of the implications, before doing so!). There’s also a backport to the currently stable Debian "etch" release.

KBibTeX: An easy to use and versatile Bibliography Manager for KDE


Article submitted by Gandalf Lechner. Please help DPOTD by submitting good articles about software you like!

So you work in a scientific environment and wonder how to organize bibliographic data, downloaded articles/preprints and links to online papers in such a way that…

Then KBibTeX is the program you are looking for. It uses the BibTeX format to store bibliographic data and provides a nice KDE interface to search through your BibTeX files. Its main window looks like this:


Managing your References

Since you can sort your data by various criteria such as author, title, year or journal, you will usually find the article you are looking for instantly. You then have the choice of either checking the reference data and abstract directly within KBibTeX, or opening the associated URL or pdf file. This provides the basic functionality necessary for using KBibTeX as a frontend to your collection of articles. More advanced features include the possibilities to attach keywords (tags) to articles, or to carry out online searches for a given paper, using Citebase, Google, Google Scholar, PubMed, Scientific Commons or SpringerLink, to name just a few available search methods.


Adding new articles manually…

In KBibTeX, you can add new bibliographic data to your collection in two ways, either manually or automatically by using online article repositories. If you add new papers manually, you have a multitude of possibilities for configuring the input - from basics such as the kind of BibTeX entry (article, book, IEEE, PhDThesis, Unpublished, …) over all the usual BibTeX data (authors, editors, journal, publication date, pages, ISBN, publisher, institution, …) to more advanced information such as keywords, abstracts, digital object identifiers (DOI), associated URLs and PDF files, and entirely user-defined fields.


…or automatically: Integration of online databases

One feature I particularly like about KBibTeX is the growing number of online article databases it supports. In version 0.2, the list includes PubMed, BibSonomy, SPIRES, Zentralblatt MATH, Citebase, DBLP and Amatex, which makes the program useful for people working in many different subjects, such as medicine, physics, mathematics or computer science. In the screenshot below you see how easily a SPIRES search is carried out within KBibTeX, and how the found bibliographic data can be imported into your BibTeX file.


Citation manager and interaction with LyX/Kile

One main field of use for KBibTeX is its ability to greatly assist you with creating citations in LaTeX documents. When typing a document using an editor such as Kile (or LyX), just select the articles you want to cite within KBibTeX and send them to the editor using a drop down menu or a hot key:


In particular, you don’t have to care about tedious BibTeX identifiers any more, since these are effectively administered by KBibTeX.

BibTeX source

What people used to editing their BibTeX files manually will like is that this possibility still exists in KBibTeX - by switching to Source View you can always adjust your BibTeX data manually if you like.


By strictly adhering to the BibTeX format, files edited by KBibTeX are also open for use with any other program understanding BibTeX.

Final comments

For Linux users working frequently with LaTeX and BibTeX, KBibTeX offers many nice features which can greatly simplify otherwise tedious and time consuming tasks. In view of its bibliography manager functions, KBibTeX is right now the best approximation to the great - but unfortunately still non-existing - KPapers. Hopefully it will develop further in this direction in the near future…


Further information about KBibTeX can be found on the website of the developer Thomas Fischer, or at For information on the KBibTeX mailing list, go here.

KBibTeX 0.1.5 is available in Debian ‘Etch’ (stable) and Ubuntu. The fresh version 0.2, which has numerous improvements over 0.1.5, should soon be available as Debian or Ubuntu packages, too. In the meantime, you can of course grab the source code and compile it, which is a quick “configure - make - sudo make install” mission.

NTP: be on time, always


Article submitted by Folkert van Heusden. Please help DPOTD by submitting good articles about software you like!

So there you are. You’re an average geek with a nice cluster of Linux systems. All configured to act together in whatever you’re doing with it.

Example 1: Your systems are connected via a fast pipe to the Internet. And since systems on the Internet are cracked on an almost hourly basis, you want your logging on all systems to be correct enabling you to contact the abuse center of the ISP of that script kiddie. For that you want correct timestamps in your logging. You want to know exactly when that cracker started his attacks.

Example 2: Besides being a cluster on the Internet, your cluster also acts as a software-building cluster, all connected via NFS shares and executed using make. For make to do its thing, the time on all nodes of your cluster must be equal or else files will be skipped.

Example 3: You’re a very environment friendly IT expert. You always travel by train to your customers. For this you need to know exactly how late it is so that you can jump on your bicycle and be at the train station just in time for that train.

For all of these examples you could get your watch and try to configure your systems to exactly the same time. That’s a bit of a challenge because typing the time takes time and interpreting the time on your watch (by your brain) takes time as well. Also, when the time is finally set, you’re not there: PCs have notoriously bad CMOS clocks with an enormous drift. That means that in a few days the clock of your system might be way off.

Now, there is a solution for all of these problems. One solution that takes care of it all and even more. The solution is called NTP. NTP stands for Network Time Protocol. An NTP daemon will determine the drift of the clock of your PC and then disciplines it up to the point that you can be sure it won’t be off. Also when connecting multiple systems, the NTP instances on each system can talk to each other (or a central NTP server) so that all of them correct their own time against each other! That solves example 2 and 3, but what about example 1: the problem that you would like to have the time of your PC to be the same as the rest of the Internet? For that, NTP can synchronize itself to time servers on the Internet.

Quite a few ISPs have a system set up in their network connected to a GPS or DCF77 receiver or something similar to which their customers can sync their computers. If your system gets cracked, you know for sure that the timestamps in the logging of your systems is the same as the ones of your ISP and, hopefully, of the ISP of the cracker as well.

If your ISP does not provide time servers (normally you should have between 3 and 6 upstream servers to ensure accurate time), you can let your local NTP daemon synchronize to the NTP pool project as well. The NTP pool project consists of volunteers with a static IP address and an NTP daemon that either synchronizes to steady trustworthy time sources (stratum 1). The NTP daemon included in Debian syncs by default to the NTP pool project.

With all the new Debian (and other Linux distributions) being installed the NTP Pool is under constant pressure to handle more traffic. If you have a static IP address and a stable server, please consider adding your server and help out!

NTP is included in all Debian and Ubuntu releases, and can be enabled or disabled via a checkbox on your Set Date/Time dialog.

AMOR: a desktop companion


Article submitted by Christian Haase. We are running out of articles! Please help DPOTD and submit good articles about software you like!

AMOR is a nice toy which is absolutely senseless. It displays a tiny figure on your desktop, running on top of your windows or falling down to the bottom. It is a KDE application, but it should be no problem to use it in Gnome (as I do).

worm on the move

In the package are several figures such as the FreeBSD-Daemon, and Tux (in 2 variations). There are also things like a ghost flown from a castle and some more. Some creatures are only static (the FreeBSD-Daemon, Little Billy, and the classic Tux), but the rest are animated. An list of the available themes is provided here.


If you like to see some tips, AMOR also supplies 2 kinds of speech bubbles for them. The first kind are the KDE-Tips and the second kind are for application related hints. Unfortunately there appear to be no applications making use of this second functionality.

The configuration is very simple. Just catch the creature to open the context-menu and choose to open the configuration-dialog.

Overall, as said by the name too, it is an “Amusing Misuse Of Resources”, but I do like the jumping glyphs while working.

AMOR was written by Martin R. Jones and Gerardo Puga. AMOR is in Debian from oldstable to unstable for the common architectures and in Ubuntu from dapper to hardy for amd64, i386 and powerpc. It depends only on some basic kde-libs (kdelibs4c2a, kdelibs-data, libqt3-mt) which are already installed on many systems. If you want to keep your non-KDE system clean try the “-s”-option of aptitude first and decide for yourself.

GPW: generate pronounceable passwords


Article submitted by Jared Raddigan. Please help DPOTD by submitting good articles about software you like!

Passwords can be a headache to remember, especially good, long passwords. Well, luckily for us Tom Van Vleck agrees, so he wrote a program to make pronounceable passwords up to 99 characters long.

Where do I primarily use this program? I use this program when trying to come up with WPA2 personal keys. I want the password to be good enough to protect the wireless network, but I don’t want it to be so good that I can never remember or type it in correctly. It’s amazing when you can pronounce something how much easier it is to remember and how much happier your end users are.

You can also use it for your email account, for storing your confidential data and, of course, for your GNU/Linux account! Using gpw is very easy:

$ gpw [number of passwords] [length of passwords]

So to make 5 passwords with the length of 12 characters just do

$ gpw 5 12

I usually run the command a number of times until I find a password that fits my needs the best.

In high security situations passwords are no longer acceptable, but when a password is needed, this is a good way to get a decent password that’s much better than using your dog’s name or the ever elusive “password” password. If you really want to increase security while still using a password, just change the length to something like 20 characters or above and then you can say that you no longer use passwords and switched to pass phrases and impress all your friends.

You will find gpw in both all versions of Debian and Ubuntu

Update: as mentioned in the comments, you can also check out pwgen. It is another password generator that creates somewhat pronunceable passwords, but can also generate them with symbols and numbers, and doens’t use any dictionary.

Debfoster: Remove a package and its dependencies


Article submitted by Alex Chekholko. Please help DPOTD by submitting good articles about software you like!

We recently ran a review on Deborphan. Here is a review on a similar tool: Debfoster. Debfoster exists to tell you which packages are installed on your machine merely as dependencies for other packages. It then gives you the option of removing the package and its dependencies. It also remembers your previous responses so that it does not ask you about the same packages each time.

Debfoster is most useful to keep your system very lean. However, with today’s large disks, it is more of an aesthetic utility.

The use of Debfoster is best illustrated by a simple example. See the manpage for more details. This example assumes that you already ran Debfoster and told it to keep all your existing packages, otherwise it will ask you about all of them.

I will look at the dependencies for a package called munin, then install it (and its dependencies), then use Debfoster to remove it.

$ apt-cache show munin
Package: munin
Priority: optional
Section: universe/net
Installed-Size: 996
Maintainer: Ubuntu MOTU Developers
Original-Maintainer: Munin Debian Maintainers
Architecture: all
Version: 1.2.5-1
Depends: perl (>= 5.6.0-16), perl-modules (>= 5.8.0) |
libparse-recdescent-perl, librrds-perl, libhtml-template-perl,
libdigest-md5-perl, libtime-hires-perl, libstorable-perl, rrdtool,
Recommends: munin-node, libdate-manip-perl
Suggests: www-browser, httpd

$ sudo apt-get install munin
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following extra packages will be installed:
libhtml-template-perl librrd2 librrds-perl rrdtool
Suggested packages:
libipc-sharedcache-perl httpd
Recommended packages:
munin-node libdate-manip-perl
The following NEW packages will be installed:
libhtml-template-perl librrd2 librrds-perl munin rrdtool
0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.

$ sudo debfoster

munin is keeping the following 4 packages installed:
libhtml-template-perl librrd2 librrds-perl rrdtool
Keep munin? [Ynpsiuqx?], [H]elp: N
Keep librrds-perl? [Ynpsiuqx?], [H]elp: N

rrdtool is keeping the following 1 packages installed:
Keep rrdtool? [Ynpsiuqx?], [H]elp: N
Keep libhtml-template-perl? [Ynpsiuqx?], [H]elp: N
Keep librrd2? [Ynpsiuqx?], [H]elp: N
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following packages will be REMOVED:
libhtml-template-perl* librrd2* librrds-perl* munin* rrdtool*
0 upgraded, 0 newly installed, 5 to remove and 0 not upgraded.

As you can see, Debfoster can help you clean up the packages that were
installed as dependencies. However, this functionality also exists in
aptitude and synaptic. Current versions of Aptitude or Synaptic will auto-remove the packages that were
installed as dependencies, negating the need for Debfoster. See Google: “aptitude vs apt-get” for more info.

Debfoster in all supported versions of Debian and Ubuntu.

timer-applet: a countdown timer applet for the GNOME panel


Article submitted by Vasiliy Faronov. We are running out of articles! Please help DPOTD and submit good articles about software you like!

When working at my PC, I often forget that I need to do something, say, in ten minutes. Therefore, I need an easy way to set up a reminder and be prodded when the time elapses. timer-applet is a small applet for the GNOME panel that does this.

The applet takes the form of a small button sitting on the panel. When you click it, the timer setup dialog box appears.

The timer setup dialog box

You may just enter the time after which you want to be reminded and click “Start Timer”. You can also set a name for the timer; it will be shown to you when the timer finishes, so you don’t have to painfully recall what you are to do. If your needs are more complex, you can set up multiple timer presets.

After you click “Start Timer”, the countdown begins. The panel button shows the time remaining. Clicking the button will pause the timer; clicking it again will allow you to continue the countdown or start it over.

The timer button displaying the remaining time

Once the chosen time period elapses, the applet notifies you with a bubble, and the button begins to flash.

The timer has finished

timer-applet is actively maintained and has a web site. It has been available in Debian since etch and in Ubuntu since dapper. Ubuntu gutsy features the 2.0 version of timer-applet which has a slightly better user interface.

The obvious downside of timer-applet is that it is only useful in GNOME environments. KDE users might want to check out the package kalarm (from KDE’s PIM suite). Also, the packages teatime and kteatime may be useful if you specifically need a tea timer.

Torus-trooper: a shoot-’em-up in a tunnel


Article submitted by Vincent Fourmond. We are running out of articles! Please help DPOTD and submit good articles about software you like!

Torus-trooper is a pretty nice abstract shoot-’em-up taking place in what could be called a space tunnel. You drive some kind of ship or car who has to stay on the sides of the tunnel, and shoot bad enemies. This game is pretty neat and original in several ways:

torus-trooper menuWhen you start the game, you can ask for full screen mode (which makes you feel more “into” the game) with the -fullscreen option. After that, you get a menu where you choose the level and start playing with the fire key. You can also see your last game re-played with the alt key.

Once in the game, you need few keys: arrows, or wasd for movement and acceleration; z for normal firing and x for charge shooting. esc will take you out of the game and p will pause it, as expected.

Some screen shots

torus-trooper in play torus-trooper in play torus-trooper in play

Torus-trooper is available in Debian testing, but it still hasn’t made its way into Ubuntu.

Thoggen: A GTK+ based simple DVD ripper


Article submitted by Onkar Shinde. We are running out of articles! Please help DPOTD and submit good articles about software you like!

Thoggen is a GTK+ based DVD ripper with very simple user interface. The name is based on the fact that it outputs the video to Theora/Ogg format.

Thoggen uses GStreamer 0.10 for video encoding. Although currently it supports only Theora/Vorbis/Ogg output, more formats can be expected in the future.

The good:

The bad:

The ugly:


Following are the screenshots of an example ripping workflow.

Title selection dialog
title selection

Encoding options
encoding options

Encoding window
encoding window

The package is available in Debian since Etch and in Ubuntu since Dapper. The upstream development is a bit slow but many features are planned for future releases.

cowsay: a configurable talking and thinking cow


Article submitted by Alexey Beshenov. We are running out of articles! Please help DPOTD and submit good articles about software you like!

Cowsay is a useless but very fun text filter written in Perl. If you send some text into cowsay, you get an ASCII cow saying your text. For example, cowsay Hello, World! prints

< Hello, World! >
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

To get a thinking cow, run cowthink:

$ cowthink Hello, World!
( Hello, World! )
        o   ^__^
         o  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Program word-wraps long messages unless the -n switch is used. The -W specifies where the message should be wrapped (default is wrapping at or before the 40th column). Everything left over after command-line switches is treated as the cow’s message. Another way is to send text to cowsay’s standard input. Pipe boring or annoying things to speaking / thinking cow and have fun:

$ uptime | cowthink -d
(  19:16:39 up 4 days, 22:50, 1 user, )
( load average: 2.21, 1.74, 1.42      )
        o   ^__^
         o  (xx)\_______
            (__)\       )\/\
             U  ||----w |
                ||     ||

-d is a switch for a dead cow. Other fun switches for cow are

The -e selects the appearance of the cow’s eyes (default is -e oo). The tongue is configurable through -T (default is no tongue).

You can also use other ASCII characters. Cowsay comes with a large set of “cowfiles” (actually, a pieces of Perl code) in /usr/share/cowsay/cows. Invoke cowsay with the -l switch to list them:

apt, beavis.zen, bong, bud-frogs, bunny, cheese, cower, daemon, default, dragon, dragon-and-cow, elephant, elephant-in-snake, eyes, flaming-sheep, ghostbusters, head-in, hellokitty, kiss, kitty, koala, kosh, luke-koala, mech-and-cow, meow, milk, moofasa, moose, mutilated, ren, satanic, sheep, skeleton, small, sodomized, sodomized-sheep, stegosaurus, stimpy, supermilker, surgery, telebears, three-eyes, turkey, turtle, tux, udder, vader, vader-koala, www.

The -f option specifies a particular cowfile (note that -bdgpstwy modes may not work with some characters as well as -T and -e switches):

$ cowsay -f moose Hi!
< Hi! >
   \   \_\_    _/_/
    \      \__/
           (__)\       )\/\
               ||----w |
               ||     ||

Cowsay is written by Tony Monroe. The current stable branch is 3.xx, but Cowsay 4 is also available for testing from the official webpage. Cowsay packages can be found in Debian from Oldstable to Unstable and Experimental, and in Ubuntu Dapper, Edgy, Feisty, Gutsy. Of course, the program depends on Perl.

Kivio: Powerful, easy to use Linux flowcharting


Article submitted by Ken Muir. We are running out of articles! Please help DPOTD and submit good articles about software you like!

So often we hear that Linux is lacking in key applications, but if there is one area in which there is a strong replacement for a key Windows application, it is flowcharting.

Kivio is part of the KDE Office Suite that offers basic flowcharting abilities, but with a twist. Objects are scriptable, and a back end plug-in system offers the ability to make objects do just about anything. The scriptable stencils use Python and there is also support for Dia stencils.

Despite the fact Kivio is a KDE-based application, it runs perfectly in the Gnome environment, although if you haven’t any other KDE applications installed, there are quite a few libraries and other essential KDE elements which have to be added to your system. Installation is completely straight forward and on first startup (Diag. 1), you are presented with the option of starting with an empty document or with the basic flowcharting stencil loaded.

Diag 1

Besides the basic flowchart stencils, there are collections of Dia shapes, geographic collections including maps and flags, hardware collections as well as entity relationship and UML collections. The desktop itself is a powerful working environment (Diag. 2), with palettes providing for an easy overview of your diagram as well as the management of layers, objects, geometry and protection. Alignment is easily managed with both manual and automatic guides. There is an extensive range of arrowheads available for connectors. Another powerful feature of the program is the ability to export pages in a large variety of formats, including PNG Image (.png), JPEG Image (.jpg), BMP Image (.bmp), Encapsulated Postscript Image (.eps), Portable Bitmap (.pbm), PCX Image (.pcx), Portable Pixmap Image (.ppm), SGI Image (RGB) (.rgb), X PixMap Image (.xpm), JPEG 2000 Image (.jp2), Krita Document (.kra), Adobe Illustrator Document (.ai), TIFF Image (.tiff), ILM EXR Image (.exr), Karbon14 Document (.karbon), GIMP Native Image Format (.xcf), Scalable Vector Graphics (.svg) and Windows® MetaFile (.wmf).

Diag 2

A freestanding text tool allows for easy documentation of diagrams. Kivio is very straight forward to use and you can quickly produce serviceable diagrams with very little effort. All the basic tools are intuitive to use and for power users there is an awful lot of sophistication below the hood.

Kivio is available for Debian Sarge, Etch, Lenny and Sid and for Ubuntu Feisty and Gutsy.
There is further information on Kivio at
You can find an excellent handbook by Ben Lamb at and a PDF version at
Current maintainer is Peter Simonsonn and the program is distributed under GPL version 2.

deborphan: find packages you don’t want


Article submitted by James Cameron. Please help DPOTD by submitting good articles about software you like!

If you’ve been reading debaday for a while, chances are you now have a heap of packages installed that you’ve tried out, some of which you want to keep installed, and some of which you have forgotten.

Those forgotten packages can cost you. They might contain setuid binaries or running daemons that could compromise your security. Future upgrades take longer, and there will be more to download. Your backups have grown. You are doing backups, right? That’s what duplicity was for.

If you’ve been using aptitude to install packages, then the autoclean command will remove a few things you don’t want.

An example using deborphan on a Debian Etch system:

# deborphan

In this example, deborphan discovered two fairly small packages that were superfluous, and so they can be removed. Since deborphan gives you only package names in this mode, they can be used in a command:

# aptitude purge `deborphan`

Or if you are in the habit of working at a level below aptitude:

# dpkg --purge `deborphan`

Recursive Deborphan

What you remove may reveal something else as newly orphaned. You
might even want to do this recursively:

while [ -n "`deborphan`" ]; do
    aptitude purge `deborphan`

You might call that a deborphan-recursive script.

Not Just Libraries

Deborphan gives you a list of packages installed on your system that no other package depends on. By default this will only show library packages. But it can also be told to give you a list of all such packages using the -a flag … consider this compound command:

# dpkg-query -W --showformat='${Installed-Size} ${Package}n' 
`deborphan -a | awk '{print $2}'` | sort -rn

You might name this deborphan-by-size. What it does is give you a sorted list of packages that nothing depends on, in descending order by package size. Work down from the top, choosing what you do not want installed. But remember that every time you remove a package, the list might change because the removed package might have dependencies that are now orphaned.

What’s the worst that could happen? You might remove some package that you will have to reinstall and reconfigure. You have backups. [If you have installed any applications without using the Debian packaging system, it’s a different story. You will have to manually make sure that the packages deborphan removes are not required for them to operate. Ed.]

Or how about a small system where you have removed as much as possible so that you have the most space available for your own stuff? Deborphan can be used step by step to challenge you to remove packages you don’t really need. Eventually dpkg, apt-get, or aptitude will warn you about removing a package it considers essential. That’s where you stop, unless you really want some trouble.

Sometimes library packages are installed just to satisfy some dependency of a package in development. Developers will find deborphan’s decisions cause them to reinstall packages they need for software development … an answer to that is to either create a metapackage that refers to the packages you need, or to do your package building in a pbuilder.

Deborphan is available in Debian and Ubuntu since before time began.

GNU wget: Get all the web content you like on your local machine


Article submitted by Chris Camacho. We are running out of articles! Please help DPOTD and submit good articles about software you like!

Wget is so flexible you’ve probably been using it for years without knowing it, many scripts use it because it is a boilerplate method of grabbing files, it will even automatically retry under certain circumstances…

Probably the best compliment I can pay to it, is that script writers can use it and then forget about it.

It’s one of those great tools that makes *nix so great, its simple, it does what it says on the tin, and like many other pieces of unix “glue”, it’s robust.

Another cool thing about wget is that it’s non-interactive, which means you can start a new download, disconnect from your current session and find your downloads the next time you connect again.

How to use it

The most simple way to invoke wget is by typing wget URL/fileName

$ wget

If you typed in this command you now have a file called index.html in the directory you where in while typing. This file contains the contribute page of the Debian package of the day blog. Read It, DPOTD needs you ;)

Get a directory hierarchy

To get the full content of a directory and his subdirectories you will need to specify wget that it should download your URL recursively. To do this you will need to add the -r option:

$ wget -r

This command will generate a local mirror of the debaday blog. Note that wget respects the robots.txt file by default, if it exists. This means it will not download directories and files excluded by the robots.txt file.

Multiple URLs

Wget supports multiple URLs. You can either specify them in a file (one URL per line) or specify them in the command line (space separated).

$ wget url1 url2 ... urlN

or specify the URL container with the -i option

$ wget -i filePathAndName
Other options

Wget has a lot more options, you can for instance use:

There are plenty other options in wget, the best way to know them is to read it’s rich man page. For those vista refugees amongst you try typing the following into a terminal ;)

$ man wget


As wget is part of the GNU project we assume it’s part of most Linux distribution. Never the less, official Debian and Ubuntu package are available:

Community & developers

GNU wget is currently being maintained by Micah Cowan. The original author of GNU Wget is Hrvoje Nikšić.


Decibel Audio Player: An Audio Player for Human Beings


Article submitted by François Ingelrest. We are running out of articles! Please help DPOTD and submit good articles about software you like!

What is an Audio Player?

Aren’t you tired of those audio players with billions of useless features that clutter up their graphical interface? I am. Most of the time, the player looks good on paper, but when I’m faced with the interface, I don’t even know where to start in order to play my music. There are a lot of buttons, lists, combo boxes a bit everywhere and their usage is not so intuitive.

Above all, the worst thing about these features is that I really don’t need them. Do you really rate your tracks? I don’t. I know my music collection, I know what I like and what I don’t. Do you really need those fancy smart playlists? I don’t. When I want to listen to my music, I want to listen to an entire album, not just a track from here and another one from there.

A Solution Exists

Decibel Audio Player is a simple and nice audio player for the GNOME desktop. GNOME was precisely designed to be simple and nice, so why bother with a complex player and a cluttered graphical interface? Decibel Audio Player follows as closely as possible the GNOME Human Interface Guidelines, here is how it looks like:

Main Library

Another key aspect of this player is its modular design that allows users to enable only the features they want. The core of the player is very small and simple, and features are implemented in their own module that can be enabled/disabled as needed through the preferences:


So if you don’t want a feature, you simply disable the corresponding module and it gets out of your way. Decibel Audio Player is built on top of GStreamer, and currently supports MP3, Ogg Vorbis and FLAC formats. Its interface is intuitive, and tracks may be dragged, reordered, removed… as needed. Although it is still a young project, current features are correctly implemented and simply work as they should.


Decibel Audio Player is available in Debian unstable/testing and Ubuntu Gutsy Gibbon repositories (package decibel-audio-player). A more recent version, with music library support, is also available from the website. If you’re looking for a simple audio player, give it a try. You won’t be disappointed.


bc: an arbitrary precision numeric processing language


Article submitted by Markus Grunwald. We are running out of articles! Please help DPOTD and submit good articles about software you like!

Debian currently offers 84 packages that mention “calculator” (apt-cache search calculator | wc -l). An alternative to the more eye-candy-heavy calculators on offer is bc. bc has no fancy GUI, but is instead console-based and allows a simple mathematical language, making it really fast and programmable.

Everyday use

By default, bc behaves quite unhelpfully: zero digits and no predefined functions such as sin, cos, log etc. You can remedy this by calling bc with the -l parameter, so that it uses the standard math library. Instead of always typing “bc -l”, you can use the fact that bc reads the environment variable BC_ENV_ARGS. So for all the bash guys: add an export BC_ENV_ARGS=-l to your ~/.bashrc.

Let’s try the everyday use first: some simple calculations. Just type your expression and complete it with the enter key:

$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
850*77.1        <enter>

That’s better than Excel 2007! And all of you terminal people will get this answer quicker than every KDE or GNOME user who starts their GUI calculator.

Custom scale and functions

The scale (total number of decimal digits after the decimal point) of bc’s results is 20 when you run it with “-l”, but you can set it up to a maximum of 2147483647. So to get a quite good estimate of π, just type:

scale=200  <enter>
4*a(1)     <enter>

Impressive. But what’s “a(1)”? bc uses very short names for the trigonometric functions. a(x) is the arctangent of x. For all of you who like longer names, you can define your own function and write it in a file. Add this file to your BC_ENV_ARGS and it will be read every time you start bc. The best thing to do is to get extensions.bc from

My BC_ENV_ARGS looks like this:

$ echo $BC_ENV_ARGS
-q -l /home/gru/.bc/extensions.bc

extensions.bc defines several functions by the names people normally know them, for example:

define sin(x)
        return (s(x))

This way, you can define your own function. I have to convert ratios to decibel and use this quite often:

define db(x,y)
        return 20*log(x/y);

Converting to other bases

bc can convert from and to arbitrary number bases. Say you want to convert from decimal to hexadecimal. Set the output base obase to 16:

obase=16 <enter>

And of course, you can calculate with these numbers too:


You can set the input base too:

ibase=16 <enter>
sin(AFFE) <enter>

I leave the interpretation to the user ;)

Use in shell scripts

Bash is a nice shell, but when it comes to complex calculations $(()) won’t do the job. bc can help:

$ a=$( echo "l(1024)/l(2)" | bc )
$ echo $a


I searched quite long for the ideal calculator for me. After trying several GUI calculators, I didn’t find mine. Then I tried bc and it’s perfect for me. I hope you will like it too.

bc is available from Oldstable to Unstable in Debian and Ubuntu Dapper, Edgy, Feisty and Gutsy.


hpodder: a podcast client that just works.


Article submitted by Matt Clare. We are running out of articles! Please help DPOTD and submit good articles about software you like!


hpodder is a command-line podcast client that just works. The command arguments are simple to master and allow for flexibility in downloading.

In depth

So you’ve have been desperate for a podcast client that rivals the ease and efficiency of iTunes (but have found Linux clients wanting) then hpodder may be the answer to your quest. Having found other clients to be a little jack-of-all-trades for your needs or else, just plain buggy, hpodder is a breath of fresh air.

Once installed, typing hpodder in the terminal will get things under way. The initial run will allow you to make a directory for access your podcasts from and give you the option to subscribe to the sample feeds. If you pass and just want to get onto subscribing your own feeds type:

$ hpodder add

This will add the feed to the hpodder database and assign an ID that allows for easy specification and manipulation of a feed later on. Hpodder will handle any valid podcast feed, even if it is not the traditional .xml address —including feeds extracted from an OPML export of iTunes podcasts. Once you have your list of podcasts you wish to download, simply type:

$ hpodder update
$ hpodder download

Or, if you want to make life easy:

$ hpodder fetch

As this does effectively the same job as the two commands combined. If you are using hpodder to listen to a podcast that you have perhaps been listening to on another machine, and want to download only the most recent episode, you can do this by typing:

$ hpodder catchup
$ hpodder fetch

If you want to only download or update specific podcasts, you can do so by specifying the podcast’s ID after the command (update, download, fetch, catchup). If you want to delete a podcast type:

$ hpodder rm ID

Where ID is the podcast’s ID number (else you risk deleting them all!).

Downloading the actual episode of your podcast is handled by cURL and is fast, efficient and if interrupted for whatever reason, can be picked up later on without having to start the download from the beginning.

If you want to make hpodder fetch on a regular basis, you can add it to your cron jobs and set it to run as frequently as you like.

If you want a full list of the commands and more subtle features available to hpodder users you can download the manual in PDF format, or read it online.

Any downsides?

The only real downside is that you need to use a second program to listen to your downloaded podcast episodes, but then most people have a favourite media player (kaffeine, mplayer, totem, vlc et al) that they use given the chance.

hpodder is available in Debian since Etch, and in Ubuntu since Feisty

weather: check weather conditions and forecasts on the command line


Article submitted by Dann Frazier. We are running out of articles ! Please help DPOTD and submit good articles about software you like !

weather, provided by the weather-util package, is a simple command line tool that lets you check current conditions and forecasts. It uses METAR data that it fetches from the the National Oceanic and Atmospheric Administration and forecasts from the National Weather Service. The documentation says it’s limited to providing information for the United States, but in fact, METAR data is available for stations all around the world. The forecast won’t be available, though.

Many locations are already pre-configured in the package’s /etc/weatherrc. If your location is already defined, you only need to look up the alias to begin using it. For example, /etc/weatherrc provides the following entry for Albuquerque, New Mexico:

City = Albuquerque
St = NM

The alias for Albuquerque is ‘ABQ’. Therefore, weather ABQ will show you the current conditions for Albuquerque:

$ weather ABQ
Current conditions at Albuquerque International Airport (KABQ)
Last updated Sep 26, 2007 - 04:56 PM EDT / 2007.09.26 2056 UTC
  Wind: from the ESE (120 degrees) at 3 MPH (3 KT)
  Sky conditions: mostly clear
  Temperature: 77.0 F (25.0 C)
  Relative Humidity: 15%

weather -f ABQ will include a local forecast:

$ weather -f ABQ
Current conditions at Albuquerque International Airport (KABQ)
Last updated Sep 26, 2007 - 04:56 PM EDT / 2007.09.26 2056 UTC
  Wind: from the ESE (120 degrees) at 3 MPH (3 KT)
  Sky conditions: mostly clear
  Temperature: 77.0 F (25.0 C)
  Relative Humidity: 15%
City Forecast for Albuquerque, NM
Issued Wednesday afternoon - Sep 26, 2007
  Wednesday night... Low 52, 0% chance of precipitation.
  Thursday... Sunny, high 81, 0% chance of precipitation.
  Thursday night... Low 54, 5% chance of precipitation.
  Friday... Partly cloudy, high 80.
  Friday night... Low 56.

You can add new locations to this file directly, or to per-user ~/.weatherrc files. You can also define a default location by adding a stanza with an alias named “default”. For example, here’s the contents of my ~/.weatherrc file:

City = denver
Forecast = True
St = CO

City and St (state) are used for obtaining forecasts, while ID is used for retrieving current conditions. I use this configuration to tell weather to retrieve forecasts from Denver, CO but to use a station that is closer to me for obtaining current conditions. Note that if you do not specify a location and have no alias named ‘default’, weather will fall back to a hard-coded default of Raleigh, NC.

Knowing what information weather uses to obtain the data you request is important when defining your own configurations. For example, say I want to know the current conditions for Lubbock, TX and I run the following command:

$ weather -o --city=Lubbock --st=TX
Current conditions at Fort Collins-Loveland Municipal Airport (KFNL)
Last updated Sep 26, 2007 - 05:55 PM EDT / 2007.09.26 2155 UTC
  Wind: from the ENE (070 degrees) at 5 MPH (4 KT)
  Sky conditions: clear
  Temperature: 71 F (22 C)
  Relative Humidity: 23%

(The -o tells weather to omit the forecast). Notice that weather gave me the current conditions for my ‘default’ alias, not for Lubbock. This is because weather looks up current conditions by station ID, not by city/state. If I pass the station ID instead, I’ll get the information I was looking for:

$ weather -o --id=KLBB
Current conditions at Lubbock International Airport (KLBB)
Last updated Sep 26, 2007 - 05:53 PM EDT / 2007.09.26 2153 UTC
  Wind: from the S (170 degrees) at 9 MPH (8 KT) gusting to 18 MPH (16 KT)
  Sky conditions: mostly cloudy
  Weather: Cumulonimbus clouds, towering cumulus clouds observed
  Temperature: 86.0 F (30.0 C)
  Relative Humidity: 38%

Being a command-line tool, weather lends itself to various automatic processes. For example, you might want to cancel your weekly bicycle pub crawl if the forecast shows a high chance of rain:

$ cat /etc/cron.weekly/pub-reminder

set -e

if weather -f | egrep -q '(100)|([5-9][0-9])% chance of precipitation'; then
 mailx -s 'Cancellation' $PUBCRAWLEES < ~/pub-crawl-cancelled
 mailx -s 'Get on your bike' $PUBCRAWLEES < ~/pub-crawl-is-a-go

Of course, I’d just recommend a rain jacket.

weather is provided by the weather-util package and is available in Debian ‘etch’, testing and unstable, and Ubuntu ‘edgy’, ‘feisty’ and ‘gutsy’.

Edited to add: for international weather station ids, users can look on this US government website. Thanks hideokuze for the info.

Debaday needs your help (yeah, seriously)


Debaday didn’t publish anything last Sunday and Wednesday. It was simply because we have nothing to publish. :(

Due to the vacations of two editors (out of three), we were slower than usually to reply to submissions. But it’s not like we have received a lot of submissions recently.

We really need *your* help! Send us an quality article. See Contribute page for details. If you always wanted send us an article, but you did not know what to write about, here you have a small list of application people have requested or we think could be interesting to feature:

If you are a user of any of this program and think it deserves be featured in debaday, send us an entry! :)

Also, we really need a fourth editor. The task includes replying to submissions, suggesting improvements, doing some minor editing and HTML formatting. You don’t need to be a native english speaker (the 3 editors are non-natives currently). And you get to read all entries before they are published, so you can show off with cool apps that nobody knows! If you can dedicate a little time on a regular basis to this (about 1 hour per week would be awesome), and think you won’t become crazy after working with ana, lucas and Tincho, just contact us!

GPRename: GTK2-Perl Batch Renamer


Article submitted by Johan Spee. We are running out of articles ! Please help DPOTD and submit good articles about software you like !

GPRename is a complete batch renamer for files and directories coded in GTK2 and Perl.

GPRename has been around since 2001, is quite stable and still very much alive today. At the start of 2007, it was ported from the deprecated GTK-Perl to the new GTK2-Perl and in mid 2007 the new 2.4 release is now GPL-3. The package was recently added to the Debian repositories (currently available in ‘testing’ and ‘unstable’) and can be used in many languages.

The program is lightweight and easy to use, yet supports a very complete set of features. In this respect it is comparable to renamers of more fame such as Konqueror’s KRename (KDE) or Thunar’s Bulk Rename (XFCE). GNOME does not have an official renamer but GPRename can easily fill that void. With a simple ‘action’ it can be integrated into Nautilus, the GNOME’s file manager (the prefab action is available). With the action installed any directory in Nautilus can directly be opened in GPRename through the right-click context menu.


Even relatively inexperienced Linux users will have little trouble with the graphical interface, which in many ways resembles that of Nautilus and other file managers. The left panel shows a directory-tree for the usual point-and-shoot navigation. In the panel next to it files or directories (separate tabs) that are to be renamed can be selected. A preview of the modified names is also shown here, either after clicking the ‘preview’ button or automatically. Other useful automated options include:

The bottom panel has four tabs, one for every basic rename function. The screenshots are quite self-explanatory:

Case change (UPPER, First Letter, lower)


Insert or delete text at a given position


Replace text (options: ‘case sensitive’ and ‘regular expressions’)


Rename using incremental numbers (pic-01.jpg, pic-02.jpg etc.)


Don’t hesitate to give it a try, since there’s always the very reassuring ‘undo’ button. You never know.

GPRename is available in Debian testing and unstable, and will also be available in Ubuntu Gutsy.

newsbeuter: RSS feed reader for the text console


Article submitted by Andreas Krennmair. We are running out of articles ! Please help DPOTD and submit good articles about software you like !

RSS is a set of XML-based formats to describe articles (including title, link to the original article, description, etc.) which are usually transported via the HTTP protocol. These days, the majority of blogs and news websites provide RSS feeds. In order to read these feeds in a useful way, special programs, called RSS feed readers or RSS aggregators, can be used.

Newsbeuter is an RSS feedreader for the text console. It comes with a user interface in the style of such popular text tools such as mutt and slrn, and aims to be the text-mode RSS feedreader with the most features, providing the greatest flexibility for its users.

Starting with newsbeuter

After installing newsbeuter with a simple aptitude install newsbeuter (currently in Debian unstable, only), you can run newsbeuter for the first time, and is presented with the following message:

Error: no URLs configured. Please fill the file /home/ak/.newsbeuter/urls with RSS feed URLs or import an OPML file.

newsbeuter 0.6
usage: ./newsbeuter [-i <file>|-e] [-u <urlfile>] [-c <cachefile>] [-h]
        -r              refresh feeds on start
        -e              export OPML feed to stdout
        -i <file>       import OPML file
        -u <urlfile>    read RSS feed URLs from <urlfile>
        -c <cachefile>  use <cachefile> as cache file
        -C <configfile> read configuration from <configfile>
        -v              clean up cache thoroughly
        -h              this help

This means that newsbeuter needs to be configured with the RSS feed URLs that you want to read. This can either by achieved by manually filling
~/.newsbeuter/urls with RSS feed URLs (one by line), or by importing an OPML file by running newsbeuter -i blogroll.opml. OPML is a XML-based format for describing outlines, and is in wide use to import and export lists of RSS subscriptons between RSS feedreaders.

Newsbeuter can be configured via its configuration file ~/.newsbeuter/config. A wide range of properties and behaviour can be configured, so it’s wise to have a look into the provided documentation.

A reasonable configuration to start with is the following setup. The manpage lists all available configuration options, so there’s a lot to experiment with.

# This is an example configuration file for newsbeuter
# save this as ~/.newsbeuter/config

auto-reload yes       # automatically start a "reload all" thread at a defined interval
reload-time 30        # reload all feeds every 30 minutes
confirm-exit yes      # always ask the user whether he really wants to quit

Advanced Features

What makes newsbeuter so interesting are the advanced features it comes with. For previous users of SnowNews (another console-based RSS feedreader), newsbeuter supports snownews extensions, which are easy to develop and of which a huge collection is readily available.

Newsbeuter also comes with support for podcasts. Newsbeuter contains functionality to help collect podcast download URLs (either automatically or manually), which can then be downloaded with a separate tool called “podbeuter”.

Another very interesting feature is the internal filter language. It’s a generic expression language that makes it easy to define complex search criterias, which cannot only be used both for searching for feeds and articles, but also for defining rules for ignoring certain articles (think of killfiles for RSS feeds), or configuring “meta feeds”, feeds that contain only articles from other feeds which match a filter expression. The documentation comes with plenty of examples for these use cases.

Other features supported by newsbeuter are a flexible categorization functionality based on tags (every RSS feed can be tagged with keywords, and the displaying of RSS feeds can be filtered by tags), notifications about new articles via external programs or directly to a GNU screen session, free configurability of key bindings and colors, and an internal command line.


The typical feedlist of newsbeuter, giving the user an overview over configured feeds and the number of downloaded and unread articles per feed:

Newsbeuter renders the HTML that is contained in article descriptions, and lists all links that are contained in the article (these links can even be opened with a simple keypress in a freely configurable web browser):

Colors can be freely configured, as demonstrated by this screenshot:

Internationalization (I18N) and localization (L10N) are important in the newsbeuter project. Newsbeuter can perfectly handle Unicode characters, and its user interface is currently available in English (default), German, Italian, French and Russian. The screenshot shows a Russian newsbeuter, displaying a Japanese RSS feed:

Comparison with other RSS Feedreaders

A few other text-mode RSS feedreaders beside newsbeuter exist. The most prominent ones are Snownews and raggle. Both Snownews and raggle have in common that they are no longer under active development. Snownews itself is hard to maintain and extend, and raggle is relatively slow (even on new, fast computers), because it is purely implemented in the Ruby scripting language. Especially Snownews lacks a lot of features compared to newsbeuter, such as support for the Atom XML format and HTTPS support.

One goal of newsbeuter development was to build a feed reader that does not only fix the deficiencies of the existing tools and integrate all the useful features, but that is also easily extensible. This goal has been achieved, and now development is aiming at more advanced features: future releases will contain a flexible and extensible bookmarking support, improved support for notification frameworks such as Growl, and synchronization with web RSS feed readers such as Bloglines.

More Information

Since newsbeuter is relatively new (development started in November 2006, the first Debian package entered unstable in February 2007), it is only available in unstable and testing (in a completely outdated version). It will be available in Ubuntu Gutsy, but the version is outdated already as well.

Listadmin: command line mailman moderator queue manipulation


Article submitted by Kaerast. We are running out of articles ! Please help DPOTD and submit good articles about software you like !

You’ve ended up moderating many Mailman lists across multiple servers, you’re losing track of what you’re moderating, the emails asking you to moderate posts are either filling up your inbox or getting ignored. Luckily there’s a command line tool which will make your life much easier.

Listadmin is a command line tool to manipulate the queues of messages held for moderator approval by mailman. It is designed to keep user interaction to a minimum, in theory you could run it from cron to prune the queue. It can use the score from a header added by SpamAssassin to filter, or it can match specific senders, subjects, or reasons.

It can handle multiple list servers, using multiple passwords, and in more recent versions can cope with SSL too. To get started you need to edit the .listadmin.ini file in your home directory. Mine looks something like this:

spamlevel 8
default skip

# server
adminurl http://{domain}/cgi-bin/mailman/admindb/{list}
password "mypassword"

# server
adminurl https://{domain}/mailman/admindb/{list}

password "myotherpassword"

password "mythirdpassword"

This config files allows us to moderate queues on multiple lists using multiple passwords. With this configured, we can now run listadmin:

kaerast@bennet:~$ listadmin
fetching data for ... nothing in queue
fetching data for ... nothing in queue
fetching data for ... nothing in queue
fetching data for ... nothing in queue
fetching data for ...

[1/1] ============== =======================
Subject:  test
Reason:   Post by non-member to a members-only list            Spam? 0
Approve/Reject/Discard/Skip/view Body/Full/jump #/Undo/Help/Quit [S] ? r
Why do you reject? test messages aren't allowed
Submit changes? [yes]

Newer versions, ie. those in Lenny and Sid can also add and remove members from a list:

kaerast@hiro:~$ listadmin --add-member

Listadmin is available in Ubuntu Feisty (universe) and all Debian versions. Only Debian Lenny and Sid have the add/remove subscribers functionality added.

duplicity: Encrypted bandwidth-efficient backup using the rsync algorithm


Entry submitted by Vincent Fourmond. DPOTD needs your help, please contribute!

I’ve recently grown paranoid about my data, and I keep using rsync to keep backup of various files a bit everywhere. It works great for most of the things I use, but it lacks fundamental things you would want from a real backup system, such as the possibility to come back to an earlier state.

So I went looking for something else, and I found that duplicity shows somehow the same syntax and ease of use than rsync: there is no need to write a configuration file, and it uses a very similar way to specify sources and targets. It features among others:

To use it, just run something like:

duplicity data scp://vincent@server/saves

Or, for local file backup:

duplicity data file:///var/backup/data

The target directory must exist: duplicity does not create it for you. If you don’t plan to use GPG encryption, be sure to add –no-encryption to the command-line. Here is duplicity in full action:

11:58 vincent@server ~ duplicity --no-encryption Data file:///home/vincent/saves
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1187949557.65 (Fri Aug 24 11:59:17 2007)
EndTime 1187949577.54 (Fri Aug 24 11:59:37 2007)
ElapsedTime 19.88 (19.88 seconds)
SourceFiles 3869
SourceFileSize 107865956 (103 MB)
NewFiles 3869
NewFileSize 107865956 (103 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 3869
RawDeltaSize 106836592 (102 MB)
TotalDestinationSizeChange 26514785 (25.3 MB)
Errors 0

duplicity was already part of Debian Sarge and Ubuntu Dapper. Development seems still alive, even though there are some bugs still at large.

Katapult : faster and easier access to your applications, bookmarks and files


Entry submitted by Ingo Wagener . DPOTD needs your help, please contribute!

Everybody must know the feeling – you installed this great program the other day and now you want to run it. You remember the name, but where in the world it is in the menu? Under System? Under Utilities or even Settings to name but a few options? And so the annoying search starts.

Granted, there are ways of getting round this such as the familiar ALT+F2 and then typing the entire name of the program. Some of us would go to (or already are on) the command line – again followed by typing the program name, perhaps aided by hitting a tab or two.

Those who are well organised – and at times I count myself amongst them – incorporate it into the quick starter on the taskbar so as to get accustomed to its icon and see how usage progresses.

But what do you do when you are not at your peak in terms of organisation (i.e. most of the time) or worse, you don’t even remember the full name of the program?

Help is at hand in the form of Katapult. This is a nifty little helper which, once installed, is called into action by hitting ALT+space and greets you with this:

Say I want to take a screenshot. Running KDE I want to call up the program ksnapshot. What is the quickest way of getting to it? 5 keystrokes as far as I am concerned – this is without having a special keyboard shortcut set up, which obviously could reduce this number. How? Here goes, ALT+space and you get the above, then I type a K, as the program I am after starts with a K followed by an S and finally the N and I get the following:

All I have to do is hit enter and my desired programme comes up. So how exactly does it work? Why do I have to type KSN to get the shortcut for Ksnapshot? Here is a breakdown of what happens in between after I have typed both the K and the KS:

You can see the typed letters highlighted in blue and cycles through all the possibilities until it hits on the one you want – and you press enter.

But Katapult will not only work on programs but also functions as a calculator, it even indexes files! Thus, if I wanted to quickly find out what the result of 56324/18*17 is I’d type ALT+space followed by the what I want to calculate. Katapult will answer to this query as follows:

Alternatively, if I wanted to listen to a specific song like “The battle of Epping Forest” I’d type any part of the song’s name, in this case “epping” and Katapult greets me with the following result:

But that is not all, it also indexes your bookmarks. To give you an idea of its manifold capabilities here is a screenshot of its configuration window:

All I can say is that is has increased my productivity, and prolonged the life of my mouse’s batteries in equal measure.

Conky: highly configurable system monitor for X


Entry submitted by Casey Stamper. DPOTD needs your help, please contribute!

Conky is one of my favorite applications for all of my Linux distros. It is a light-weight system monitor (according to the project page) that can monitor many different aspects of your computer. You choose what to monitor and you choose where the monitor is displayed on your desktop through use of a configuration file - .conkyrc. I like to have my display on the top right of the screen and I have the background transparent so it looks like it floats on the desktop.

Here is a screenshot: (click on the image for full size)

I especially like the CPU temperature monitor because I like to keep track of how hot the CPU gets when I’m doing CPU-intensive operation. The application is very light on resources (especially important for my Inspiron 5160) but allows you to keep track of a lot of system parameters without the bloat of a GUI front end.

Among other things, I monitor disk space, memory usage, system load, network download and upload speed, internet connections by protocol, RAM usage, swap usage and running processes. Although it takes up a bit more memory to do so, I also monitor the /var/log/messages file (the same as having a window open running tail -f /var/log/messages just to see if anything is happening behind the scenes that I should be aware of.

With this utility running all the time, if something should suddenly crash or if I have any slowdowns or anything else unusual, a quick glance at these various readouts will usually allow me to narrow the problem down to something specific.

If you use GKrellM or another built-in monitoring package, try this one out - I think you will like it.


burgerspace: a free clone of the classic arcade game Burgertime


Entry submitted by Alexey Beshenov. DPOTD needs your help, please contribute!

Burgertime (originally entitled バーガータイム, Hamburger) is a popular 1982 Japanese arcade game created by Data East Corporation. The game even has an interesting entry in Wikipedia. Among other ports and remakes, there are a free X11 clone called “BurgerSpace” written in C++ by Pierre Sarrazin.

The behavior of the original arcade was not replicated exactly in BurgerSpace, but clone has the same scenario. You play the part of a chef Peter Pepper who must create burgers by stepping repeatedly on the ingredients until they fall down onto trays. It’s not so easy since you also must avoid food characters who chase you around the maze.

Evil food enemies (namely Mr. Hot Dog, Mr. Pickle and Mr. Egg) could be temporarily killed by crushing them under falling burger slices or dropped with them. The dropped enemies are stunned for a few seconds. You can also shake pepper on nearby monsters to make them harmless for a few seconds.

The game could be started via the command burgerspace or from the entry in the GNOME Games menu.

Use the following keys:

↑ ↓ ← →
Throw pepper.
Pause / resume game.
Quit the game.

(Unfortunately, there are no complete keystroke configuration.)


You can rich extra scores / peppers by collecting appearing things. Level will be completed if you create all burgers and the next level will be based on more complex maze layout, increased number of burger pieces and elevated speed. Game records available from the official webpage and you can report your outstanding scores to maintainer.

Program requires the SDL multimedia library. Burgerspace could be used on GNU/Linux machines and there are even a port for some-proprietary-system. The burgerspace package is available in both Debian and Ubuntu. Have fun!

IPTraf, a ncurses based LAN monitor


Entry submitted by Bart Veraart. DPOTD needs your help, please contribute!

Sometimes you just want to see what connections your machine is making to the outside world and what ports it’s using. While wireshark and tcpdump are really nice for inspecting detailed package contents. IPTraf is really about connections and interface statistics. Because iptraf is based on ncurses the program can be run from a text-console and still have a (primitive) `gui`. Navigation through the menus can be done using your arrow keys. Most of the time all the available options and their keys are shown on the bottomline of the sreen.

Starting up

By default the program is not accessible by ‘normal’ users so you’ll need root access. Also iptraf can put your interfaces in promiscuous mode (this will probably show up in your logfiles as: ‘device eth0 entered promiscuous mode’). Promiscuous mode can be turned off and on in the configuration menu. If no options are given through the commandline iptraf starts up with a splashscreen and then a menu. Some of the menuitems can be reached directly from the commandline (try using ‘iptraf -i all’ if you want to startup in IP traffic monitoring mode).


There are some configuration options you might want to check. Turning on reverse DNS Lookups and service names comes in handy when using the IP traffic monitor. Iptraf comes with a separate reverse lookup server -rvnamed- wich is only started and used by iptraf to keep it from hanging on slow lookups. If there’s a lot of network traffic on your box try applying some filters.


Filters can be useful if you only want to see info about traffic on certain connections, ports and/or protocols. Filters can be saved, deleted and edited. Multiple rules can be defined.


(Click on the image to enlarge)

Connections Configuration Filters Interface statistics

More information

IPTraf has been available since ages ago in both Debian and Ubuntu.

ipcalc: network calculator on the command line


Article submitted by Javier Barroso. We are running out of articles ! Please help DPOTD and submit good articles about software you like NOW !

Ipcalc is a command-line tool which allows the user to get useful data from a ip and a netmask.

Ipcalc returns the network address, netmask, network address in CIDR notation, min/max IP addresses, broadcast address and the number of hosts of network.

Ipcalc usage is:

Usage: ipcalc [options] <ADDRESS>[[/]<NETMASK>] [NETMASK]

A example could be:

$ ipcalc
Address:            00001010.00000000.00000000. 00011100
Netmask: = 24   11111111.11111111.11111111. 00000000
Wildcard:            00000000.00000000.00000000. 11111111
Network:          00001010.00000000.00000000. 00000000
HostMin:             00001010.00000000.00000000. 00000001
HostMax:           00001010.00000000.00000000. 11111110
Broadcast:           00001010.00000000.00000000. 11111111
Hosts/Net: 254                   Class A, Private Internet

Ipcalc has been available in Debian at least since v3.1 (’Sarge’) and in Ubuntu since Warty. apt-get install ipcalc will install it for you.

jed - Pocket sized emacs


Article submitted by François-Denis Gonthier. We have run out of good articles! Please help DPOTD and submit good articles about software you like!

I’m a big fan of GNU Emacs, it’s a very powerful and ultra customisable editor. I have it setup just the way I want, with tons of packages. That means that although my Emacs setup suits me fine for long coding sessions, it takes several seconds to start, even on a moderately fast computer.

When you work in a console, and all you want is to edit some files, and edit them now, you gotta have something that starts in a snap. Jed is the editor I use for that.

Jed showing a bit of Emacs code.

The obvious advantages of Jed are that it starts much faster than Emacs, but still provides the basic key-mappings and features of the default Emacs setup. Out of the box, it supports syntax colouring for several programming languages: C/C++, S-Lang, FORTRAN, LaTeX, Java, Python, Perl, Bash and more. Since it’s an extensible editor, several add-ons (modes) have been written and are available in the Jed Modes Repository.

For people that are interested in having a full-featured editor, but aren’t crazy about the Emacs key bindings, Jed has a nice console menu interface. Menus can be activated with the F10 key, and then browsed with the arrows key, just like the ol’ DOS editors. Most menu items also have shortcuts, for quicker access the next use. For the less expert users, like myself, menus are very useful; but avoiding the F10 key at the corner of the keyboard is a time saver, as tiny as it may sound.

The Jed menus come with some nice touches that Emacs has acquired just recently. In the “Windows” menu, you can see that Jed offers 9 different colour themes for the terminal, a nice touch for people allergic to white-on-black text, or with difficult display devices.

I personally use Jed as a light editor, but Jed is a very customisable platform. It is linked with the S-Lang library, which can be used to heavily customise the editor. I know little of the S-Lang language, just what I need to set a few shortcuts, but the S-Lang functions provided by Jed are well documented on its home page:

It is also interesting to know that Jed has a native X11 interface, which is installed by the xjed package. Jed is not as well adapted to X11 than Emacs is, but XJed does bring some interesting improvements like mouse support, and of course key bindings which are not limited by any terminal protocol. Personally, I think that the XJed default configuration should be edited a bit (I use Ubuntu, but tend to suppose it’s not very different in Debian). When XJed starts on my computer, it looks like Jed was started in XTerm, with extremely tiny fonts, and an ugly font. I am sure XJed can be conveniently and easily configured but giving you a bad first impression of Jed is not something I want. I suggest you to try running the console version of Jed in your favourite terminal emulator, then play with it a bit.

The final proof that Jed is a mature and fully-featured editor is that it obeys Zawinski’s Law (Zawinski’s Law), which state that “a program attempts to expand until it can read mail”. Jed has a mail reader called rmail, it can be invoked by hitting M-x (Alt+x) then typing rmail.

Jed has been available in Debian and Ubuntu for ages.

Quick start shortcuts

Here is a few shortcuts you may find useful while playing with Jed for the first time. As usual, C = Ctrl, M = Meta (usually Alt).

Invoke the help system
C-x C-c
Quit jed
C-x C-f
Open a file
C-x C-k
Close a file
C-x 2
Split a window
C-x o
Move to the next window
Set the beginning of selection (C-SPACE cancels selection region)
Go to the beginning of line
Go to the end of line

ttf-inconsolata: an open font for your terminal and for nice code printouts


Article submitted by Nicolas Spalinger. We have run out of good articles! Please help DPOTD and submit articles about software you like!

You love the command-line interface but you also want things to look good and be free as in freedom? Maybe you’re looking for a good open font to use when you code? or something to make your code snippets look even better in a printed publication?

Then check out ttf-inconsolata!

What is it?

Inconsolata is a monospace font designed by Raph Levien of Advogato and Ghostscript fame (and quite a few other things).

It is a high-quality font released under the Open Font License (OFL), the community-approved free license specifically designed for fonts and collaborative font design. (See for all the details including a extensive FAQ).

Screenshots taken from inconsolata’s website:

How does it compare to other fonts?

This fonts really stands out compared to other fonts out there for the following reasons:

It’s an open font which comes with sources! The great thing about this font is that extended sources - not just the ttf - are made available by the designer: the Fontforge .sfd and the Spiro .plate sources are available on the upstream website and in the source package. A Type1 version of the font is also available.

It is a collaborative font project: you can freely use, study, modify, redistribute and/or sell the font under the terms of the OFL which means you are free to derive artwork from the font, to embed it in a pdf, to branch, extend and tweak the fonts to your liking. You can also send a patch to contribute to Raph’s project.

It is also the result of cutting-edge innovation. Raph has been using his own font design toolkit called spiro to design Inconsolata. Spiro is based on revolutionary curve technology implementing Euler spirals. The spiro toolkit also includes various optimisation scripts. See for all the details.

It is work in progress (the coverage is mainly Basic Latin, Latin Extended-A and Latin-1 Supplement at this stage) but it is already very useful as such and has great potential to grow to support more Unicode blocks as needed.

This open font project is being generously sponsored by the TeX Users Group Development Fund which you can contribute to.

You can also use Inconsolata directly from your TeX environment using newer implementations like XeTeX or pdfTeX.

Alright, how do I get it?

Thanks to work done by the Debian fonts task force (See the corresponding Alioth project), Inconsolata is now available in Debian unstable and Debian testing. It will soon be sync-ed to Ubuntu.

It is co-maintained by the pkg-fonts team and the mirror Ubuntu fonts team. These teams are part of the open font movement working on improving the availability of high-quality open fonts, packaging the existing ones, integrating them with the wider free desktop stack, getting a toolkit together to do open font design and of course engaging more designers to release fonts under the OFL.

You can find other open fonts designed by Raph on his OFL fonts page

And many other open fonts projects are listed at:, and

Free the glyphs :)

xdiskusage: where is the space?


Article submitted by Carles Pina from Catux-LUG. We have run out of good articles! Please help DPOTD and submit good articles about software you like!

Have you ever wished to know where are those files that waste space on your hard drive? Have you ever wondered which folder contained the most gigabytes? Your wishes had become true! xdiskusage is your application.

Using xdiskusage you can discover very easily how your hard drive’s directories are organised, and specially how much space is used by each one.

After executing xdiskusage without arguments, the initial default view will be the list of partitions:

Main view

By double-clicking in some partition you will get the list of the biggest directories (arranged by size) and the space that each one is using:

root view
(notice that free space is shown as another directory)

You can double-click in any other directory to explore it. Right-clicking shows a menu with some options like hide, unhide, go in, go out, etc. Just play with it!

xdiskusage is also a fantastic complement for “du”:

$ cd /tmp
$ du | xdiskusage

You can give any directory as an argument to xdiskusage:

$ xdiskusage /usr/src

One last thing: the -a switch shows files and not only directories:

File view


In Debian you can fine some alternatives to xdiskusage like:

The last three of them are more eye candy than xdiskusage, but I preferred a simpler solution, without that many dependencies. Of course, feel free to test and choose!


xdiskusage has been available in both Debian and Ubuntu since a long time ago.

Note that there is a bug that doesn’t allow the application to be launched by app-launchers such as Alt + F2 or menus. It’s a reported bug (Debian bug #276193).

Thanks to Fran Hermoso for correcting the text again, and to Muzzol from the Catalan-Ubuntu mailing list for commenting it.

KRename: powerful renaming tool


Entry submitted by Matej Urbančič. DPOTD needs your help, please contribute!

Quick overview

KRename is a powerful batch renaming tool for KDE that allows to rename lots of files in one step. The design of the program is suitable for both advanced and novice users.

Program description

KRename supports batch renaming of files based on a set of predefined and adjustable expressions. It can also copy or move the files to another destination. Among the most notable operations are: case-toggling of file names, numbering and powerful finding and replacing. It supports changing access and modification dates, permissions, and file ownership. It can work recursively. The more demanding audience can do magic with the support for regular expressions. It can be used in tabbed mode or the more comfortable wizard mode, whatever you prefer, when sorting your picture collection, music library or project files.

KRename follows the paradigm of console based commands that can really be used for any purpose. Since not all of us feel comfortable writing our own scripts, such tools really are a perfect replacement. The biggest advantage of KRename is surely its simple and straightforward interface and a great set of possibilities, which gives power even to not so knowledgeable users.

The tabbed mode includes four tabs. On the first tab we select files and directories in many different view modes and sort options, and through support for global KDE file types we can actually see which files are being changed. We need to define what should the program do with the locations of the files in the second tab. Usually we rename existing files in some directory, but the program can also move them to another location. The third tab defines the plug-ins to be used for some special operations, such as using data extracted from the file to determine its new name (it supports avi, ogg, pdf, jpg, bmp, mp3, deb, rpm, emails, etc), changing permissions.

In the last tab we define what exactly we want to do with the settings we selected and how to shape the file name. There are many predefined sets of expressions, but we can also make our own. KRename supports regular expressions, which can really make a difference.

For the wizard mode, the first two steps are very similar to the first two tabs, whereas the third —and last— step combines the other two tabs in a simpler interface.


Tabs view:
krename - 1st tab krename - 2nd tab krename - 3rd tab krename - 4th tab

Wizard view (last step):
krename - wizard mode

Additional Information

In the homepage you can find a support forum, and more screenshots. It is programmed in C++, using the Qt/KDE framework, and has been integrated in Krusader and the Konqueror file manager.

It has been available in Debian and Ubuntu since a long time ago.

Liquidsoap: a versatile icecast source client, and much more…


Article submitted by Romain Beauxis. We have run out of good articles! Please help DPOTD and submit good articles about software you like!


Liquidsoap is a powerful audio stream generator designed to work with icecast as a source client. It was built for the campus net-radio of the Ecole Normale Supérieure de Lyon. The tough requirements included: accepting user requests, handling remote files and play lists, scheduling special programs, mixing jingles in the stream, interacting with the website or an IRC bot, etc.

The special thing of Liquidsoap is that instead of building an ad-hoc solution for that single net-radio, it was developed as a flexible tool with which you can combine as you like the features that you want. Hence, it has then been used successfully for several other net-radios, for which the usual streaming tools weren’t enough.


Describing an audio stream can be very complex: several inputs (files, stream relaying, sound card input) that can be combined in various ways (audio processing, mixing, track scheduling, fall-backs) and finally be output in various other ways (several servers, contents and formats). To make it easy without losing expressive power, Liquidsoap uses its own little scripting language for configuration.

That language has a notion of audio stream and request, and has built-in functions for combining streams in various ways. Some of its main features are:

Liquidsoap is quite versatile: it can be used as a daemon or as a command-line tool, and is not restricted to streaming to an icecast server, it can also stream to your local sound card!


If you are not aware of the way a web radio can be built using icecast, you may want to read some more documentation on this topic. In short, icecast accepts sources connections, and relays the data from these sources to its listeners. Liquidsoap acts as a source.

Let’s begin with a very simple example… Let’s say that you run an icecast server at host myhost with the password for sources being hackmeimcool, and you want to stream in Ogg/Vorbis a single looped file (it can be Ogg/Vorbis, MP3, WAV, even AAC on the SVN version). Then this may do the job for you:

$ liquidsoap 'output.icecast.vorbis(host="myhost",password="hackmeimcool",

Another possible usage is to relay a net-radio to your sound card using libao. For this you may try:

$ liquidsoap ',

Liquidsoap can also be used as a scripting language, so the following does both previous examples:


# Set log to stdout and /tmp
set log.stdout = true
set log.dir = "/tmp"

# Output a file to an icecast server
file = single("/path/to/my/file")

# Output a net-radio locally:
radio = fallback(track_sensitive=false,[input.http(""),blank()])


The complete API is available here. We have not presented many cool features, such as:

Liquidsoap is already used in various net-radios, such as Dolebrai which streams libre music, and RadioPi which has a complex multi-server and multi-stream configuration.

This presentation of Liquidsoap was very very short… This is not the place for a tutorial, so let’s finish instead with a power user example, which I hope will make you eager to learn more. Just download and run, there’s nothing to edit!


Optionally you can test the following:

$ telnet localhost 1234

q.push /path/to/file

If you are interested in a very flexible way to design your audio stream, feel free to visit our website, drop us a mail at or join our IRC channel, #savonet at Freenode. Liquidsoap is available in Debian testing and unstable, it hasn’t been uploaded to Ubuntu yet.

apt-listbugs: Lists critical bugs before each apt installation


Article submitted by LordRich. We have run out of good articles! Please help DPOTD and submit good articles about software you like!

apt-listbugs is a tool designed to warn the user about critical bugs of packages that are about to be installed or upgraded. Once installed, each time you use aptitude or apt-get it will be run, and if it detects any critical bugs will stop to ask the user what to do.

For using it, usually you don’t need more than installing it. But note that it will run after downloading the packages, so be patient. Here you can see it in action when installing cogito:

# apt-get install cogito
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  git-core libdigest-sha1-perl liberror-perl
Suggested packages:
  git-arch git-cvs git-svn git-email git-daemon-run gitk gitweb
Recommended packages:
The following NEW packages will be installed:
  cogito git-core libdigest-sha1-perl liberror-perl
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 0B/2569kB of archives.
After unpacking 6087kB of additional disk space will be used.
Do you want to continue [Y/n]?
Reading package fields... Done
Reading package status... Done
Retrieving bug reports... Done
Parsing Found/Fixed information... Done
serious bugs of cogito ( -> 0.18.2-3) <pending>
 #427182 - cogito - FTBFS:  FAIL 14: verifying repo2
 cogito(1 bug)
Are you sure you want to install/upgrade the above packages? [Y/n/?/...]  ?

It then allows users to find out more about the specific bugs listed. By typing w, a web-browser is launched offering links to the bug tracking system for each bug.
apt-listbugs web page

By answering with a bug number, querybts is run giving details for that particular bug:
apt-listbugs showing a bug report

After finding out exactly why the packages are listed as having critical bugs, the user can then either decide to continue the installation anyway by answering y (the default) or stop immediately by answering n.

apt-listbugs has been available in both Debian and Ubuntu since a long time ago.

knetworkmanager: the solution to WiFi-WLan-WEP-WPA1|2 nightmares


Article submitted by Ingo Wagener. We have run out of good articles! Please help DPOTD and submit good articles about software you like!

I used to roam around cafés, schools, hotels, etc, logging myself into this network, that network, any network using the command line. Open networks are a breeze, WEP was not too bad but WPA on the command line took a bit of fiddling first time round. I then moved onto scripts depend…

OK, you are bored and couldn’t be asked to read any further —or was it that I was bored and installed knetworkmanager instead?

Now I cruise into a café, open up my notebook and thank whatshisname that I can just click on the little knetworkmanager icon in the system tray to list all available networks. I select the one I am after and its wizard asks me for authorization if it is necessary or just logs me in. Doesn’t matter whether it is WEP, WPA1 or even WPA2! Well, I felt pretty cool :) Of course you can choose to have the codes saved —encrypted, naturally.

Now you might have other programs installed, kwifimanager, the new kwlan or Wireless Assistant to name but a few. Most of them do the job well enough, but none of them have the same click and run capability. kwifimanager for example still does not have WPA compatibility, kwlan’s interface is not nearly as neat and Wireless Assistant (the highest ranking on KDE apps, by the way) asks for some informed decisions and has, similar to kwlan, a number of interfaces you have to work your way through.

If you want to cruise networks the easiest possible way, there is no way round knetwormanager.

Even though it is a KDE programme (and me a KDE addict) it works just as well on Gnome and is available under the standard repositories, regardless whether you are running Debian or (K)Ubuntu.

To date I have yet to come across another network manager as complete and pain free, although the Gnome lot are working on it. If it is half as good as knetworkmanager one should applaud them!

The opensuse project has some nice screenshots of Knetworkmanager running in KDE, Gnome and FVWM.

revelation: the gnome password manager


Article submitted by Diego Martínez Castañeda. We have run out of good articles! Please help DPOTD and submit good articles about software you like!

Revelation is a powerful tool which lets you manage and store sensitive information, such as passwords or credit cards numbers, in a password protected file, so you only have to remember one password to access all.

Some of its features are:

First steps

As you start Revelation, the main window is divided into two vertical panels. The left panel contains a tree hierarchy in which you can create folders or entries, and right panel displays information about entries.


Initially, revelation creates an empty file for you, ready to be populated. You can easily add new entries with your data using the Add Entry button. Depending on the data type you’ve selected, information fields may be different.


Adding information

There are several basic types of data you can store, such as email, ftp or database. Every type has its own configuration and its own fields because Shell requires a hostname and Creditcard don’t.


In this example, I’m going to add my Debian Package of the Day account under my Home folder (see the images below). Be careful when you write down your password because, by default, Revelation will show it while you’re writing.


After you have added your important information, you save it into a password protected file by pressing Save button (or Ctrl+S). Revelation will ask you for this password and, importantly, this will be the only password you’ll need to access the file. Of course, if you don’t remember it, you’ll lose all data stored in the file.


Showing information

One you have populated your Revelation file, you can see your email password by selecting the corresponding entry on the left panel. The information will be shown on the right.


You can also try the Revelation Account Search GNOME panel applet. It is the best and fastest option for accessing your passwords when you’re using lots of entries in a single file.



There are other alternatives in Debian which you can use to manage your passwords, for example, KWallet Manager (integrated with KDE), gpass, pwsafe. I have chosen Revelation because I need to manage lots of passwords, stored in different files and I do not want to use a command line program. Plus, I need folder organization and different entry types to define exactly what type of data I’m referring to. Finally, search option and GNOME applet are very important in case of forgotten password..

The package has been available in Debian since sarge and in Ubuntu since Edgy.

ingimp: improving the usability of the GIMP by collecting and analyzing usage data


Article submitted by Francois Marier. We are running out of articles ! Please help DPOTD and submit good articles about software you like !

ingimp is an instrumented version of the GNU Image Manipulation Program that collects real-time usability data, such as the commands used, the size of images worked on, and so on. This usability data is automatically transmitted to ingimp for anyone to download and analyze.

It is meant to be a snap-in replacement for the GIMP, so it can be used for normal, everyday image manipulation tasks. By using it, the user and developer communities can gain new insights into how the GIMP is actually used “in the wild.” This information, in turn, has the potential to feed into future design and development efforts. Thus, you have the chance of contributing to open usability efforts simply by using ingimp as you would the regular version of the GIMP.

ingimp is part of human-computer interaction (HCI) research at the University of Waterloo investigating new forms of sustainable open usability.

Pretty Pictures

Numerical summarizations of overall ingimp usage are provided, along with personalized mirrors of your own personal, usage. Each ingimp user has an online persona that grows to reflect how they use ingimp. For example, if you are an artist who makes heavy use of the pencil tool, your persona will be seen clutching a pencil. Just use ingimp as you would the normal version of the GIMP and use the “Website + Stats” button at start-up to view your own persona along with a summary of your own usage of ingimp.

Group shot
Snapshot of all current ingimp users.


ingimp has been designed to collect data useful to usability analyses, without intentionally collecting any personal information. For example, ingimp does not record the actual keys pressed, just when they are pressed, along with any modifier keys used (i.e., Shift, Alt, and Control). Furthermore, ingimp does not record command parameters (for example, it doesn’t record the text you enter into the text tool) nor does it transmit the actual images on which you work.

Disabling logging
It is possible to disable logging at the start of the program.

ingimp is in Debian unstable and backported packages are available for Debian Etch and Ubuntu Feisty.

More Information

You can find out more about ingimp by visiting its homepage.

screen-message: use your screen to communicate


Article submitted by Joachim Breitner (with a special contribution of the editors ;) ). We are running out of articles! Please help DPOTD and submit good articles about software you like!

Have you ever used a text processor write just to display some text full-screen and found it too tedious? Were you sitting in some audience and tried to make a comment to those behind your? Needed to take mugshots?

Then you might want to install sm, short for screen-message. Once you start sm, you can type your text and it will be displayed as large as possible. The text can also be specified on the command line, when starting sm or piped from another program. For real convenient and fast usage, it is recommended to bind a key combination to starting sm.


Alternatives are any web browser and word processors with a full screen mode.

The package is available in Debian unstable and it’ll be soon in testing and merged in Ubuntu.

Finally, with the goal of enlighten our readers of how cool screen-message is and do some aggressive marketing:

We need your article!
Ana Guerrero and Martín Ferrari (aka Tincho), debaday editors.

Hugin: create amazing panoramas from your photos


Having been to DebConf7, I took advantage to visit a few beautiful places around the venue. Some of them are very hard to photograph with a common camera, specially when you’re trying to capture the full landscape from a hill or the complete sensation from a room in a castle —with all the walls covered with paintings and complicated ornaments—. So you have to resort to taking many pictures, but that’s not like the real thing.

Coincidentally, some time ago I’ve been researching some image processing topics, and found some amazing algorithms for automatic blending of multiple pictures to create mosaics of them. But I’d yet to see some ready to use implementation. Then, somebody from the table at the hacklab in DebConf7 enlightened me: hugin was the solution!

I have to admit it: the first attempts were really frustrating. A good time lost trying to adjust the images and the result was a nonsensical patchwork of images. So, take this in mind, and do what I didn’t: read the fine manual (and the tutorials). The manual is not very useful, but there are plenty of tutorials in the website.

So, the process is more or less like this: load the images, indicate where they overlap (setting control points), optimise, preview, adjust the control points, repeat until done. Setting the control points is what will determine how the images blend; but the most critical task is remember to run the optimiser before previewing or you won’t see your changes correctly! Here you can find a small tutorial that summarises the basic operation.

File list Control point setting Preview
File list and basic controls Setting the control points Preview of the final image

There are some optional tools that you’d like to have installed along with hugin:

A tool that automates the most tedious part of creating a panorama: setting the control points. Note: you will have to change the default executable name in the hugin preferences to “autopanog”, as the default is wrong. Sometimes it works perfectly, sometimes it need to be helped by manually adding control points or horizontal/vertical lines, some other times is of no use at all. Your mileage may vary.
Since autopano-sift runs in the mono environment, you would need this to execute it as a normal binary.
Replacement for the tool provided with hugin for blending images, with much better results.

A big problem I had was that hugin asked me some “crop factor” which is proportional to the size of the camera sensor, but nowhere is documented what that means. So, if you bump into this, you need to get the diagonal size of the camera CCD in mm and calculate 43.3 / diagonal. To get information about that, in this page you have a nice explanation about CCD’s sensors sizes. In the same site, you will find information for most digital cameras. If you don’t put correctly this value, most probably you won’t get any good result.

I’ll recommend you to also read this article, which explains how to use autopano-sift and the replacement blending tool, and gives some very good tips. Experiment and you will be amazed of the results!

To put an end to all this chatter, here is an example of a 360° panorama I’ve created from 23 pictures taken from the top of the Arthur’s Seat hill in Edinburgh. The control points were created with autopano-sift, and later added manually some horizontal lines to put the horizon into place, and some vertical lines in the monolith. The final blending was done with enblend, and the finishing touch is to crop it and convert to JPEG with gimp and copy the EXIF headers with jhead.
Arthur's Seat Hill panorama

Hugin is available in Debian since Etch, and in Ubuntu since Edgy

MOC: Music On Console, ncurses based console audio player


Article submitted by Matías Teplitzky. We are running out of articles! Please help DPOTD and submit good articles about software you like!

MOC stands for Music On Console.

MOC is a powerful and easy to use console audio player. It does support OGG Vorbis, FLAC, WAV, WMA and MP3, among other audio formats. In addition, both playlists and URLs are supported. Moreover, JACK, OSS and ALSA output types are supported.


Its interface is based on ncurses, which consist in two columns (it will probably remind you “Midnight Commander”, mc package in Debian). The first column allows you to browse the filesystem so you can search and find the files you want to play. The second column can be used not only to create your custom playlist, you can also indicate MOC a certain directory where your audio files are, and they will be automatically reproduced.

To see MOC in action, just type mocp on a console. In this way, the server and the client (the interface, actually) will be started automatically for you. It takes some time to get used to the interface, but once you get comfortable with it, you will find it easy and quick to manage. Some tips to start: with the TAB key, you can switch between the playlist and the load list; by pressing a, you will add a file to the playlist; the ENTER key is used to start playing a file or browse the filesystem; with < and > you can increase and decrease the volume. In addition, note that by just pressing q, the client will quit, but the server will still be running. To kill both the server and the client, press Q instead. Complete help can be found by pressing h or at the man page of the program (type man moc).

One thing to remark about MOC is the fact that it is very low resource consumin, so it will run smoothly, even on old hardware. Take advantage of it!.

Want to have some extra fun? Just try some of the themes available for MOC (yes, themes are supported!).

MOC has been available in Debian and Ubuntu since a long time ago. It is licensed under the GPL and you can find its homepage at

QEMU: easy and fast processor emulator


Article submitted by Michael Williamson. We are running out of articles! Please help DPOTD and submit good articles about software you like!

QEMU lets you emulate a machine —in other words, you can run a virtual computer on top of your real computer. This makes it perfect for trying and testing the latest release of a distribution, running older operating systems, or just testing.

So, let’s say you wanted to run a LiveCD, which you have stored on your hard drive. Easy enough! We just type:

qemu -cdrom path/to/livecd.iso -boot d

The -cdrom option tells QEMU the path to the CD you want to use, while -boot dictates what device we’re booting from —in this case, we want to boot from the CD, which is always device d.

You might get a message about kqemu —you can safely ignore this for now.

Alternatively, you may want to boot from a real CD in your computer —so, you simply use the path to your CD drive in /dev. For instance, if your CD drive is /dev/hdc, then we would use:

qemu -cdrom /dev/hdc -boot d

Of course, we don’t just want to use CDs all the time —we might want to actually install something! So, we’ve got to make a hard drive image first. This is achieved by using qemu-img, like so:

qemu-img create virtualharddrive.qcow 5G -f qcow

This creates an image called virtualharddrive.qcow, which is 5 gigabytes big. If you wanted it to be 5 megabytes, you could type 5M instead, for ten gigabytes, type 10G, and so on.
Finally, the -f option tells qemu-img what format you want to use. While there are a few to choose from, qcow is the norm - it works well enough, and only takes up the space on the hard drive that it needs. If the virtual hard drive had a capacity of 5 gigabytes, but only contained 2 gigabytes of data, then it would only take up about 2 gigabytes on your real hard disk.

So, now we want to get installing. Simply type:

qemu virtualharddrive.qcow -cdrom path/to/installcd.iso -boot d

Then, you can simply follow the instructions just as with an ordinary installation.

Now, not all distributions come on one CD —in some cases, you’ll need to swap CDs. To achieve this, we need to do two things. First of all, we make the QEMU monitor appear on the command line by adding the option -monitor stdio, so we end up with something like:

qemu virtualharddrive.qcow -cdrom path/to/installcd.iso -boot d -monitor stdio

When you run this command, QEMU should let you enter commands. To change CDs, simply type in the commands:

eject cdrom

change cdrom path/to/newcd.iso

Voila! The virtual machine should now have changed CDs so you can continue the installation. Naturally, you can change CDs at any time, not just during installation.

Once the installation has finished, you’ll want to boot from the hard drive. Since QEMU does this by default, simply remove the -boot d part of the command:

qemu virtualharddrive.qcow -cdrom path/to/installcd.iso -monitor stdio

If you have no intention of using the CD after the installation, then you can cut that out as well:

qemu virtualharddrive.qcow -monitor stdio

This should let you play around with your newly installed system at your heart’s content without endangering your own PC. If you want to fiddle with something, but don’t want the changes written to the image, then add the option -snapshot. If, after using this option, you decide that you actually want to save the changes made to the hard drive, then simply type commit into the QEMU monitor, and the changes will be written.

While these commands work, unless you’re using lightweight distributions, you might find things going a little slowly. This is due to QEMU, by default, only taking up 128MB of RAM. You can increase the amount available by using the -m option, followed by the amount of RAM in megabytes. For instance, if I wanted to allocate 256MB to QEMU for running a LiveCD, then I would type:

qemu -cdrom path/to/livecd.iso -boot d -m 256

That should speed things up nicely! But don’t give QEMU too much memory —you want some left for your other applications. Unfortunately, things are probably still fairly slow— to speed things up even more, you’ll probably want to use kqemu, otherwise known as the QEMU accelerator.

Installing kqemu from the repositories is reasonably straightforward. First of, grab the kqemu-source package —if you apt-get is your package manager of choice, then the command used is:

apt-get install kqemu-source

If you don’t have module assistant already, you’ll need that installed as well:

apt-get install module-assistant

Then, type in the following commands (as root):

m-a prepare

m-a auto-install kqemu

That should be it! Now, every time you want to use the kqemu module, you first need to become root, and then type:

modprobe kqemu major=0

Then, as an ordinary user, QEMU will automatically use kqemu, which should help speed things up. If QEMU complains that it still cannot use kqemu, then you might not have the necessary permissions —try typing the following as root:

chmod 666 /dev/kqemu

Hopefully, kqemu should now be usable by QEMU.

There is one final option: -kernel-kqemu. This, in theory, speeds up the emulation even further. Unfortunately, it isn’t as simple as that. Firstly, the version of QEMU in the Debian repositories cannot use -kernel-kqemu. Secondly, even if it could, not all guest operating systems would work with this enabled —for instance, a recent distribution of GNU/Linux would probably work faster with this option (if it worked!), but Windows 98 just crashes.

QEMU is available from Debian Sarge and Ubuntu Warty.

gnu units: units converts quantities between different scales


Article submitted by Geoffroy Youri Berret. We are running out of articles ! Please help DPOTD and submit good articles about software you like !

units is a command-line tool which performs units conversion between various scales. units is the perfect tool for engineer or scientific workstation, you can call it either interactively from the prompt or within command line. It already handles more than two thousand units and this can be enhanced with your own units in a separate data file.

units handles multiplicative scales factor as well as non-linear conversions units such as Celsius Fahrenheit. Compound units are also allowed in order to deal with quantities such as speed, volume, energy, etc.

Interactive use

Calling units without any option will run it interactively. Here is an example showing how to convert cm3 to gallons:

2438 units, 71 prefixes, 32 nonlinear units

You have: cm^3
You want: gallons
        * 0.00026417205
        / 3785.4118

units returns two conversion rates. The first one is the convertion factor you asked for, the second is its inverse or the conversion in the oposite direction. Sometimes the inverse factor could be more convenient because it would be the exact value.

units also provides the definition of units of you leave ‘You want:’ field empty:

You have: ohm
You want:
        Definition: V/A = 1 kg m^2 / A^2 s^3

Or you may want to compute sums of conformable units:

You have: 2 hours + 46 minutes + 40 seconds
You want: seconds
        * 10000
        / 0.0001
You have:  20 inches + 15 cm - 1 foot
You want: cm
        * 35.32
        / 0.028312571

And finally, not a minor feature when you have to deal with so many units, the completion with the tab key. It will complete unitname if there is a unique way to do so or provide a list of possibility with the second hit of the tab key :

     You have: metr
     metre             metriccup         metrichorsepower  metrictenth
     metretes          metricfifth       metricounce       metricton
     metriccarat       metricgrain       metricquart       metricyarncount
     You have: metr

units non-interactively

units [options] [from-unit [to-unit]]

Invoking units with options will turn off the interactive mode and return conversion to stdout :

%units '2 liters' 'pints'
        * 4.2267528
        / 0.23658824


gnu units has been available in Debian since Sarge and in Ubuntu since Warty.


Frets on Fire: Play the guitar with your keyboard, Rock ‘em!


Article submitted by Miriam Ruiz. We are running out of articles ! Please help DPOTD and submit good articles about software you like !

Did you ever wanted to emulate your favorite guitar idol? With Frets on Fire you can try it from your very own keyboard. All you have to do is to pick it up as if it was a guitar, with one hand pressing the fret buttons (F1 to F5) and another pressing the pick button (Enter). Frets on Fire, or FoF for short, a clone of the Guitar Hero video games. As joysticks are also supported, you can even use the Guitar Hero controller with a PS2/USB adapter instead of the keyboard to increase the feeling of being a rock star. Frets on Fire was the winner of the Assembly demo party 2006 game development competition.

The keys keep appearing in the screen as the song is being played. All you have to do is to press in the correct keys (frets), and then mark them with Enter (pick button) in the very exact moment. It seems easy, doesn’t it? If you keep plucking the notes properly the coefficient by which your points are multiplied keeps increasing (x2, x3, even x4), but just a single note badly played and it will fall back to x1 again. Since version 1.2.438, the game features “hammer-on and pull-off” (commonly abbreviated to “HOPO”) notes. A HOPO note allows you to only press its fret button to play it if the previous note was played correctly. There purpose of the game is just to play the virtual guitar the best you can, and to obtain the highest score you’re up to. It’s even possible to compare your results with other players on the official web page of the game. There are 4 levels of difficulty in the game: Supaeasy, Easy, Medium, and Amazing. Suit yourself.

Written in Python, and released under the GNU General Public License, the game also includes a tutorial and a built-in song editor. The game has become quite popular in the last year, and songs can be found just everywhere in the Internet, with many devoted fan web pages all around.

The original tarball of the game included some non-DFSG-free song files and some internal fonts which needed to be replaced in order for the game to enter Debian repositories, but a new pack of new songs made by Carlos Viola Iborra, and released under a free license, has been added to the repositories (Thanks, Carlos! ). The original songs that came along with the game, which were made Tommi Inkilä, will probably be included in the non-free repositories soon, too.

Screenshots and Video

Screenshots of the main menu and a game: (click to enlarge)

There is a video in YouTube with a player playing the famous “Smoke On The Water” of Deep Purple.

mmv: Mass moving and renaming files


Article submitted by Ferry Boender. We are running out of articles ! Please help DPOTD and submit good articles about software you like NOW !

Mmv is command-line tool which allows the user to move, rename, copy, append and link large amounts of files with a single command. The tool is especially useful when you need to rename a lot of files that have similar filenames, yet subtle differences.

Although mmv does more than just renaming files, this article will focus only on renaming because that is what I use it for the most. The tool is best explained using an example.

Suppose you have the following files in a directory:


You want all the files that start with ‘foo’ to instead start with ‘bar’. In this case it could easily be done manually, but suppose there are hundreds of files! You’d soon be forced to start shell-scripting some solution. But mmv is the perfect tool for this job:

mmv "foo*.png" "bar#1.png"

The above command will result in the following files:



From pattern

Mmv matches the files using the wildcard you gave (the ‘From’ pattern). Then it will rename the matched files according to the second argument (the ‘To’ pattern). The ‘From’ pattern can take all the usual shell wildcards such as ‘*’, ‘?’ and ‘[]’. Remember that you need to enclose the patterns with quotes, otherwise they will be expanded by the shell and mmv won’t understand them!

To pattern

The ‘#1′ in the ‘To’ pattern is a wildcard index. It matches the first wildcard found in the ‘From’ pattern. A ‘#2′ in the ‘To’ pattern would match the second second wildcard, etc. Mmv replaces any occurrences of wildcard indexes with the text for the corresponding wildcard in the ‘From’ pattern. In the example above, ‘#1′ matches the number after ‘foo’ and in front of the period. Note that ‘??’ are actually two wildcards, both of which match a single character!

More examples

The ‘From’ and ‘To’ pattern can also be used to switch around stuff in filenames:


mmv "*_*.txt" "#2_#1.txt"

Would result in:


Another nifty trick mmv can do is changing the case of text matched by a wildcard. To do this, you place a ‘l’ (lowercase) or ‘u’ (uppercase) between the ‘#’ and the number in the ‘To’ pattern:


mmv "?*.txt" "#u1#2.txt"

This results in:



Mmv tries to be as safe as possible to avoid collisions in renaming which might cause files to be deleted. If, for instance, the result of the renaming would cause two different files to get the same name (thereby overwriting one), mmv will issue a collision warning and abort.

Mmv also tries to gracefully handle a rename that causes one of the resulting filenames to be identical to one of the source filenames. For instance:


mmv "*" "a#1"

This does not overwrite the ‘aa’ file with the ‘a’ file but instead results, as expected, in:



Mmv has been available in Debian at least since v3.1 (’Sarge’) and in Ubuntu since Warty. apt-get install mmv will install it for you.


Debaday closed for Holidays!


Dear readers,

Debaday will be closed for holidays after tomorrow’s entry until July 1st. The editors team will be busy at DebConf, Debian Project’s developer annual conference, for the next two weeks and we only have a couple of entries that are worth publishing since we have not receive a lot of contributions lately. We will continue publishing entries after 1st July on a regular basis as we have done until now, but remember we need your contributions to keep debaday alive!

The editors team.

If you are attending at DebConf7, see you there! :)

TreeLine: a versatile tree-like structured custom data manager


Article submitted by Miriam Ruiz. We are running out of articles ! Please help DPOTD and submit good articles about software you like !

Do you have lots of sticky notes lying around with various useful information jotted down? Or many lists of books, movies, website logins, personal contacts, or things to do? Can you find them when you need them? TreeLine is a possible anwser to all those questions. It might be an Outliner, or maybe a PIM. What it basically do is store almost any kind of information (including plain text, HTML, numbers, dates, times, booleans, URLs, etc.). The data is structured in a user-defined tree structure, so that it’s easy to keep things organized.

Each of the nodes of the tree can contain several fields, thus forming a mini-database. The output format for each node can be defined, and the output can be shown on the screen, printed, or exported to HTML. Several node types, with different sets of fields, can be included in one file.

TreeLine’s window is divided into two panes. The view on the left shows the entire tree structure, while the view on the right shows various information about the tree node that is selected in the left pane. The right pane is tabbed to show one of three different views of the data. The “Data Output” view shows the formatted text for each node and is read-only. The “Data Editor” view shows a text edit box for each data field within a node. The “Title List” view shows a list of node titles that can be modified using typical text editor methods.

View of treeline’s main window.

TreeLine files are XML by default, but there are options for automatically compressing or encrypting the files. The data can alse be exported to HTML. You can also export a XSLT file, so you can work with the XML TreeLine files. There are many other file formats in which the data can be exported and imported: Tab-delimited tables and tab-indented text files can be imported and exported. Plain text files and Treepad files can be imported. Mozilla and XBEL format bookmark files can also be imported and exported. Generic XML files can be imported and exported, allowing TreeLine to function as a crude XML editor.

The program has many other useful features, like sorting or filtering the nodes, change the node’s icon and output format conditionally based on its data, spell check the text data, or automatically arrange the data. The user interface and documentation are available in different languages.

TreeLine is coded in Python, and uses the Qt toolkit library. If spell checking capability is desired, either the GNU aspell (preferred) or ispell programs are required. Treeline is available for both Ubuntu and Debian with a simple apt-get.

OTS: Command line text auto-summary


Article submitted by Alex Gretlein. We are running out of articles ! Please help DPOTD and submit good articles about software you like NOW !

Open Text Summarizer is both a library and a command line tool (developed by Nadav Rotem) that, well, summarises text. It is similar to the functionality incorporated into Microsoft Word and available in all native Mac OS X applications. The approach taken by OTS is to use word frequency to prepare a list of keywords and assign priority to sentences based on that frequency. It then outputs a summarised version of your text based on a ratio you supply —the default is 20%, i.e. the summary will be one-fifth the size of the original in terms of number of sentences. An automated process like this can never be perfect, and some texts are more amenable to auto-summarising than others. The reliance on sentences means that a well structured prose text works best, and that it should be somewhat substantial to produce meaning. Auto-summaries can be used as a basis for abstracts or catalogue descriptions, for article summaries in RSS feeds, or for checking keyword frequency for Search Engine Optimisation. Shorter texts, lists, and internally incoherent or structurally inconsistent texts will tend to produce gibberish —which can have its own amusement value. While the performance of OTS may not quite be up to the standards of proprietary alternatives (see this 2003 review), it is —as far as I was able to determine— the only available free or open source (specifically GPL) library for this purpose.

The developer has produced a screencast showing OTS in action. As a sample of the program’s output, this is a 20% summary of the “Ground Rules” section of the Ubuntu Code of Conduct.

This Code of Conduct covers your behaviour as a member of the Ubuntu Community, in any forum, mailing list, wiki, web site, IRC channel, install-fest, public meeting or private correspondence. The Ubuntu Community Council will arbitrate in any dispute over the conduct of a member of the community. We expect members of the Ubuntu community to be respectful when dealing with other contributors as well as with people outside the Ubuntu project, and with users of Ubuntu. Your work should be done transparently and patches from Ubuntu should be given back to the community when they are made, not just when the distribution releases. If you really want to go a different way, then we encourage you to make a derivative distribution or alternative set of packages available using the Ubuntu Package Management framework, so that the community can try out your changes and ideas for itself and contribute to the discussion.

You can run OTS by itself with the command —surprise!— ots:

Usage: ots [OPTIONS...] [file.txt | stdin]
  -r, --ratio=<int>      summarization % [default = 20%]
  -d, --dic=<string>     dictionary to use
  -o, --out=<string>     output file [default = stdout]
  -h, --html             output as html
  -k, --keywords         only output keywords
  -a, --about            only output the summary
  -v, --version          show version information

Help options:
  -?, --help             Show this help message
  --usage                Display brief usage message

So, for example if I had a document called ucoc and I wanted a 10% summary of it in a file called ucoc-tiny, I would run:

$ ots -r 10 -o ucoc-tiny ucoc

The --keywords option seems to be deprecated. The --html option outputs an HTML page of the entire text with the elements that would make up the summary highlighted in yellow.

OTS uses XML based dictionary files to provide word recognition for different languages. The latest version includes files for 37 languages —including most of the major languages written in Roman script, as well as Russian and Hebrew. It does not appear to have any means of recognising variant forms of the same word, such as verb conjugation, particularly in languages like Hebrew.

OTS is available in the repositories of Debian from at least sarge on, and of every release of Ubuntu. It is available by itself under the name libots0. To install it use your favourite graphical installer or run:

$ sudo apt-get install libots0

In both distros this is version 0.4.2, released in 2003. There are also libots-dev packages. A new version, 0.5.0 was released in April, 2007. The source code is available from Sourceforge.

As a library, libots can also be used by other programs. There is a list on the project home page of three applications that provide summarising through OTS:

  1. There was a plug-in in the development version of AbiWord at the time the OTS site was written. That “development version” is fairly ancient and it is a fully integrated part of the version available in current Debian or Ubuntu systems. Abiword itself is a great lightweight alternative to OpenOffice Writer. It’s also the default word processor for Xubuntu, and part of the xubuntu-desktop package. If you’re not running Xubuntu, you can install it with the package name abiword. (There are also development and plug-in packages for Abiword.)
  2. The second application to use OTS is Gnome-Summarizer, a GUI by the author himself. It appears from the screenshot to display the output HTML file and keywords. Even more exciting-looking than this is the “Researcher’s Tool” demonstrated in the screencast of the next version.
  3. The third program listed is a gedit plug-in by Daniel Brodie.

To this, we may be able to add Haystack (described here), an extension for the Plone framework which identifies related content. It uses a Python wrapper called ots, which is available in Python’s Cheese Shop.

An earlier version of this article was posed at IQAG Notes.

KLone: C web programming framework


Article submitted by Kari Pahula. We are running out of articles ! Please help DPOTD and submit good articles about software you like NOW !

PHP is well known for its coding style, mixing HTML with source code inside special <?php code > tags. There are tools and frameworks for that kind of web development using other programming languages like Perl and Python, but there is one fairly surprising choice of programming language that you could use instead, namely C.

KLone is a web application development framework that takes HTML with C embedded in as its input and turns it all into a single binary that is the server and the web app in one package.

Let’s step through an example of how to make a simple Hello World type of web app. First off, apt-get install klone-package. That’ll install KLone and a few tools you can use in a Debian environment. Change to a directory where you have a write permission.

$ make-klone-project create -p myhello
$ cd myhello-0.1

There will be a number of files and directories in the project directory. The important ones are debian/, where you have the files necessary for generating Debian packages containing your web app. We’ll return to that part later on. For now, let’s concentrate on the other directory of interest, userdata/.

$ cd userdata
$ mkdir etc
$ cd etc

Create and edit a file called kloned.conf.

server_list my_http
allow_root yes

    type      http
    addr.type IPv4
    addr.port 8880
    dir_root  /www

Now we’re ready for action!

$ cd ..
$ mkdir www
$ cd www

Create and edit a file called index.kl1. Any files that end with the .kl1 suffix will be treated as HTML/C files.

#include <time.h>
time_t now;
<head><title>A hello world app for debaday</title></head>>
<h1>Hello World</h1>
now = time(0);
io_printf(out, "Time is now %sn", ctime(&now));

That’s really all there is to it. Now, return to the project root directory and to build a kloned server, just run:

$ kloned-build -o myapp userdata
$ ./myapp -F

That -F switch is there so that the server won’t start as a daemon. Now you can access http://localhost:8880/ with the web browser of your choice to see a friendly greeting and to know the current time. But this isn’t the whole story, yet. Stop the web app you just created, run apt-get install dpkg-dev and then do the following:

$ dpkg-buildpackage -rfakeroot
$ sudo dpkg -i ../myhello_0.1*deb

You have just installed a Debian package containing your web app. As long as the package is installed, you can rely on having your app start at boot time.

If you want to see more examples of how to use KLone, feel free to visit KoanLogic’s web pages.

KLone is available in Debian in Etch and later, and in Ubuntu since Edgy.

Trickle: A lightweight userspace bandwidth shaper.


Article submitted by Ferry Boender. We are running out of articles ! Please help DPOTD and submit good articles about software you like NOW !

Sometimes, you’ll want to download something but you don’t want it to completely saturate your Internet connection. Perhaps you’re already downloading something more important, or you simply don’t want to get in the way of other people that are sharing the same Internet connection. Some programs, such as gFTP, wget and bittorrent, offer built-in up/download rate limiting. Other programs, such as apt-get and associates, don’t. Enter Trickle.

Trickle is a user space bandwidth shaper. It allows you to limit the bandwidth consumption of a program without requiring all kinds of kernel patches, firewall configurations or root access to the machine on which you wish to use it. Trickle can run in collaborative and stand alone mode. In collaborative mode, trickle can limit the bandwidth used by a bunch of programs at the same time. In stand alone mode, trickle simply limits the program you specify.

Stand alone mode

Trickle is easiest to use in stand-alone mode. Simply run trickle with a download and/or upload limit and a program you want to limit. For example:

[todsah@jib]~$ trickle -d 20 -u 20 wget
trickle: Could not reach trickled, working independently: No such file or directory
           => `bigfile’
Connecting to||:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 51,200,000 (49M) [text/plain]

 0% [                                     ] 180,224       21.83K/s    ETA 38:03

In the example above we use wget for demonstrative purposes, even though it has built-in bandwidth shaping. As you can see, the download rate is 21.83K/s. Of course, this is not exactly 20 K/s, but the download rate will vary between 19 and 21 K/s giving an average of 20 K/s. You can use the -w and -t command-line options to fine-tune this behaviour. The longer trickle runs, the closer it will get to 20 K/s. For more information, check out the manual page.

Daemon mode

In daemon mode, trickle can limit a group of programs to a fixed limit of bandwidth. To start the daemon, run the trickled command:

[todsah@jib]~$ trickled -d 20 -u 20

This will start the trickle daemon that will limit the total bandwidth available to all programs run via trickle to 20 K/s both up and down. So if you run a single program via trickle, it can consume 20 K/s. Two programs can each consume 10 K/s, etc. As an example, we start three wget sessions:

[todsah@jib]~/temp$ trickle wget
 1% [                                     ] 933,888        6.66K/s  ETA 1:47:17
[todsah@jib]~/download$ trickle wget
 1% [                                     ] 720,896        6.65K/s  ETA 1:56:59
[todsah@jib]~$ trickle wget
 2% [                                     ] 1,228,800      6.64K/s  ETA 1:45:00

The download rate is limited to about 6.6 K/s per session, making a total of 19.8 K/s. As is usually the case with bandwidth shapers, it may take a couple of seconds before all sessions are correctly limited. This is because of the algorithm used by shapers to determine how much they should delay the sending and receiving of traffic.


Trickle has been available in Debian at least since v3.1 (’Sarge’) and in Ubuntu since Warty. apt-get install trickle should do the trick.


Konversation, A simple irc client with a few surprising features.


Article submitted by Kyle Hamar. We are running out of articles ! Please help DPOTD and submit good articles about software you like NOW !

A sense of community remains a powerful feature of Linux. Few tools reveal the power of open source, and none more clearly link this community better than IRC clients. Dozens of clients exist, from the small and powerful (irssi) to the complex (centericq). I prefer a lightweight gui: Konversation.

Think of IRC as an open window to hundreds of open source projects, where developers often respond to questions from users on every imaginable subject. Freenode, a service of the Peer-Directed Projects Center supports many popular interest areas.



I recommend the use of freenode, a service of Peer-Directed Projects Center. Freenode host a very comprehensive list of groups related to most major peer directed and open source projects, like Apache or KDE. If you are new to IRC it would be wise to review the general questions and user registration requirements in the faq. Other projects, for example Debian, uses the OFTC network.

Konversation Screenshot

This screenshot of the #debian channel includes someone searching for help with a Perl module, others are asking about Apache. These community supported areas are only a few keystrokes away using Konversation.

Konversation boasts a simple tab-based interface, interrupted only by a few programmable buttons on-screen. These buttons may be modified to provide one-click application of numerous commands. The usual IRC display options are available; including font selection, colors, and various display options. The themed nicklist offers several different options for display of nick information.


Minimize Konversation and it will pop up a small on-screen display activated by a keyword or your nick after you enable the option. The feature works very well, and you can add sounds to notifications also.

on-screen display

One nice feature is the ability to execute commands from within the chat window and return the output for everyone to see:

command execution

Konversation also integrates with Kaddressbook. This allows for whois information to display the users real name.
The point of Konversation seems to be a simple interface with a few nice features. It does not offer the extensive internal scripting support of other clients. In fact, I would say the lack of kitchen-sink bells and whistles is a feature and not a detraction. Konversation can /exec any script you wish (Bash, Perl, or etc.) and provides a DCOP port to return information to the channel. The ability to post the outcome of arbitrary commands to a chat window (how else should you say look at this error!) and the on-screen display while minimized are important features.

Most users probably do not need the bot-like features of this simple client but they are easy to use if you need them. I first tried Konversation on the recommendation of a friend while struggling with a small bug with another client. I’ve not gone back since!


UltraStar NG: karaoke game that allows user supplied songs


Article submitted by Miriam Ruiz. We are running out of articles ! Please help DPOTD and submit good articles about software you like !

Karaoke (カラオケ, 空 kara, “empty” or “void”, and オーケストラ ōkesutora, “orchestra”) is, according to the Wikipedia, a form of entertainment in which an amateur singer or singers sing along with recorded music on microphone. In a typical karaoke game, the system plays the music and displays the corresponding lyrics on the screen, sometimes also showing a video as well, while the singer or singers sing along. Sony went one step further with their game SingStar, for PS2: you not only had to sing the song, but you also had to sing it properly. The game came along with a couple of USB microphones, and the game decided how well you were singing the song.

Then came UltraStar, a Free Software (GPL’ed) SingStar clone in which you could add your own songs in the forms of mp3s along with a text file, as well as pictures and videos. In UltraStar, the original song is being played, and the lyrics shown, while the wannabe singer tries to do their best with the microphone. A gray bar shows the length and pitch of the original song, and the player’s own voice is displayed with a blue bar, which shows whether the song has been sung correctly or not. The better the performance, the more points you get. In the end, you might turn to be an amateur, or a lead singer. Unfortunately, UltraStar was programmed in Kylix/Delphi, and only available for the popular proprietary operating system you’re thinking about. The good thing about UltraStar is that there are lots of people making songs for it, so you might be able to find your favourite ones all along the Internet, in some web pages devoted to the program, in peer to peer network systems, etc. It’s quite easy to make your own songs for UltraStar, or converting them from SingStar format.

UltraStar-NG is the remake of UltraStar that works under GNU/Linux. It is coded in C++, and, for the technical part, it uses alsa for audio acquisition, fftw3 for getting the notes sung by the player, SDL for the visualisation and keyboard input, xine or gstreamer to play the music and librsvg or cairo to display the themes (which are vectorial images). The goal of the game, as you might have guessed, is to get the maximum of points while singing the songs of your choice.

UltraStar intro screen

UltraStar intro screen, you have more screenshots here.

It’s been a long way, but finally we’re able to play UltraStar-NG in our Debian machines. Have fun, and don’t forget that, if the game says you’re singing out of tune, that might not be a bug in the program but in the singer ;)

Problems with DPotD


This post is to inform our readers that we had a problem with an upgrade that we are working to solve. Something went wrong when updating wordpress and the pictures and our theme are gone. Also, permalinks aren’t working.

Thanks for your patience. The DPotD team.

Mirage: simple and fast image viewer


Article submitted by Lucas Nussbaum, based on an article published on Linux Weekly News (with the permission of LWN’s Jonathan Corbet). We are running out of articles ! Please help DPOTD and submit good articles about software you like !

Mirage is a relatively new image viewing application which has been designed with speed in mind. It uses GTK+.

The project was started in March, 2006 according to the CHANGELOG file. Mirage has undergone rapid development since then, with fifteen releases so far.

It has all the features one will expect from a good xv or gthumb alternative:

The online documentation explains the application in more detail.

However, Mirage still miss some of xv’s features:

Some of these missing functions, such as image grab and convert, can be handled by external commands. Perhaps that is in line with the Mirage lightweight design philosophy, but the omissions come at the cost of user inconvenience.

Mirage is available in Debian Testing and Unstable, and in Ubuntu since Feisty. It is relatively bug-free and actively developed.

It has a nice look and feel, and performs very well for the basic job of viewing large collections of images.

Screenshots are available on Mirage homepage.

Keyjnote: presentation viewer with very nice graphical effects


Entry submitted by Frédéric Wagner. We are running out of articles ! Please help DPOTD and submit good articles about software you like !

keyjnote is an excellent presentation program with graphical effects that will make Apple’s Keynote users be jealous.

Keyjnote keeps the crunchy part of Keynote (fancy display), but doesn’t allow you to create your presentation. It enables you to display a PDF or images-based presentation, but you have to create the presentation with another tool, like the famous latex beamer extension. So you can use your favourite tool to build your presentation, rather than a lame point and click thingy.

Keyjnote allows the display of presentation slides in PDF format (or image files like a photo directory) both beautifully and efficiently. If you are familiar with xpdf -fullscreen, or evince’s presentation mode, you can think of keyjnote as “xpdf on steroids”.

Lots of different OpenGL effects are available for slide transitions, to give the viewers the opportunity to focus on the style instead of the content ;-) Jokes aside, some transitions may be a bit “too much”, but transitions like Crossfade and WipeCenterOut are light and beautiful.

Of course keyjnote is also full of nifty useful features and keyboard shortcuts :

Transitions can be defined in advance in a specific .info file. It should be noted that keyjnote works extremely well with beamer: it is rather easy to write a small script extracting .info files automatically from the .aux files generated by latex (this exercise will be left to the reader). I personally use the WipeCenterOut transition between slides and the Crossfade transition for animations on slides.

Finally, while keyjnote is command-line driven and scriptable, a Qt front-end called keyjnotegui exists but I personally do not find it very useful.

Keyjnote is available in Debian Testing and Unstable, and in Ubuntu Feisty.


key3 key2 key1 oview trans

MPGTX: Lossless editing of MPEG video


Entry submitted by William Tracy. We are running out of articles ! Please help DPOTD and submit good articles about software you like !

MPEG is the JPEG of the video world. It is a format that plays everywhere, and has built-in lossy compression. Unfortunately, that means that, also like a JPEG, if you open and edit an MPEG you will lose more and more quality with each save. Worse, since video files tend to be large, many people will take MPEG compression as far as it will go, creating files that look yucky to start with.

Mpgtx is a partial solution to the problem. It allows you to slice and splice videos without re-compressing them. The video quality and bit-rate (ratio of file size to the length of the movie) stay the same while you chop off the last thirty seconds of your home video or you stick two videos back to back.

This is a command-line utility. For example, mpgtx -j movie1.mpg movie2.mpg -o movie3.mpg creates a file movie3.mpg that consists of movie1.mpg and movie2.mpg back-to-back. mpgtx -s movie1.mpg [30-1:00] -o movie2.mpg creates a file movie2.mpg that includes everything in movie1.mpg from the thirty-second mark to the one-minute mark.


Mpgtx is a shining example of what is so wonderful about Debian. The last update on the upstream website is over a year old —but new patches continue to go into the Debian package.

Several months ago, I ran into a bug in Mpgtx. My digital camera created MPEG files that caused Mpgtx to segfault. At first, I thought I was out of luck when I saw that the application’s maintainer had disappeared. Then I tried filing a bug report via Debian’s reportbug. Lo and behold, I got a response from the package’s maintainer, Erik Schanze. Within a few weeks, I had a working patch piping hot from the oven that fixed my problem. Mpgtx 1.3.1-3, which fixes my bug, is now available in Testing and Unstable.


Mpgtx is a handy little program. It isn’t useful for serious video editing, but it very nice for quickly hacking some already-compressed video that was supposed to be already "finished". It deserves a place in the tool-belt of any command-line-savvy multimedia artist.

Packages and Links

Mpgtx has been available as a Debian package since May 2001; it is present in Sarge, Etch and Lenny (I can’t find info about older releases). It is also present in every version of Ubuntu. For some reason, the package is under the "Sound" category, so look for it there with Aptitude or Synaptic.


Klipper: clipboard action trigger


Entry submitted by Benoit Peccatte. DPOTD needs your help, please contribute !

Are you a kde user? If you are, you should have this one, if you aren’t you should try it!

Klipper is a tool for associating an action to any content you put in the clipboard. It decides what action to activate based on a regular expression match. Thus you can associate actions to URLs for software that don’t support opening an URL, you can associate a path to your file browser…


This tool puts itself into the task bar waiting for your input. It is disabled by default. Note that the default settings are reasonable. Let’s look at an URL example. First activate the actions by clicking on the tool and select guess what.

Klipper menu

Now select something like “” with your mouse. A menu appears that suggests some action. Just point and click.

Klipper actions menu


Clipper is as simple to configure as it is to use. You just have to know what a regular expression is.

Klipper configuration
Here, “^https?://.” means anything that starts with “http://” or “https://”, then at least one character.

Klipper is available in Debian since Sarge, and in Ubuntu since Warty.

brightside: workspace switcher


Entry submitted by Jason Polak. DPOTD needs your help, please contribute !

This utility for the GNOME desktop allows you to switch between virtual desktops by moving the mouse cursor to the edge of the screen, as if dragging it to the next one beside it, and is a nice alternative to keyboard shortcuts for the more mouse-oriented user.

The configuration screen in the screen capture can be started by running the command brightside-properties. The command may also be in the System->Preferences under Screen Actions. To activate brightside when you log in, place the command brightside in the Startup programs list in System->Preferences->Sessions.


You can also assign actions to the corners of the screen such as stopping the screensaver or running your favorite mail client. This feature is sometimes buggy in that it does not always work when workspacing switching is also enabled, as sometimes desktop switching takes priority over starting an application.

The workspace or virtual desktop switching features works well with a solid feel, and moving the mouse across the screen is faster than having to click on the workspace switcher, or faster than using a keyboard shortcut if your hands are not placed on the keyboard.

Using the workspace switching function, applications can also be dragged along to the next virtual desktop. For best results with application dragging, move the application smoothly to the new desktop without stopping at the edge. This dragging feature does not work with XMMS and possibly other applications without a normal window border.

With the wrap around the workspace edges option, which is the last option in the screenshot, the first and last workspaces will also be connected, and using this feature with three virtual desktops allows you to access any virtual desktop by either moving the mouse to the left or right edge.

I installed this program after seeing a feature like this on another window manager, and I use it nearly every time I switch virtual desktops.

brightside has been available in Debian and Ubuntu for a long time

meld: graphical tool to diff and merge files


Entry submitted by Bart van Kuik. DPOTD needs your help, please contribute!

Every now and then we need to see the differences between two files. You forgot exactly what you changed in that Perl script, or you’d like to check what changes the intern made in Apache’s configuration, et cetera.

For seeing changes between two files, diff used to be your friend for the command line. Although hard core hackers may disagree, diff its output takes quite a bit of exercise to parse with the human eye. And although diff has a side-by-side mode, a text terminal only offers so much freedom.

A graphical display offers much more possibilities and Meld tries to use them in an admirable fashion. It’s a utility that lets you graphically see the differences between two or three files. And unlike diff, Meld lets you edit (or merge) the files straight away. With the click of a mouse you can copy or move differences between files.

meld httpd.conf httpd.conf.default

Diffing httpd.conf

Pressing and holding the Shift key will change the arrows to crosses, which lets you swiftly delete the additions that the intern made. (After sternly speaking to the lad!).

If you’re a programmer, you probably store your files in a version control repository like Subversion or CVS. Meld supports this, too. On the command line, type:

meld my/project/directory

Meld recognises a directory that’s under version control and will display any changed files. Double-clicking the file will show the differences between the current file that you’ve been working on, and the file in the repository. Meld is tab-based, so the changes will appear in a separate tab, making it easy to quickly return to the directory overview.

Meld in a subversion local copy

Although it’s not documented, meld seems to supports bzr, CVS, darcs, mercurial, monotone and subversion. Meld packs more features not discussed here, like a mode which displays the differences between directories, multiple languages et cetera. I encourage you to just install the package and look around.

Alternate tools

In the project’s homepage, one can find a little comparison with other similar tools:

Very good for large merges. Automatic merge facility.
Has some nice features such as CVS unmerge and good scriptability. Does 2 and 3 way file comparison but only 2 way directory comparison.
Two way file only diff viewer. Depends only on tk.
Gtk1.x diff tool. Project seems dead.

Meld has been available in Debian since Sarge and in Ubuntu since Warty. It depends on the Python scripting language.

Fail2ban: an enemy of script-kiddies


I bet there is only a little part of auth.log-aware GNU/Linux users, who has not experienced a pleasure of browsing thousand of lines of the failed authentication attempts. If you do not yet know what to look for in your auth.log, just run:

> zgrep 'Failed password for illegal user' /var/log/auth.log* | wc -l

On the system which I just tried, the result is 125835! since July of 2006. Yeah yeah — 99.999% of those failed logins are due to silly dictionary attacks, which (unfortunately) work in some % of the cases. Are you sure that your password and passwords of all the users on your system are strong enough to survive such an attack?

Also, I guess, there is a (hopefully small) group of system administrators, who experienced a pleasure of DoS attack on their services. Or web-server admins, who have a pleasure to stare at the attempts to access non-existing (most of the time) on the webserver /php/bla-admin.X.Y.bleh.

For both those groups (as well as for other problems too), there is a straightforward solution — just reject (or in other terms - ban) abuser’s IP as soon as you detect an attempt to get an unauthorized access to your box. Unfortunately, we do not stare at the log files 24×7, so we can not react in time. To substitute such a weak part of the chain in this process, i.e. a human operator, Fail2ban tool was created by Cyril Jaquier.

The idea behind Fail2ban is very simple: temporarily or permanently ban an IP which performed multiple undesired actions, such as unsuccessful authentication, access to restricted area, etc.
Originally it was developed to catch illegal SSH login attempts, but later on it grew up into an easily customizable toolkit for speedy reaction on some events (such as detected failed login attempts) recorded in the log files.

In the following sections I will describe a bit more of internals of Fail2ban configuration, but that knowledge is not really required to get the tool working for you. For that, it is sufficient to run “apt-get install fail2ban”. You might like to read the section on jails below if you simply want to enable some additional jails shipped with the Fail2ban package.

Debian/Ubuntu Presence of Fail2ban

Fail2ban is present in sarge from, and it is native to Etch and Sid. Sarge version in backports is from a 0.6 branch of the Fail2ban, and it has different configuration scheme than current 0.7 (soon 0.8) branch. 0.7 uses split configuration files and orthogonally separates notions of a filter (pretty much a python regular expression with associated set of files) and an action to be taken (banning via iptables/hosts.deny, or sending an email).

Fail2ban is also present in Ubuntu releases since Dapper release.


Default configuration in both branches (0.6 and 0.7) enables ssh logins monitoring right out of the box, so no changes are necessary to get Fail2ban running.

If necessary, all changes in the configuration of Fail2ban 0.6.x have to be made in the original configuration file, and sections can be also enabled via command line switch (-e iirc) (N.B. this cmdline option is specific to Debian release of Fail2ban and is not present in upstream version). 0.7 branch uses completely different configuration scheme, and it is very convenient: any change or addition which has to be done in file /etc/fail2ban/X.conf can simply be made in file /etc/fail2ban/X.local — parameters in .local override ones in .conf. This way .conf file stays intact, and during your upgrade there is no necessity to mess with patching config files if they get changed upstream. Since I prefer 0.7 branch, I will describe details of its configuration.

As I mentioned above, 0.7 branch comes with an orthogonal configuration between filters and actions. A filter specifies what to
look for (like a ‘failed login attempt from …’ in auth.log, or a message ‘please brew some coffee, Mike’ in your .xchat/history/private.log), and an action describes possible scenario to play (to ban an IP, or to send an a single packet authenticator to a coffee maker to start brewing a fresh cup of coffee).


So here is an example of a filter:

> grep -v  '^#' /etc/fail2ban/filter.d/sshd.conf


failregex = Authentication failure for .* from <HOST>
            Failed [-/w]+ for .* from <HOST>
            [iI](?:llegal|nvalid) user .* from <HOST>

ignoreregex =

“failregex” is a list of python regular expressions (with “” simply be a shortcut for “(?:::f{4,6}:)?(?P<host>\S+)” to match an IP or a host name. “ignoreregex” allows to infiltrate some false positives.

Standard sid Debian installation of Fail2ban comes with filters for various services (ssh, ftp, http), various implementations (exim, postfix; proftpd, pure-ftpd, wuftpd, etc), and for some additional events (normal illegal login in ssh vs DDOS attack on sshd).

If you want to write your own filter to store under /etc/fail2ban/filter.d/blah.conf, there is a very handy helper tool: fail2ban-regex, which can test your regular expression on the existing logfile and tell if you it works fine.

> fail2ban-regex /var/log/auth.log 'Failed [-/w]+ for .* from <HOST>'

Running tests

Use regex line : Failed [-/w]+ for .* from <HOST>
Use log file   : /var/log/auth.log


[1] Failed [-/w]+ for .* from <HOST>

Number of matches:
[1] 2 match(es)

Addresses found:
[1] (Sun Apr 01 23:58:20 2007) (Sun Apr 01 23:58:27 2007)

Date template hits:
2 hit: Month Day Hour:Minute:Second
0 hit: Weekday Month Day Hour:Minute:Second Year
0 hit: Year/Month/Day Hour:Minute:Second
0 hit: Day/Month/Year:Hour:Minute:Second
0 hit: Year-Month-Day Hour:Minute:Second
0 hit: TAI64N
0 hit: Epoch

Success, the total number of match is 2

However, look at the above section 'Running tests' which could contain important

Here instead of regular expression to test, you could simply provide the file of you tentative filter.


A typical action for most of the cases would be to ban detected IP of an abuser using iptables, and that action is described in the following Fail2ban action definition:

> sudo grep -v  '^#' /etc/fail2ban/action.d/iptables.conf


actionstart = iptables -N fail2ban-<name>
              iptables -A fail2ban-<name> -j RETURN
              iptables -I INPUT -p <protocol> --dport <port> -j fail2ban-<name>

actionstop = iptables -D INPUT -p <protocol> --dport <port> -j fail2ban-<name>
             iptables -F fail2ban-<name>
             iptables -X fail2ban-<name>

actioncheck = iptables -n -L INPUT | grep -q fail2ban-<name>
actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP
actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP


name = default
port = ssh
protocol = tcp

Default action in 0.7 branch of Debian package though is iptables-multiport, which can be used to ban multiple ports at once. Besides it, there are other actions available such as


And now we came to a point where both notions (filter + action) should be used together. “Jail” is the specification containing a filter and desired set of actions to be performed. Here is an example from original upstream version of /etc/fail2ban/jail.conf.


enabled  = false
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
logpath  = /var/log/sshd.log
maxretry = 5

In this example, the jail ssh-iptables defines the name of the filter to be used (so the full file name is implied to be /etc/fail2ban/filters.d/sshd.conf). Also it defines the list of actions to be performed: TCP port 22 has to be banned after 5 unsuccessful attempts, and an email has to be sent to informing about such action.

While preparing Debian package of Fail2ban, I tuned up Debian-shipped version of jail.conf so that jail specifications becomes minimalistic, since most often all the jails should perform the same chosen action. If there is a need in a jail-specific action, it can always be specified in “action” parameter of the jail. The same jail in Debian-shipped jail.conf looks like


enabled = true
port    = ssh,sftp
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 6

Since the rest of the jails present in jail.conf are not active by default, desired jails can easily be enabled in /etc/fail2ban/jail.local. Here you can see a part of my locally customized jail.local:


bantime  = 3600
destemail = root@localhost

banaction = shorewall
action = %(action_mwl)s

enabled = true
maxretry = 4

enabled  = true

enabled  = true

# custom jail which used to be not present in shipped jail.conf
enabled = true
port    = http
filter  = apache-noscript
logpath = /var/log/apache*/*error.log
maxretry = 6



Amarok: listening to music will never be the same


Entry submitted by Grant Thomas. DPOTD needs your help, please contribute !

Amarok is a fully featured music player well integrated into the KDE environment. Amarok uses a database (SQLite, MySQL, PostgreSQL) delivering fast collection access, and a wide array of searching/sorting methods.

Current Feature list: (credited to

Amarok can play many audio formats through one of the back end engines. Formats include mp3, ogg, flac, wma, wav, and others. Basically any file format that the selected engine can play, Amarok can use. For more information, see

Amarok includes full support of, which allows users to record each track played in an online community. From, Amarok can bring back similar artists and tracks, as well as other recommended artists / tracks. Amarok also supports play lists, which are play lists of music stored on’s website, allowing a user to share their music taste with the world.

Suggested songs

Amarok also supports the Magnatune album label and online purchase of Magnatune’s albums. Magnatune albums aren’t inflicted with DRM, which allows complete freedom of how a user can listen to their personally purchased music. Follow this link for a little more information about Magnatune.

Amarok is extensible, and already has a growing library of scripts and plug-ins. For your convenience: Scripts available for Download

Amarok also has integrated support with Musicbrainz, allowing a track, for example, with no id3 or other tags, and named generically to be analysed, and identified. The section immediately below will illustrate some support of Musicbrainz

Retrieving the information:
Musicbrainz 1

Applying the information:
Musicbrainz 2

The following screen shots show a small example of how a search may be done.

The following image shows a search done with the simple string ‘america’. Notice how Amarok searches through all fields to search for ‘america’.

search 1

This image shows a search with the string ‘artist:america’. This tells Amarok to search only the artist column for ‘america’.

Search 2

This image shows a search further filtering the results with the search string ‘artist:america title:horse’. Note that searches can be filtered by fields not showing at the time.

search 3

Note that when you filter the play list and Amarok changes songs, it will pick from the filtered list. This can be a boon or a burden depending on what you are doing, just keep this in mind.

Amarok also has quite a few User Interface goodies…

Amarok is available in all recent releases of Debian and Ubuntu

sshfs: Easy (and secure) access to a remote file system


Entry submitted by Diego Essaya. DPOTD needs your help, please contribute !

I’m sure you are already familiar with the ssh command. (If that’s not the case, maybe this article is not for you). Most likely you have also discovered scp ages ago. But it is probable that you have never heard of sshfs before.

SSHFS is a file system client based on the SSH File Transfer Protocol. It allows to mount a remote file system in your box, and use it as if it was a local directory. Besides the fact that it is a secure protocol, the main advantage of SSHFS is that it is very easy to setup and use. It has only two easy to meet requisites:

  1. The local system needs to have the FUSE kernel module loaded.
  2. The remote machine needs to be running a SSH server that understands the SSHFS protocol.


First of all we must install the SSHFS package in the local system:

# apt-get install sshfs

The package is available in both Debian and Ubuntu repositories.

Next, let’s make sure that condition #1 is met. In the local system, type (as root):

# modprobe fuse

This will load the FUSE kernel module. Besides SSHFS, the FUSE module allows to do lots of other nifty tricks with file systems, such as the BitTorrent file system, the Bluetooth file system, the User-level versioning file system, the CryptoFS, the Compressed read-only file system and many others.

As for condition #2, chances are it is already met: the OpenSSH server is
already installed and running in most Debian and Ubuntu systems. If this is not your case, just run the following command on the remote system:

# apt-get install ssh


Luckily, SSHFS is very simple to use. The following command:

$ sshfs user@host: mountpoint

will mount the home directory of the user@host account into the local directory named mountpoint. That’s as easy as it gets. (Of course, the mountpoint directory must already exist and have the appropriate permissions).

If you want to mount a directory other than the home directory, you can specify it after the colon. Actually, a generic sshfs command looks like this:

$ sshfs [user@]host:[dir] mountpoint [options]


The classic alternatives to access remote file systems are NFS and SMBFS. The main advantages of SSHFS are:

If you are sharing files between Windows machines, perhaps SMBFS is the best option. If you are not concerned about security and you need a faster alternative to SSHFS, go for NFS.


most: an alternative and powerful pager program


Entry submitted by Emmanuel Bouthenot. DPOTD needs your help, please contribute !

Most is a powerful “pager”, similar to more and less. It is written in C using the slang library. It can display:


To use most as the default pager you can add this into your start-up user script (~/.bashrc, ~/.zshrc, etc.)

[ -x /usr/bin/most ] && export PAGER=most

You could also set it up to replace more and less:

[ -x /usr/bin/most ] && alias more='most' && alias less='most'


Manpage view :

Windowed view of compressed files :

Binary file view:

Most has been available in Debian and Ubuntu for a long time now, and is well maintained.

enigma: addictive puzzle game with a high dose of dexterity


This week, an extra DPOTD article will be published on Friday, remember to check it out!

Shameless self-promotion submitted by Erich Schubert. DPOTD needs your help, please contribute !

Enigma is an addictive puzzle game

A re-invention of the discontinued game “Oxyd” available for Atari, Mac and (some versions) DOS, with hundreds of levels and improved graphics.

The game principle of Enigma is simple: uncover pairs of stones as in the “Concentration” (also known as “Memory” or “Pairs”) board game.

Simple? Yes. Easy? Not by far!

You’ll first have to reach these stones. Your actor is a black marble controlled via the mouse - and influenced heavily by physics. Different floors show different friction properties, blocks might need a good bump to move in the intended direction, bouncers, slopes and rubber bands might be pushing or pulling your marble in a different direction than you’d like it to go. Sometimes you have to hit exactly the right angle to make the marble bounce of a block in space right towards your goal.

And then the blocks are hidden in labyrinths, protected by lasers and traps, and all kinds of puzzles you’ll have to solve first before being able to reach them. There are dozens of items you’ll discover and need to find out how to use right to reach the goal.

Enigma levels are very different in nature. Some levels are well-known Sokoban levels (except you’ll have to be careful to not move boxes you didn’t intend to) and similar well known puzzles ported to be controlled with a marble, some are vast labyrinths where you have to carefully balance your marble on a small ledge. Some levels require speed and mouse dexterity, others can only be solved by bright minds. Having to control 10 marbles connected with rubber bands and charged with different magnetic charges at the same time is just one of the challenges you’ll be facing in enigma. Such levels, that blend all these features into a unique mix can best be described as “Enigma”.

Here are some screenshots, you can find more in the homepage.


Enigma is available in Debian since Sarge and in Ubuntu since Warty. Unfortunately, Enigma 1.00 was not released on time to be included with Debian Etch. Enigma 0.92 was in Etch when the freeze was called.

moreutils: A collection of useful command-line tools


Entry submitted by John Beisley. DPOTD needs your help, please contribute !

Moreutils contains a suite of utilities for command-line users. Written by multiple authors, they are individually quite modest, and perhaps too limited in scope to exist in a package in their own right, but together they form a useful accompaniment to existing command-line tools.

Following are a few examples of the utilities in moreutils, and how they can be used.

Sponge - Soaking file redirects

Many users of the command line have made a mistake such as the following:

$ grep -v someuser /etc/passwd > /etc/passwd

As the shell runs this command it will immediately truncate the destination file, and then run the grep command on it. The end result is an empty file - certainly not what was intended! After learning from their mistake, the user might instead redirect the output to a temporary file, then move the file on top of the original:

$ grep -v someuser /etc/passwd > /etc/passwd.tmp
$ mv /etc/passwd.tmp /etc/passwd

Sponge is a simple, but convenient, command that exists to roll this process up into a single step:

$ grep -v someuser /etc/passwd | sponge /etc/passwd

Sponge ’soaks up’ its standard input, waiting for it to complete before writing to the specified output file. In this way the result is what was intended, and without the need to fiddle with temporary files.

Vipe - Interactively editing pipes

Sometimes it is desirable to put yourself in the middle of a pipe processing chain, where it will be quicker to just edit the pipe content, rather than create complex filters with sed and friends. Maybe the pipe content will be unknown, perhaps a list of files that the user would like to manually filter.

Say that you would like to touch all files in the current directory, but would like to do so selectively, you could do the following:

ls | vipe | xargs -d ‘\n’ touch

In this example a list of files is opened up in your editor (as set by either the EDITOR or VISUAL environment variables), in which you may edit the list of files to be touched at your leisure. When you are satisfied, you can save the file and quit your editor, and vipe will regurgitate the content you edited to its standard-out - touching only the files retained in the editor.

Combine - Boolean/Set operations with text files

Performing set operations with lines in two text files can also be useful. This can be useful in knowing what file names are common to two directories, for example:

Directory foo contains the files:
tom and harry
Directory bar contains the files:
tom and dick

The file lists can be written to two files ready for use with combine with the following bash command:

ls /path/to/foo > foo_list && ls /path/to/bar > bar_list

It can be complicated to find which files are present in both directories, which is where combine really comes into its own:

$ combine foo_list and bar_list

How about files that are in foo, but not in bar?

$ combine foo_list not bar_list

A note of caution, however: while using combine, ‘or’ can be used to find the complete list of files, it has the slightly odd effect of listing files common to both files twice:

$ combine foo_list or bar_list

Obtaining the union of the two lists of file names is therefore best performed with the standard sort command:

$ cat foo_list bar_list | sort -u


This introduction to moreutils has only touched upon some of the commands that it provides. It is worth experimenting with the others, very briefly described here:

Checks if a file consists of valid UTF-8
Reproduces standard input on standard output, with a timestamp prefix - good for annotating non-timestamped log files.
Enables a user to “edit” a directory with their text editor. That is, to conveniently delete and rename files.
Outputs requested information about a specific Linux network interface, without the need to parse ifconfig output.
Acts like tee, but pipes to given commands, instead of standard out and files.
Automatically recognises compressed files passed to a given command, uncompresses them to a temporary file and passes the uncompressed files in place of the original compressed file arguments.
Connects two commands with a pipe, as in command1 | command2, but returns the exit value of the first command, rather than the second.

moreutils has been available in Debian in testing and unstable distributions, and in Ubuntu from Edgy onwards.

glabels: Label, business card and media cover creation program


Entry submitted by Dave Seff. DPOTD needs your help, please contribute !

gLabels is a program for creating labels and business cards. It is designed to work with various laser/ink-jet peel-off label and business card sheets that you’ll find at most office supply stores.

This application is a gem of a program for anyone who want to create their own business cards, address labels, CD Labels and covers, and much more. It has an extensive database of label and sticker formats for most major brands of labels such as Avery, Neato, and Memorex. It also has a template creation feature which allows for custom labels and designs. For this example I will explain the basics on how to create a set of business cards.

When you choose new from the file menu, you are presented with a list of various standard label sets. I chose Avery 5871 Business cards as that was what I had purchased from the store.

From here you can start designing. You can place and format text, images, and basic shapes to your liking. Don’t worry about needing to duplicate these to cover the entire sheet of labels. gLabels knows to print the entire sheet as per the template used. Once you are satisfied with your design, just send it to the printer once you have loaded it with the store bought labels.


As you can see the interface is quite simple to use. Editing labels is simple and straight forward. News, updates and support can be found at the gLabels homepage,

gLabels is written for the Gnome desktop environment but just like most Linux applications, it will run under any window manager. KDE has a similar application called kbarcode. The name is misleading however it does provide the same functionality. It does not seem to be as straightforward as gLabels, but it does support batch printing if you are mass producing labels for commercial use.

gLabels has been available in Debian since Sarge, and in Ubuntu since Warty.

Reportbug-NG: An easy to use alternative to Debian’s classic reportbug


This week, an extra DPOTD article will be published on Friday, remember to check it out!

Entry submitted by Bastian Venthur. DPOTD needs your help, please contribute !

Reportbug-NG is an alternative to Debian’s classic reportbug written with the end-user in mind. It has a nice and clean Qt interface allowing you to search for existing bug reports and filter them easy and fast. You can give additional information to existing bug reports or create new ones. In both cases a dialog will ask you for all relevant information (summary, severity, tags, …) and will finally start your favourite mail client, where you only have to fill the gap with your full report and click the “send” button.

A screencast showing Reportbug-NG in action (click on the image for full size):
Reportbug-NG screencast

The major advantages over reportbug are:

Note to Ubuntu users: since reportbug-ng submits reports to the Debian BTS, it isn’t useful for reporting bugs in Ubuntu packages.

Reportbug-NG is actively developed and maintained by Bastian Venthur. It is fully functional and currently no major flaws are known. As it’s fairly new, it’s only available in Debian unstable.

Some features I planned for the next versions:

Project homepage:

TinyCA: simple user interface to manage a small CA


Entry submitted by Julien Valroff. DPOTD needs your help, please contribute !

TinyCA aims at helping you in the certification authority (CA) management task. Despite its easy-to-use and somewhat intuitive interface, it provides extended functions for advanced users who want to simplify their life.

Screenshot: CA & certificate list tabs

TinyCA - main window

TinyCA - certificate list

It works like a front-end for OpenSSL and offers (almost) the same features, amongst which:

Screenshot: create & import CA dialogs

TinyCA - creating a new CA

TinyCA - importing an already existing CA

Users already familiar with OpenSSL will be able to work immediately with TinyCA, while the more inexperienced will first have to look for documentation on certificate management elsewhere, as suggested by TinyCA documentation page:

TinyCA - help

TinyCA reveals particularly useful when you have to manage a bunch of certificates, eg. in the case of an OpenVPN tunnel. In this case, I do only regret TinyCA is not able to generate Diffie-Hellman keys, for which you still need to use OpenSSL from the command line.

TinyCA is available in Debian Sarge in the GTK version, whereas the latest version in Debian testing and unstable is based on the Perl-Gtk2 bindings (this lead upstream developer to call the new generation TinyCA2, whereas the Debian package kept the name tinyca). The package is also available for Ubuntu users in the universe component.

Once the package is installed, do not look for a TinyCA entry in your GNOME or KDE menu, none is provided. Instead, just look in the Debian menu, or simply launch the command in a terminal emulator: tinyca2.

If you end up using TinyCA, remember to keep your ~/.TinyCA directory private, as it contains the private keys for your CA and your certificates! Also do use a secure method for transferring your keys to the machine, eg. ssh.

Gobby: A Collaborative Text Editor


Entry submitted by Adam Victor Nazareth Brandizzi, Pedro Vaz de Mello de Medeiros and Pedro Araújo Chaves Júnior. DPOTD needs your help, please contribute !

Gobby is a Free Software collaborative text editor. That means that various users can edit the same text file simultaneously.

Using Gobby is easy: just create a session, then other writers may connect to your host and subscribe to any publicly available documents in the Document List dialog, and/or create a new shared document. Files are opened in tabs in the main window, so that the user can edit them simultaneously. Any user can contribute with his own set of files to the pool of shared files, just like the session owner, and anyone can save a local copy of them.


The user interface is very clear and simple: the main window is divided in two parts: the text being edited on the top and a chat window below with an IRC look and feel (but only one IRC command is supported, though: the good old /me ;)). In the main window, each fragment of text is colour-coded to indicate which user wrote it. The list of currently connected users, along with their corresponding colours, can be checked in the Online node in the User List dialog.

Gobby has support for some common text-editing features such as auto indenting, tab-to-space replacement, smart Home key, font selecting, syntax highlighting by file type, etc. Gobby will try to guess the right file type, but if it doesn’t, syntax highlighting can be changed on the fly from a long drop-down menu list. It is also possible to define a password-protected session; this is useful if you want to control which users are allowed to connect.

The chat functionality provides a separate channel that allows authors to communicate and coordinate their efforts —even if they are not physically close to each other—, which can be particularly useful if they want to discuss, for instance, guidelines or other things that don’t exactly translate to text editing. Or you can just fire up Gobby to have a simple and lightweight chat session with some friends ;).


The Gobby developers also provide the specifications of the Obby protocol used for implementing the collaborative editor, sobby, the Obby dedicated server, and libobby, the library for developers interested in creating their own clients and servers.

Known issues:

There are some reports about crashes on the Gobby site. We have not observed any of them ourselves, though. On functionality, Gobby does not provide any Undo/Redo capabilities —and we have really missed them. Also, there is no way to keep track of deleted text. Another missing feature is a graphic representation of the cursors of all users and means to distinguish them from each other, but this functionality is already expected for Gobby v0.5.0.


Gobby is licensed under the GNU General Public License (v2).


Gobby is available in Debian Etch and Sid, as well as in the Ubuntu Universe since Breezy Badger. You can get more information at the Gobby home page.

fortunes: Fortune cookies for all


Entry submitted by Gaurav Vaidya. DPOTD needs your help, please contribute !

Fortune cookie programs store long lists of quotes, sayings, aphorisms, adages, IRC transcripts, and any other text which might be interesting. Since time immemorial (okay, okay, since 1979) Unix users have added fortune cookies to their .bashrc (or equivalent) files, displaying a random quote every time a terminal is created. Quotes are drawn from subjects and sources of interest to geeks, from William Shakespeare to Douglas Adams, from Ambrose Bierce to Ziggy, from Linus Torvalds to the Fortune editors themselves.

On Debian/Ubuntu, the fortune cookie program of choice is available through the package fortunes.


The program is ridiculously simple to run: executing /usr/games/fortune (or /usr/bin/fortune) displays a pithy quote:

       "I assure you the thought never even crossed my mind, lord."
       "Indeed?  Then if I were you I'd sue my face for slander."
               -- Terry Pratchett, "The Colour of Magic"

Or perhaps something insightful:

It's hard to tune heavily tuned code.  :-)
            -- Larry Wall in <>

Or even self-referential:

This fortune would be seven words long if it were six words shorter.

Although the program works fine without any arguments, the following
may be helpful:

Display only offensive fortunes (you will need to install the offensive fortunes first; they are available in the fortunes-off package).
Display both offensive and non-offensive fortunes.
Wait for a while after displaying the comment, but before exiting. The amount of time waited depends on the number of characters in the fortune displayed; longer quotes will be ‘waited for’ longer. Very nice for scripting; for instance, running while true; do fortune -w; done; in a Bourne shell will display fortune after fortune, with a convenient pause after each one. My preferred script, while true; do echo === `date` ===; fortune -w; echo; done; will do the same, except with a time-stamp at the top of each fortune.


To install, you will need to install the fortunes package. This package contains 15,000 quotes itself, and depends upon fortune-mod, which contains the executables, and fortunes-min, which contain other fortunes. These packages have been available in Debian and Ubuntu since long ago.

Other packages (available for both Debian and Ubuntu) allow you to install quotes in Chinese, Bulgarian, Portuguese, Czech, Slovak, German, Esperanto, Spanish, French, Gaelige (Irish), Italian, and Polish, as well as Debian hints and BOFH excuses.

The quotes used in this submission are from fortune-mod version 9708.

unclutter: hide the mouse cursor after a period of inactivity


Entry based on submissions from Oliver Kiddle, Tore Morkemo and Gwern Branwen. Yes! Three independent readers wrote about it, it must be good :-)
Remember, DPOTD needs your help, please contribute !

Do you ever find that occasionally the mouse pointer obscures just the bit of the screen with the word you’re currently reading? Having to move the mouse or guess the word under the pointer is only a minor irritation but it can be an irritation none-the-less.

Unclutter is a small but unique package for X11. What it does is very simple: if you aren’t using the mouse, it hides the mouse. This is useful simply because if you aren’t using the pointer, there’s no reason for it to be visible. This may not sound particularly useful, but making the mouse be invisible frees up screen real estate, prevents it from distracting you, and just generally makes for a much more pleasant experience, particularly when reading a document or using primarily keyboard-based applications.

Unclutter is easy to use. Just put a line like this in your .xsession, .gnomerc, “Startup Programs” or wherever you enter commands to be run at startup/login:

unclutter &

Now, if you stop moving your mouse, the cursor will disappear after 5 seconds.

Unclutter has a few nice arguments worth checking out:

There are more options, just check out the man page.

Unclutter is a maintained, stable & largely bug-free package which has been included in basically all versions of Debian and Ubuntu.

figlet: a totally useless, therefore essential tool


Entry submitted by arno. DPOTD needs your help, please contribute !

FIGlet is a command line tool. It’s purpose is to draw nicely formatted big characters. For example, the output of command figlet debian is:

_ _ _
__| | ___| |__ (_) __ _ _ __
/ _` |/ _ \ ‘_ \| |/ _` | ‘_ \
| (_| | __/ |_) | | (_| | | | |
\__,_|\___|_.__/|_|\__,_|_| |_|

To get more fancy outputs, FIGlet comes with a set of 18 fonts, and more than 400 fonts are available for download. For example, bubble font writes each character encircled in a bubble, and script font imitates handwriting. You can get the list of installed fonts, along with output samples, with command showfigfonts. Here is output of figlet -f script debian:

| | | o
__| _ | | __, _ _
/ | |/ |/ \_| / | / |/ |
\_/|_/|__/\_/ |_/\_/|_/ | |_/

FIGlet stands for Frank, Ian and Glenn’s LETters, because it was inspired by Frank’s email signature, written (mostly) by Glenn, and Ian helped. First version was written in spring 1991. FIGlet has since become a well known software in (and even outside) the UNIX world, and has been declined in multiple ways, like a XChat, or an Eclipse plug-in, a PHP class, and many web based FIGlets.

Related software

People who like to write fun stuff may also be interested in command banner from package bsdmainutils. It also outputs large characters, but unlike FIGlet, draws them vertically. It was not designed as a fun stuff, but as a way to separate printings documents from each other. Other tools have been designed specifically to write fun stuff. Among them, Cowsay is one of the most worthwhile. Toilet is very similar to FIGlet for Unicode systems. It comes with many new features, such as colour fonts, or HTML and SVG output.


So, FIGlet is a really nice software that will make your emails cool and pleasant. But please, do not overuse it in mailing lists!

FIGlet is available in both Debian and Ubuntu in all distributions.

MultiTail: view multiple logfiles windowed on console


MultiTail is an extremely configurable monitoring tool. With it one can monitor not only logfiles but also output of other commands as well (like rsstail, wtmptail (see users login and logout), nagtail (for nagios status).

MultiTail is a tool for the console. One can also run it, of course, in a terminal window.

When it runs, it can splitup the terminal in multiple smaller windows:

Lots of windows in Multitail

It can not only display in seperate windows but merge as well. So you can display the apache error logging merged with the access logging and if you like you can merge the output of, say, ping and rsstail as well. There are no limits to the number of windows or number of files/commands you merge.

Merging multiple outputs

A powerful feature is that it can apply colorschemes:

Color-schemes selection

Multitail in action inside a gnome-terminal:

Multitail inside Gnome Terminal

Colorschemes are available for all major applications (postfix, apache, sendmail, tcpdump, squid, etc), and adding new ones can be done easily.

Of course it can also filter out lines (or parts of lines) like with grep and sed but it can also convert parts of lines. E.g. in squid and qmail logging the timestamp can be converted to something more readable. It can also convert ip-addresses, errno-numbers and lots more. And if you would like to extend the conversions, you can let MultiTail invoke external scripts (perl, bash, python, etc.) for these conversions. Those external scripts can be used for the coloring as well.

Everything MultiTail can do can be configured in the configuration-file or via the commandline. As the number of options it has are quite large, it has on-line help as well. Also, if one doesn’t like commandline parameters then everything can be setup via interactive menus. When that is finished, MultiTail can write a shell-script to disk with which MultiTail can be started exactly like it ran previously.

It has too many features to list here, but they’re all listed here.

MultiTail is available in Debian stable (3.4.8), testing/unstable (4.2.0) and experimental (4.3.1) and in Ubuntu since Warty. The latest upstream version is 4.3.3. MultiTail is actively maintained. Requests for new functionality are very welcome and most of the time implemented in a few days. Bugreports too, of course.

Target users: everyone who uses the ‘tail’ command


wajig: Simplified Debian administration front-end


Entry submitted by Chris Lamb. DPOTD needs your help, please contribute !

Wajig is a simplified command line administrator for Debian written by Graham Williams.

It merges apt, apt-cache, dpkg and the start and stop scripts (among many, many others) into a single command, centralising typical Debian administration tasks and making commands easier to remember. Some commands are even overloaded to give them extra functionality.

For example, wajig install will accept the name of the package as an argument á la apt-get and aptitude:

$ wajig install lighttpd

But it will also accept a path to a local file:

$ wajig install ./lighttpd_1.4.13-9_i386.deb - install local package

Other useful commands that Wajig provides:

Do an update followed by a download of all updated packages
Check reported bugs in package using the Debian Bug Tacker
Retrieve/unpack sources and build .deb for the named packages
Retrieve latest changelog for the package
List of packages which depend on the specified package
Install package and associated suggested packages
Install package and associated recommended packages
Install package and recommended and suggested packages
Install packages from specified distribution
List size of all large (>10MB) installed packages
Identify when an update was last performed
Remove package and those it depend on and not required by others
Trace the steps that a dist-upgrade would perform
Trace the steps that an upgrade would perform
Start or stop a service

A full list is available from the Wajig homepage, and also running wajig list-commands.

Wajig is ideal for users who simply wish to administer their system with a minimal amount of fuss, but is perhaps even more useful for users wishing to learn more about Debian’s package system with a hands-on approach. For example, the –teaching/-t command line option toggles the display of the underlying commands being executed. Even power users may also find a use for Wajig when performing less common tasks, or when they are simply feeling lazy.

Wajig is run as a normal user, but will invoke sudo when necessary. Tab completion of commands inside a Bash shell is available too.

Wajig has been available for ages in both Debian and Ubuntu.

MPD: The Music Player Daemon


Entry submitted by Igor Stirbu. DPOTD needs your help, please contribute !

Music Player Daemon is a server that plays sound files and streams and can be controlled through remote clients. MPD supports Ogg-Vorbis, MP3, FLAC, Wave and AIFF for sound files and Ogg-Vorbis and MP3 for streams. Also has support for cross-fade.

MPD is a very flexible media player due to it’s client/server nature. MPD can be configured to use your sound card or interact with an icecast server and send the stream over the network. It can be controlled with clients that may reside on the same machine or all over the network.

When MPD starts, it reads first ~/.mpd.conf and then /etc/mpd.conf, if the former can’t be read. So it may be configured to run at startup or be started by any user. Here is the content of my .mpd.conf file:

# ~/.mpdconf
music_directory     "/home/igor/media/mp3"
playlist_directory  "/home/igor/.mpd"

state_file      "/home/igor/.mpd/state_file"
db_file         "/home/igor/.mpd/tag_cache"
error_file      "/home/igor/.mpd/error_file"
log_file        "/home/igor/.mpd/log_file"
pid_file        "/home/igor/.mpd/pid_file"

mixer_type      "alsa"
mixer_device    "default"
mixer_control   "PCM" 

filesystem_charset  "UTF-8"

audio_output {
    type        "alsa"
    name        "Local sound card"

audio_output {
    type        "shout"
    name        "Icecast2 stream ( http://keo:8000/stream.ogg)"
    host        "keo"
    port        "8000"
    mount       "/stream.ogg"
    password    "hackme"
    # quality     "7.0"
    bitrate     "128"
    format      "44100:16:1"
    # Optional Paramters
    user        "source"
    description "All your music are belong to us"
    genre       "rock"

This setup allows me to directly use my sound card when working on the computer where MPD runs or enable the icecast stream and listen over the network when using the laptop.

The modifications to icecast.xml are these:


Nice features for MPD are available due to it’s configuration files. If you specify a pid_file you can use mpd --kill to stop the daemon. The state_file saves the state of the player (i.e. the playlist, the time and the name of the current song, the enabled outputs, etc.) If stopped gracefully, it writes the state_file and when started, resumes playback and restores the playlist.

Visit MPD’s home page for more information regarding releases, clients, FAQ. Packages for MPD are available in Debian since Sarge, and in Ubuntu since Hoary.


In Debian a few clients are available for MPD and more of them listed on the MPD web page. The one I use is Gmpc. It supports notification area integration, pop-up notification, playlist manager, server settings panel. There are ncurses, command line, web and other types of clients.

In the following screenshot, you can see a bunch of clients connected to the same mpd daemon: gmpc, pympd, ncmpc (ncurses), and phpMp2 (web).

MPD clients screenshot

RSIBreak: a KDE utility which can help to prevent the RSI


Entry submitted by Frederik Schwarzer. DPOTD needs your help, please contribute !

RSI (Repetitive Strain Injury, ask Wikipedia for details) is an illness which can occur as a result of working with a mouse and keyboard.

RSIBreak forces you to suspend your working process for short periods of time, so that your muscles and nerves can relax every once in a while.
Once you have started RSIBreak, it settles down in the system tray and immediately starts its timers. Per default there are tiny breaks of 20 seconds after every 10 minutes and big breaks of one minute every hour. I configured the tiny breaks to be 3 minutes every 20 minutes and the big breaks to be 10 minutes every hour, so it better meets my laziness. :o)

RSIBreak is configurable over a context menu from the system tray icon to start automatically at KDE startup. You can also adjust how to handle short breaks (no keyboard or mouse activity) within the work cycle and what to do within the scheduled breaks. For instance RSIBreak can show a slideshow of pictures found in a given directory, darken the screen and disable normal keyboard and mouse functions or only show a notification popup besides the system tray icon. Anyway, if RSIBreak asks you for a break at a bad time, you can postpone the break by simply hitting the Escape key or pressing the Skip button. This can be disabled in the configuration dialog, so if you find youself cancelling four out of five breaks, this would probably be good for you. :)

The screenshot shows the statistics page reachable over the context menu, which holds a permanently updated summary of overall usage.

Statistics (click in the image to get a larger image)

For Gnome there is a similar application called Workrave that offers some additional features like showing excercises which you can make during the breaks (someone should definitely review workrave for DPOTD).

RSIBreak is not available for the current stable release (named Sarge), but for testing (currently Etch) and Sid. Also you can find the latest version in ubuntu feisty. You can also download the source code and get links to several packages from the RSIBreak Homepage.

gnome-main-menu: a new attractive menu for the GNOME environment


Entry submitted by Yann Benigot. DPOTD needs your help, please contribute by sending us original, high quality entries !

Look at your GNOME application menu. It’s simple, but has got one big problem: it doesn’t really allow you quick access to your favorite applications. Of course, you can make little icons on the panel to get a fast way to launch your programs, but this only scales so far. Finding an icon on a long bar with really small icons can be really annoying.

Gnome-main-menu is an easy and beautiful solution to that problem. It’s an applet to add to the desktop bar which offers you two-click access to your favorites applications, and also to your last documents and places. Additionaly, it allows easy access to disk usage levels, network connection information and the ability to add new applications to the base menu.

Adding an application Gnome Main Menu GMM menu

Not simply a new menu, it also offers an application browser with search. This enables you to quickly drill down to your selected application with a short description of the app, something of particular use to long time debaday addicts.

other apps Searching for other apps

You might also be pining for the new 2.18 version of GNOME and the all in one control panel. Well, pine no more as all control applets also have their own search in GMM!

GMM control panel

Gnome Main Menu is available in Debian testing/unstable and in Ubuntu Edgy/Feisty in the package gnome-main-menu.

Yakuake: a Quake-style terminal emulator based on KDE Konsole technology


Entry submitted by Sam Mirshafie. DPOTD needs your help, please contribute !

Maybe, you are a novice Linux user that do not yet understand the convenience of the command terminal, or you are an experienced user that always have some console windows sitting idly in the task bar. In order to do many tasks really efficiently, you should use the console, and in order to use the console effectively, you should use a terminal application such as Yakuake.

Whenever you need to use the terminal, just hit F12 (or any key that you’ve assigned) and Yakuake will slide down from the top of your screen. Since it is based on Konsole, it has got tabs and background transparency.


Yakuake’s design is quite different from other KDE applications. The tab bar is designed for transparency, and if you click on an active tab, you get a rename field. However, right-clicking on a tab has no effect. Yakuake relies much more on keyboard shortcuts (which I like but others might find disturbing).

Under the tab bar, there’s a special title bar. In the right corner, there are three buttons. Yakuake can be configured to go away whenever it loses focus, which many users find clever (not me!). So, the first button, the one with the + sign, controls the retract behavior. If the + button is pressed, Yakuake will stay on top until you hit the activation key (F12). The middle button has a downward pointing arrow, which gives you a quick configuration menu, and next to it, there’s the X button, which quits Yakuake.

Yakuake in action (click in the image to get a larger image)

Configuring Yakuake

One thing that users may find confusing is that Yakuake do not have a single configure dialog. The middle titlebar button gives you some of the options; such as terminal proportions, animation duration, and access and control keys. (Tip: make sure to check the control key dialog so you know all the keyboard shortcuts.). If you right click on the terminal body, you get a context menu with terminal-related options, such as appearence, history and character encoding.

Get it now

Yakuake is in the Ubuntu Edgy/Dapper and Debian repositories.
Yakuake is inspired by Kuake, and there is a similar Gnome application called Tilda, both are in the repositories as well.

digikam: advanced photo management


Entry submitted by Amanda Angell. We are in a big need for new editors, able to dedicate time on a regular basis to debaday. See the contribute page for details, and contact us !

digiKam’s website states that it is an “advanced digital photo management application for Linux” which understates the programs abilities. It does everything from auto-detecting your camera, importing the photos, sorting your collection in useful ways, and does some basic - or even creative - photo editing. It is only available for KDE, so Gnome users miss out. It is Integrated into KDE applications using KIPI (KDE Image Plugin Interface), and can drag-and-drop into other KDE programs.

DigikamImagePlugins is an add-on that enhances the basic digiKam Image Editor into a much more powerful tool for playing with pictures. My favorites are the distortion effects, oil paint, and the adjust levels plug-ins. There is a Create Calendar section in digiKam’s Tools menu, which is a lot of fun and the end result can be printed or saved as a PDF.

digiKam uses dcraw 8.41 to decode “more than 200 proprietary camera file formats”, and the Gphoto2 project supports “over 700 digital camera devices”. Cameras using USB, serial connection, and USB/IEEE Mass storage connections are supported.

The camera interface is fast and smooth, with thumbnails to preview the pictures before downloading and, at least with Canon cameras, you have the option to only select new pictures for download.

Photos can be organized by albums, date, saved searches, and a completely customizable tagging system. This makes a big difference when trying to find and organise your photos as opposed to the simple date order of some programs.

Once in the main window, a left click opens the photo in the digiKam Image Editor. Right click for more options, including opening the photo in other editing programs (such as the Gimp). Movie files are opened in your favorite multimedia software.

In comparison, I have been using Gnome’s camera import using gthumb image viewer for 6 months and there are noticeably less camera interface options. It feels a little disjointed and doesn’t have the options of sorting your photos into albums, tags or ratings. In-fact, I feel that digiKam handles my camera better than the original Windows XP software.

Version 0.9.0 is available in Debian (experimental) and Ubuntu.

digiKam won the 2005 TUX Readers’ Choice Award for “Favorite Digital Photo Management Tool”, and for good reason. It is powerful, easy to use, and intuitive.


gnuplot: a command-line driven interactive plotting program


Entry submitted by Henryk Gerlach. DPOTD needs your help, please contribute !

A picture says more than a thousand words. Sometimes you have just plain data files and want to produce some nice plot out of them. If this does not happen on a regular basis you might use oocalc, but it is not so easy to automatize this using
That’s were gnuplot comes into play.

Here is a real world example: sar is a utility to monitor the performance of your server (it should be covered here some other day!). A typically sar output for a not so busy server looks like this (in fact the data was sexed up as the average reveals):

Linux 2.6.9-023stab039.1-smp (host.domain.tld)     02/17/07

00:05:01          CPU     %user     %nice   %system   %iowait     %idle
01:35:01          all      0.19      0.00      0.03      0.00     99.78
01:45:01          all      0.35      0.00      0.26      0.04     99.35
01:55:01          all      0.41      0.00      0.66      0.00     98.93
02:05:01          all      0.48      0.00      1.19      0.03     98.31
02:15:01          all      0.13      0.00      5.03      0.01     94.83
02:25:01          all     10.34      0.00     20.46      0.00     69.20
02:35:01          all     40.35      0.00     20.79      0.00     38.86
02:45:01          all     15.32      0.00     10.61      0.01     74.06
02:55:01          all      0.08      0.00      0.17      0.00     99.74
03:05:01          all      0.05      0.00      0.01      0.00     99.94
03:15:01          all      0.01      9.39      0.25      9.90     80.45
03:25:01          all      0.00     14.11      0.30      2.79     82.80
03:35:01          all      1.07      0.00      0.04      0.02     98.87
03:45:01          all      0.00      0.00      0.00      0.00    100.00
03:55:01          all      0.05      0.00      0.01      0.00     99.95
04:05:01          all      0.04      0.00      0.00      0.00     99.96
04:15:01          all      0.05      0.00      0.01      0.00     99.95
04:25:01          all      0.01      0.00      0.01      0.02     99.96
04:35:01          all      0.57      0.00      0.25      0.00     99.18
04:45:01          all      0.00      0.00      0.01      0.00     99.99
04:55:01          all      0.01      0.00      0.00      0.00     99.99
Average:          all      0.14      0.18      0.06      0.20     99.43

by piping the above in through tail +4 | head -n -1 > data.txt into a file we clip of the first three and the last line which would confuse gnuplot.

Let’s start an interactive session of gnuplot by typing gnuplot on the command line. Type the following:

gnuplot> set xdata time
gnuplot> set timefmt "%H:%M:%S"
gnuplot> plot [*:*][0:100] "data.txt" using 1:3 with linespoints title "user", \
 > "data.txt" using 1:5 with linespoints title "system", \
 > "data.txt" using 1:6 with linespoints title "iowait"

In line 1 we tell gnuplot to interpret the x axis as a time axis.

Line 2 defines the time format of the x-axis (the first column of “data.txt”).

Finally line 3 produces the plot. The [*:*] tells gnuplot to chose the scale on the x-axis, as it seems fit, while [0:100] scales the y-axis between 0 and 100. Then “data.txt” using 1:3 with linespoints title “user”, tells gnuplot to take the first and the third column of “data.txt” and plot it with points connected by lines.

The title “user” produces a legend for the line.

You can use the help plot command to learn more about the many options to format your graph.
If we are happy with the output, we can save it to a “png”-file by changing the terminal

gnuplot> set terminal png

and defining an output-filename:

gnuplot> set output “stats.png”

Okay, this all seems still pretty manual, but here is how we can automatically generate the png-file in some bash script, too:

#... generate data.txt with sar, head and tail.
gnuplot <<END
set terminal png
set output "$OUTFILE"
set xdata time
set timefmt "%H:%M:%S"
plot [*:*][0:100] "data.txt" using 1:3 with linespoints title "user", \
 "data.txt" using 1:5 with linespoints title "system", \
 "data.txt" using 1:6 with linespoints title "iowait"

But gnuplot can do much more! It can print functions and 3d-data. Check out the tutorials.

Target Users:

Everyone who needs to generate graphs of data or functions, especially in an automated manner.


Other packages doing similar things:


Although it’s called gnuplot, it is not licensed under the GPL, but some homebrewn License.

You can find gnuplots’s homepage at

gnuplot is available in both Debian and Ubuntu.

gtetrinet: multiplayer Tetris with some twists


Entry submitted by Jan Hülsbergen. DPOTD needs your help, please contribute !

Gtetrinet is a small multiplayer clone of the classic puzzle-game Tetris implementing the tetrinet protocol. It features some original ideas about how multiplayer-Tetris can be handled and it has an active user community.

Multiplayer enhancements

The most unique thing about gtetrinet is the usage of ‘extras’ or ’special blocks’. Every time a player eliminates a line of his own field, one of the remaining blocks turns into an extra. When a line containing one or more extras is eliminated, those extras go to the inventory of the player, from where he/she can use them to harm other players or to aid himself. There are numerous extras which do everything from just eliminating or adding a single line to switching playing fields with an opponent of choice.

Also, the servers offer different ‘channels’, which have slightly different game-modes. For example, the server has a #maps channel, in which the players do not start with an empty field but with some blocks/extras already there. Also, there is a #pure channel, in which the player can play a more classical multiplayer Tetris, without any extras at all.

User community

You don’t have to search for others to play against you, you can just connect to one of the public servers, for example or, which - as far as I can tell - has active players at any given time of day. And I have checked this for years now. ;-)


I already mentioned the public available tetrinet servers but there are more. You can also run your own server, using for example the package tetrinetx, which provides a nice tetrinet server implementation. There is also a package tetrinet-server, but it’s more primitive.

Also, there is a tetrinet-client package, which features a textmode client for the game.

Screenschots (click to get a larger image)

The Partyline


signing-party: complete toolkit for efficient key-signing!


Entry submitted by Thijs Kinkhorst. DPOTD needs your help, please contribute !

signing-party is a package combining a set of tools used in managing OpenPGP / GnuPG cryptographic keys. The most important tools in this package are used in preparing for or processing the results of gatherings to exchange key signatures, hence the name “signing-party”. If you are coming to FOSDEM next week-end, you should definitely have a look at it!

The two tools most interesting for the average user are gpg-key2ps and caff.

gpg-key2ps is used before attending a signing party. The script takes your public key and creates PostScript (PS) output that has your key fingerprint and userid’s nicely formatted on paper slips. The only thing left for you to do is to cut the paper.

When you arrive home after the signing event, you need a way to process all these paper slips. That’s where caff comes in. Give it a list of key-ID’s, and it will cycle through them, present you with the key’s fingerprint and asks you to confirm that it matches the paper you got.

The most important part about the signing process is that you verified the key owner’s real identity. However, caff adds additional security to that: it encrypts your signature on their key with their own key, and then mails it to them. It mails the signature for a specific user ID to the emailaddress on that user ID. This brings additional security: before the recipient can add your signature to their key, they must decrypt it with their private key, proving that they indeed have access to the key they claimed to be theirs. By mailing to the email addresses on the key user ID’s, it is also verified that the key owner can indeed read that address. All this you get for free - caff stands for “CA fire and forget”: you confirm that fingerprints match, and caff handles the rest.

Target Users:

Further reading:

The signing-party package is available in both Debian and Ubuntu. The caff tool is only available in Debian Etch and up, or in the package from

We need your help now !


Debian Package of the Day has now been alive again for more than two months. While it has been running quite well until know, we are concerned about the future, since we don’t have any article ready currently, and haven’t received a lot of contributions recently.

We really need *you* to submit articles about the packages you use. If you read Debaday, and haven’t submitted an article yet, you should really feel guilty now. :-) There are still tons of packages one could write about ! You can write about everything: games, sysadmin tools, cool end-user stuff, etc. Please read the Contribute page for more info. We are considering a switch from “two packages per week” to “one package per week” if we don’t receive more submissions soon.

Also, it would be great if we could recruit one or two other “editors”. The job is interesting (the goal is to answer submissions, providing ideas for improvements, and to adjust the last details), and you get to read all the articles in advance. You don’t need to be a native english speaker. Contact us if you are interested.

screen: a console-base window manager on steroids


Entry submitted by Ico Doornekamp. DPOTD needs your help, please contribute !

GNU Screen is one of my all-time favorite Unix tools. According to the official documentation, Screen is a full-screen window manager that multiplexes a physical terminal between several processes.

So, what does that mean ? GNU Screen allows you to run multiple console based applications like editors, shells, IRC clients, newsreaders, etc, all through a single terminal. Screen allows you to switch between applications or layout multiple windows in a single terminal. One of the most nifty features is that the programs running under Screen’s control can be detached - this means they are still running, even though the actual terminal is closed. Later a new terminal can be reattached to a running screen session, even from another host!

Here’s a small demo of a typical Screen session, the true story of Bob the system administrator:

Bob connects to the server and starts a new screen session.

bob@desktop$ ssh bob@server
bob@server$ screen 

Screen displays its welcome message, and after hitting the Return key, a new shell is started.

Screen version 4.00.03 (FAU) 23-Oct-06

Copyright (c) 1993-2002 Juergen Weigert, Michael
Copyright (c) 1987 Oliver Laumann

This program is free software; you can redistribute
it and/or modify it under the terms of the GNU
General Public License as published by the Free
Software Foundation; either version 2, or
(at your option) any later version.

[Press Space for next page; Return to end.]

This shell is now running inside the Screen session. Bob starts his favorite editor…

bob@server:~$ su -
server:~# vi /etc/apache/httpd.conf 

… and does some heavy editing.

ProxyRequests On

Order deny,allow
Deny from all
Allow from 10.0.0. 

/etc/apache/httpd.conf 993,25 94%

But then disaster strikes: The CEO comes in and trips over the uplink network cable, breaking the SSH session!

connection lost. (Connection closed)


Screen to the rescue! Bob starts a new SSH session to the server, and now runs Screen with the -x parameter.

bob@desktop$ ssh bob@server
bob@server$ screen -x 

Instead of starting a new session, screen now reattaches to the running screen session, and Bob finds his editor just the way he left it!

ProxyRequests On

Order deny,allow
Deny from all
Allow from 10.0.0. 

/etc/apache/httpd.conf 993,25 94%

While editing, Bob decides he needs to check his mail. Instead of opening another SSH session to the server, he hits C-a C - that is, he types Ctrl-a and then ‘c’.

Screen now creates a new window, opening a new shell…

bob@server$ mutt  

…and Bob starts ‘mutt’, his mail user agent.

q:Quit d:Del u:Undel s:Save m:Mail r:Reply g:Gro
2 + Dec 22 Daniel Hirschi (0.6K) Implementing s
3 + Jan 06 Ricki Silversto (3.0K) Paycheck
4 + Jan 26 Roberto (1.0K) Read this!
5 C Jan 26 Michel Wraith (9.0K) RE: finished

—Mutt: ~/Maildir [Msgs:5 19K]—(threads/date)—(a)

With the keystrokes C-a 1 and C-a 2, Bob is now able to switch between vi and mutt, from the same console.

Time to go home. Bob hits C-a D, which will detach the current screen session from his terminal, and takes the bus home.

bob@server$ screen -x
bob@desktop:$ logout 

After dinner, Bob decides to finish the job. From his home computer, he opens a new SSH session to the server, and reattaches to the running screen session:

bob@home$ ssh
bob@sever$ screen -x

The editor and mutt are still running, and Bob can now continue his work from home from the point he left.

ProxyRequests On

Order deny,allow
Deny from all
Allow from 10.0.0. 

/etc/apache/httpd.conf 993,25 94%

Screen has been available for ages in both Debian and Ubuntu.

zim: a desktop wiki


Entry submitted by Julien Danjou. DPOTD needs your help, please contribute !

Zim is a desktop wiki. It’s a WYSIWYG (What You See Is What You Get) text editor and works like a wiki, so you can have links between your pages, and pages are stored in a hierarchical structure, which makes them easy and to browse. Zim is the perfect application to take notes and keep TODO lists somewhere in an organized fashion. It is very easy to use and you can hide it in the traycon to keep it handy.

It’s written in GTK2-Perl, it’s very small and fast. You don’t need to run a Web server, as required for a standard Wiki like Mediawiki, or to run mono like Tomboy. If you run KDE, a similar program is BasKet, but BasKet is more oriented to note-taking and it it is not supposed to be a desktop wiki.

Files are stored as plain text files and organized in directories, so you can even manage them with VCS like Subversion.

Also, it allows you have multiple repositories independent of each other.

Zim is available in Debian etch and sid (but not in sarge). It’s also available in Ubuntu since Dapper. The only known bug that looks annoying is that it’s currently not possible to print notes from zim (one can still print the text files instead).


Here you have some screenshots taken from zim’s webpage:

The editor window with all widgets visible.

Minimalistic editor window with some links.

Showing the calendar and spell checking in action.

krusader: twin-panel (commander-style) file manager


Entry submitted by Matej Urbančič. DPOTD needs your help, please contribute !

Quick overview

Krusader is the most advanced twin panel file manager for Linux with a bundle of features, that can not be all included in this simple package presentation.

Program description

Krusader as an advanced twin-panel (commander-style) file-manager provides all the file-management features you could possibly want. Its simple and straight forward interface provides great working environment for newbies as well as more expert users. While its features are usually described through extended and advanced functionality, it is basically still a file manager for everyone with simple ways for copying, moving, deleting, packing, editing and viewing files. on more advanced levels it features extensive archive handling, mounted file system support, FTP, an advanced search module, a text viewer/editor, directory synchronization, support for file content comparisons, powerful batch renaming, and a lot of other things only real expert users use.

Krusader follows the same paradigm as legendary console based Midnight Commander and windows rival Total Commander. Among Linux alternatives for graphical interface the closest is GNOME commander.

To be just a bit more verbose, Krusader uses two powerful panels, command line and optional terminal emulator, strong keyboard orientation and with it the ability to perform all functions without the mouse. Or with it, if you prefer it that way. It has context-dependent invocation of scripts and programs, history of almost everything, virtual file systems for remote connections, support for many archives, search results and synchronizer, a really powerful internal viewer and editor, advanced searching capabilities on the file system, but also inside archives and search content on remote file systems.
It has several panel view modes via the PopUp panel, locate GUI frontend and separate synchronize directories, mount-manager and disk usage module. It’s archive handling capabilities are wide in features and supported archives types. It utilizes many checksum creation-verification mechanisms, calculates occupied space of files and folders, archives and remote file systems, file splitter and synchronized browsing, it provides directory comparison and filtering and also file compare by content via external diff programs. It integrates powerful renaming via Krename. It simplifies overview and changing of file permissions and ownership with support for numeric permissions, selection filters in synchronizer and searcher. It is fully mimetype-aware, uses tabbed panels and integrates editor/viewer.


Screenshots from Krusader homepage.
Click on picture to see large version.

Additional Information

Last words

Krusader project gets a lot of appraisal in reviews. Still, it’s twin panel paradigm somehow, makes users distant. From early beginnings of thin panel file managers, the idea of constantly connected source and destination panels gives an impression of geeky interface and usage. It gets down to simple solution. Use it once and you will never look back.

einstein: Puzzle game inspired on Einstein’s puzzle


Entry submitted by Kari Pahula. DPOTD needs your help, please contribute !

Einstein is a game for playing a type of puzzle, attributed to Albert Einstein (hence the name). In its original form, the riddle asks the question “Who owns the fish?” and the player is given hints like “The Englishman lives in the red house” and “The owner of the green house drinks coffee”. The riddle can be solved by placing the five neighbours to the correct order and deducing the nationalities, house colors, favorite drinks, pets and the type of cigarettes they smoke.

In Einstein, the player is given 6 groups of different types of tiles, with 6 tiles in each and a number of hints. Only one type of tiles can be found in a row. There are four different types of hints.

The gameplay consists of elimination and deduction according to the hints. For example, the “x … I” rule above reveals that “x” can’t be in the rightmost column since that would leave no room for having “I” anywhere. A click of the right mouse button removes that tile from consideration. Left clicks are conversely used to mark that the tile in question is in the claimed position. Unneeded hints can be removed from view by right clicks too.

Random clicking or guessing rarely lead anywhere, since the game mercilessly declares the game over from one wrong guess.

Einstein’s homepage is at
It is available in Debian unstable and Etch. And in Ubuntu since Feisty.

ccze: A robust, modular log coloriser


Entry submitted by arno. DPOTD needs your help, please contribute !

ccze is a log coloriser. It can parse log files, understand them (with regexes), and displays a nicely formatted output. It becomes easier to catch important information from a log file.

To cope with different kind of logs, ccze uses different plugins, each able to understand one type of file. Currently, ccze support 19 different plugins, such as exim, httpd, procmail, and much more. If a line is recognized by no plugin, a default parsing and coloration are available. You can also add support for a new type of file, by creating a plugin and copying it in /usr/lib/ccze, or $HOME/.ccze.

By default, ccze uses ncurses for output, but you can also display on standard output, or to format a report in html. Czze is based on colorizer, an older log coloriser. Actually, ccze was a rewrite in C language to make it faster (coloriser was written in perl language).

Related tools

Other log colorizer in Debian and Ubuntu include lwatch and loco. Loco is a nice tool, but only uses a generic parser. Therefore, output is sometimes less accurate than ccze. With lwatch, you can define your regexps in a configuration file. So, it’s more easy to add a new type of file. Lwatch reads data from named fifo, so it is not really suitable for use from the command line.

Target Users:

Further reading:

Loganalysis.Org has online bibliography on logging and related topics. You can consult it at


Latest ccze release is available in both Debian and Ubuntu.

agave: Design colour schemes the easy way


Entry submitted by Phil Bull. DPOTD needs your help, please contribute !

Agave (formerly GNOME Colorscheme) is a simple GNOME utility for generating colour schemes.

Select a base colour and Agave will suggest a small set of colours which complement it. You can choose from several types of colour scheme; for example, selecting ‘Monochrome’ results in a scheme of different shades of the same colour, whereas ‘Complements’ just gives two colours which complement each other. If the scheme Agave suggests isn’t ideal, you can increase and decrease both the brightness and saturation of the scheme as a whole using the buttons on the toolbar.

Agave colour scheme generator

You can select any colour on the screen as a base colour by using the ‘dropper’ tool (hidden away in the colour picker dialog). Three different representations of the colours in your colour scheme are given: Hex, RGB, and HSV, and copying the colours into a graphics application is simply a matter of dragging-and-dropping them. If you design websites and edit CSS, Agave may come in useful - particularly when your imagination fails you. The random button generates a random colour scheme, and repeatedly pressing it soon results in a usable combination of colours for you to use.

A small irritation is the limited number of colours allowed per colour scheme. While 2-3 colours may be fine when decorating a room, websites and graphics projects often require several more. Apart from this, Agave appears to have no major bugs, and most of the issues filed in its bug tracker are feature requests. There are several translations available, too. KColorEdit (the KDE equivalent) can handle colour palettes, which makes it more useful to graphics designers at the moment. However, Agave is still a young project and offers some novel features which anyone working with colour will appreciate.

Agave is available in Ubuntu Edgy (universe) and Debian Etch.


apt-file: search for files in packages, installed or not


Entry submitted by Paul Sundvall. DPOTD needs your help, please contribute !

Have you ever tried to compile some tar-ball and had to download missing dependencies? In that case, you probably needed to find out which packages were needed to fix those dependencies. Sometimes there is a README which states what you need, but that might not be that helpful sometimes.

One way of finding out which package needs to be installed is to use the debian package search page.

Another way is to use apt-file instead. It works as a local search engine, based on the apt sources you have in /etc/apt/sources.list.

To use apt-file, build the search database by issuing apt-file update as root. Then, as an ordinary user, search for a file with apt-file search file and you get the package names which contain the file you look for. Install them with apt-get, and your missing dependencies are gone with the wind!

apt-file is located in package apt-file in both Debian and Ubuntu.

after install, build the search database with apt-file update.


I tried to compile a simple pam example, which gave the following output:

pauls@voltaire:~/code/eget/all/pam$ make
gcc  pamexample.c  -o pamexample -lpam -lpam_misc
pamexample.c:12:31: error: security/pam_appl.h: Filen eller katalogen
finns inte
pamexample.c:13:31: error: security/pam_misc.h: Filen eller katalogen
finns inte

Seems like I need the (for me) unknown file pam_appl.h. Time to use apt-file!

pauls@voltaire:~/code/eget/all/pam$ apt-file search pam_appl.h
libpam-doc: usr/share/doc/libpam-doc/html/pam_appl.html
libpam0g-dev: usr/include/security/pam_appl.h
lsb-build-base2: usr/include/lsb2/security/pam_appl.h
lsb-build-base3: usr/include/lsb3/security/pam_appl.h

It seems like I should install libpam0g-dev

pauls@voltaire:~/code/eget/all/pam$ su -
voltaire:~# apt-get install libpam0g-dev
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 118kB of archives.
After unpacking 365kB of additional disk space will be used.
Get: 1 unstable/main libpam0g-dev 0.79-4 [118kB]
Fetched 118kB in 2s (47.9kB/s)
Selecting previously deselected package libpam0g-dev.
(Reading database ... 123647 files and directories currently installed.)
Unpacking libpam0g-dev (from .../libpam0g-dev_0.79-4_i386.deb) ...
Setting up libpam0g-dev (0.79-4) ...

let’s try to compile again:

pauls@voltaire:~/code/eget/all/pam$ make
gcc  pamexample.c  -o pamexample -lpam -lpam_misc

It works!

pypar2: a par2 graphical frontend


Entry submitted by François Ingelrest. DPOTD needs your help, please contribute !

Do you often download some binary content from Usenet servers? Then you know what .par2 files are useful for, and that there is no decent GUI to handle them.

For those who don’t know par2, let’s make it simple: it’s an utility used to protect files against data loss. It’s able to do that by creating redundant data (“parity files”). For example, if you create parity files with a redundancy level of 5%, you may be able to recover your original files if the amount of corrupted data is less than 5% (corrupted data may be located anywhere in any files). Such parity files may be used whenever data loss is expected: Usenet servers, cheap CD/DVD ROMs…

To check/repair some files, or to create these parity files, you have to open a terminal and use the command line. This works flawlessly but this not really user friendly, especially for distributions aimed at human beings. There exists a replacement named gpar2, but it uses some extra libraries and I’m sure that many of you don’t like to install extra libraries when it’s not really needed.

PyPar2 is a simple graphical frontend, written in Python: thus even if a package is not available for you system, you don’t have to compile anything. Here is how it looks like:

PyPar2 is designed to be very easy to use. Here are a list of its features:

PyPar2 is available in Debian unstable/testing and Ubuntu Feisty repositories. The “final” 1.0 release is coming soon, with many code changes, so stay tuned! If you would like to add support for a new language, please contact me first at Athropos - AT - gmail - DOT - com to be sure to use the latest language definition.


rlwrap: use readline’s line editing with all applications


Entry submitted by arno. DPOTD needs your help, please contribute !

Many command-line-oriented applications don’t provide features like history, completion or line-editing. rlwrap wraps readline (which is the library behind those features in bash and many other applications) around any line-oriented command. So you can take advantage of history, completion and editing facilities, even with applications that don’t provide them. rlwrap is the kind of tool that, once discovered, makes you wonder how you could have lived without it.

For example, telnet or netcat don’t have editing facilities, neither history. With rlwrap, system administrators will then be able to use those tools more efficiently. Also, launching dash can sometimes help testing compatibility for a few lines of shell code. Unfortunately, line editing with dash is not very pleasant. With rlwrap, it becomes possible to have completion and history in dash.

By default, history is saved in a specific file for each program: your history will be kept even after exiting the program, and will not conflict with other apps.

Just as readline, you can customize rlwrap with ~/.inputrc file. You can also define, for each application, a list of keywords. rlwrap will then perform completion on those words.

With socat, you can also wrap readline around any program. Socat is much more than a readline wrapper: using it only for that purpose would be not only overkill, but also more complex. Another readline wrapper is cle (Command Line Editor). It’s a great tool, but it has not been developed since 1999. Rlwrap is now more powerful, providing more options, with more configuration capabilities.

Target Usages:

Users of applications such as netcat, telnet, dc, that don’t link with readline, and whose editing possibilities are limited.


If your shell supports it, you may find useful to define aliases for commands you often use ; for example: alias netcat="rlwrap netcat".

You can find rlwrap’s homepage at

rlwrap is available in Debian (0.21-1 in sarge, 0.28-2 in unstable) and Ubuntu (0.24-1 in dapper and edgy).

mozart: The Mozart Programming System


Entry submitted by Kari Pahula. DPOTD needs your help, please contribute !

Mozart is an implementation of Oz, a multiparadigm programming language, with a strong support for concurrent and distributed computing and for solving problems involving optimization and inference.

Some of Oz’s distinctive features are single assignment variables and binding. For example, you can do declare A B C and then execute C = A and [A 2] = [1 B] ([] marks a list in Oz) and have A = 1, B = 2 and C = 1 in the end.

Being single assignment variable means that executing A = B would be a runtime error. If needed, you could create new computation spaces where you could safely create condtradictions and examine the failures from outside.

Another one of Oz’s features is transparent support for concurrency. You can try out the next example yourself if you have no aversion towards using Emacs by installing mozart for yourself and feeding it line by line to the emulator. Start the X Mozart programming environment from the menu and go through it line by line and press C-. C-l as you go.

What you type

What you see

declare H W
{Inspect rect(width:W height:H area:thread W*H end)} rect(area:_ height:_ width:_)
H = 20 rect(area:_ height:20 width:_)
W = 45 rect(area:900 height:20 width:45)

What happens in this example is that the thread started for counting the area suspends until both W and H are bound to a value. Once both are known, the thread continues execution and sets the corresponding field in the rect record.

Any of the above didn’t involve state at all. With Mozart, you can get by quite far within the declarative model itself. But when needed, there are two (equivalent) abstractions available for stateful operations. One is chunks, which operate much like regular variables with destructive updates. The other is ports, which are many-to-one communication channels. If you’re familiar with Erlang, you’d recognize them to be similar to the message passing used in it.

As an example, let’s write an echo server.

declare Echo
   Xs P
   { Xs P}
   proc {Consume Xs}
      X|Xr = Xs  % suspends until a new list item arrives to Xs
      {Inspect X}
      {Consume Xr}
   thread {Consume Xs} end
   proc {Echo M}
      {Port.send P M}

This is only a small scratch on the surface of what Oz and Mozart can do. Even if you’re not going to start writing programs using Mozart yourself, the concepts behind it are well worth knowing for any self-respecting programmer.


Mozart is available for most 32-bit architectures in Debian Woody, Sarge and Etch. The changes between 1.3.1 and 1.3.2 are relatively minor, so you won’t be missing much if you’re using the version in Sarge. It is also available in Ubuntu since Warty.

gems: broadcast your terminal


Entry submitted by Martín Ferrari. DPOTD needs your help, please contribute !

Gems is an unknown, little, but efficient program which enables you to broadcast what is seen in your terminal to any number of clients. It’s great for technical lectures and talks, where people often has to make an effort to see what are you typing in the projected screen. It is terminal-agnostic, communicates by any TCP port using very little bandwith and no CPU power, and obviously, it’s free software!

It is very easy to set up, there is no configuration at all, apt-get it and you’re ready to go. In the master terminal, launch the server, optionally specifying a listening port and maximum number of connections (defaults to 6666 and 25, respectively, see the man page for more information), and immediatly you will be given back a shell:

teacherhost:~$ gems-server -port 9999
gems-server initialized.
gems-server: warning: terminal size is greater than 80x25.
teacherhost:~$ cd tmp
teacherhost:~/tmp$ PS1='Hello world class:w$ '
Hello world class:~/tmp$
Hello world class:~/tmp$ ls
Hello world class:~/tmp$

Gems warns you if you are using a big terminal, because clients won’t be able to connect if they have smaller terminals. To connect to a server, just specify address and port:

pupil1:~$ gems-client teacherhost 9999
gems-client: Connection established -- Press 'q' to exit.

Hello world class:~/tmp$ ls
Hello world class:~/tmp$

When a client connects, he sees only what you type after the connection is made, no screen status is maintained. This is key to its simplicity and compatibility with any type of terminal, but you will have to force screen refreshes as new clients connect (usually just pressing ^L). In this example the client connected just before the ls command was issued.


This is a screenshot of a gems session with clients in the same computer, the focused terminal is the server. You can have different terminal sizes for clients and server as long as the server terminal can fit in the clients.


gems is included in Debian and Ubuntu since respectively Sarge and Hoary.

rlplot: high-quality scientific graphs made easy


Entry submitted by Phil Bull. DPOTD needs your help, please contribute !

If you're looking for an easy way to create and edit professional-quality scientific graphs, why not take a look at RLPlot?

When you run RLPlot, you are shown a spreadsheet screen into which you can enter or copy data. RLPlot's spreadsheet is suprisingly fully-featured for a simple graph-plotting package, and many built-in formulae are available. Once you are happy with the way your data is arranged, simply press Graph -> Create Graph to produce your graph.

Choosing a graph type in RLPlot

There are many different graph types for you to choose from (see screenshot), and RLPlot offers an impressive array of options for customising error bars, axes, labels and data-points. When you have finished, RLPlot shows an editable WYSIWYG view of your graph. In this view you can continue to customise your graph and add additional elements such as annotations, a legend, or even another data plot.

Once you've perfected your graph, it's time to output a copy of it. RLPlot offers a good choice of output options, including the SVG format (ideal if you want to do any further editing in another application). It can also print the finished graph directly.

Editing a graph in RLPlot

While not as powerful as gnuplot, RLPlot offers a quick and simple alternative for creating good-looking graphs of scientific data. It appears to be actively maintained, and there are no major bugs currently known for the current version. RLPlot is available from Debian Stable (a more recent version is available in Testing) and Ubuntu (since Hoary).

sysrqd: small daemon to manage Linux SysRq over network


Entry submitted by Julien Danjou. DPOTD needs your help, please contribute !

sysrqd is a tiny daemon aiming to control sysrq over network.

SysRq stands for System Request, and this are functions mapped to keyboard shortcuts by the kernel. You can use them by pressing Alt+SysRq+[key] (SysRq might be named “Print Screen” on your keyboard), where key can be s (sync), k (sak), 0 to 9 (logging level), b (reboot), etc.
The goal of this keyboard sequences is too be available even if you can’t do anything on your box, because you screwed up everything, or because it’s crashed or under very heavy load.

sysrqd can help you to use SysRq keys when you are not in front of your box,and you need to do Emergency Sync, R/O remount and reBoot.

It is designed to respond under heavy load or half-crashed box, so it might work even if you can’t access to your box for example. In this case, you will be happy to telnet to your box on sysrqd port, enter your password, and then press s, u, b and wait for your server to reboot. You would not have been able to do that since ssh was not responding.

The connection is password protected but not cyphered so you might want to firewall it or to run it on a trusted network.

You can find latest version 8 packaged in both Debian and Ubuntu.

websec: monitor websites for changes


Entry submitted by Lucas Nussbaum. DPOTD needs your help, please contribute !

A lot of websites don’t provide RSS feeds yet. When you want to monitor changes to such sites, you can only visit it from time to time, or use public services such as FEED43 or RSSPECT. Websec (Web Secretary) automates the process of regularly visiting the website: it typically runs in a cron job, and compares the content of a web page with what it fetched during the previous run. If the content has changed, it will email it to you with the changed content highlighted.

It works quite well, but has some limitations:

I couldn’t find a package doing the same as websec, but generating an RSS feed instead instead of emailing the changes. If someone want to write one, it might be possible to re-use some of websec’s code.

You can find websec’s homepage at

Websec has been available in Debian and Ubuntu for several stable releases, and doesn’t suffer from any really annoying bug.

scli: a collection of SNMP command line management tools


Entry submitted by Kurt Pfeifle. DPOTD needs your help, please contribute !

Some common daily problems for IT people….

Use scli.

scli is the command to invoke the “SNMP Command Line Interface”. A little known console utility, it is of great use to me on many occasions.

Executive summary:

scli connects to any SNMP-enabled network node and lets you interactively “browse” through the values stored in the device’s SNMP database (”MIB”, Management Information Base). My own personal usage is mainly for network printers (yeah, that’s why I picked these examples), but scli can work with many more device types: bridges, routers, gateways, switches, computers and more. (And it also has a scriptable, non-interactive mode).

Target users:


Glorious details for the curious:

scli does not only give you a more user friendly way than snmpwalk to run SNMP queries, it also formats the results it returns in a more user friendly way. You can run scli interactively (which gives you its own shell+prompt to run different commands) or in a way that just executes one command, displays the result and returns to your standard shell (this mode is also good for scripting stuff).

By default, scli returns plain ASCII text messages. But you can also tell it to return XML by using the “–xml” parameter. (XML may be useful if you want the return to be processed by software, instead of being read by a human).

Assuming the network node you are interested in poking at has the IP address Start the tool by typing


SNMP-enabled devices by default use “public” as their “community name”, and if scli does not see a community name on the commandline, it tries to use “public”.

You wonder what that community name” thingie means? It is a very weak way of authorization; in essence, a password common to all users, but no separate user names. SNMP in version 1 will not even encrypt the community name on the wire! Yes, that’s very bad security for most devices, but that’s how the real life SNMP world around us currently is. (SNMP v2 and v4 are better, but not yet as common in devices used out there).

If you have a less open node, and you happen to know the used “community name”, use it as an additional argument:

  scli "community-name"

If it succeeds connecting, scli will present you its prompt:

  scli > 

It is in interactive mode now. Type “help” to see the available commands. Type “show system info” to find out who the vendor of the device was, and what the model name is. I’m sure you will find more interesting queries of your own quickly.

scli has a good commandline auto-completion (using the [TAB] key) built in. Type “show system [TAB] [TAB]” to get a list of subcommands other than the “info” we used. You’ll see possible completions “devices info mounts processes storage”. That means “show system storage” is another valid scli full command. Try it.

Of course, you can even try “show system” on its own [without any of the available sub commands]. That makes scli execute all of these subcommands and return all results at once (but piped through a pager).

The same is true for “show [TAB] [TAB]” or “show” all on its own. Run it and see all SNMP info about of device you are currently accessing.

A few tips will help you get up to speed with scli:

  1. Your most important command to remember with scli is “show scli command [TAB] [TAB]”.
  2. Your most frequently used initial command with scli will probably be “show scli command tree”.
  3. scli ships with a very good man page; make sure to look at it at least one time.
  4. scli can return its qurey results XML-formated, if called with the “–xml” parameter.

scli is available in Debian (stable, testing and unstable all have 0.2.12-2, while experimental has 0.3.0-0.1). If you happen to use 0.3.0, don’t miss to try a scan for SNMP enabled devices in your neighbourhood. At the interactive scli command prompt (scli >), type “run scli scan <a-network-IP-address-in-your-reach>”. Or run scli in command mode from the shell, and type: “scli -c ‘run scli scan <a-network-IP-address-in-your-reach>’” (that network address may be something like or This scan command is one of the new ones in 0.3; it will present you a list of all SNMP-enabled nodes that respond to the (unsafe) community name “public” (which we didn’t explicitely need to type here). You may want to fix that hole…

scli was created by Prof. Juergen Schoenwaelder, who also is one of the people who created the SNMP standard and wrote the RFCs describing it.

P.S.: Oh, you *really* wanted to know the answers to these initial questions? Ok, here we go:

Is my new Laserjet PostScript-enabled?
kurt:~> scli -c "show printer interpreters" | grep Description
Description:   Lexmark PCL
Description:   Lexmark PostScript
Description:   Lexmark XL
Description:   Lexmark PJL
Description:   Lexmark Automatic Language Switching
Description:   Lexmark NPAP

So, whatever “NPAP” is — PostScript is supported as well. It will be easy to print to it from CUPS…

What’s on the LCD display on that remote printer right now?
kurt:~> scli -c "show printer display"
      1    1   No Paper: Tray 4

Uuhh, and you wondered why that thing didn’t give any noise since 2 hours…

Why doesn’t that red light stop flashing on that printer?
kurt:~> scli -c "show printer covers"
Printer:      1
Cover:        1
Description:  Rear Door
Status:       coverOpen

Printer:      1
Cover:        2
Description:  Top Door
Status:       coverClosed

So, that’s easy. Tell your user: “Please shut that darn Rear Door again and the flashing red light will go away.”

unison: decentralized synchronization of files


Entry submitted by Gael Varoquaux. DPOTD needs your help. If you want it to continue in 2007, please contribute !

Unison allows to synchronize files between two or more computers. Unison does not require a dedicated server, or root privilege, it is able to run using ssh, or a direct socket connection. Transfers are optimised using a version of the rsync protocol.

Unison works by taking a footprint of the replicas at each synchronization, and using this footprint to find out which files changed between two synchronizations. Unison has no central repository, and you can synchronize replicas between an arbitrary number of computers, or even use an external storage as an intermediate replica to synchronize two computers with no network connection. It will detect conflicts between updates and signal them. Unison also garanties that a network or power failure will not lead to loss of data.

Links :

unison is available in Debian stable at version 2.9.1, testing and unstable both have 2.13.16. The latest Ubuntu release, 6.10/Edgy, the LTS release (6.06/Dapper) and the development version (Feisty) currently have version 2.13.16. The latest version upstream is currently 2.13.16 and the program is actively maintained, but no longer developed.

There also is a unison-gtk package, which brings a nice graphical front-end to unison:

Unison GTK

qalculate: the ultimate desktop calculator


Entry submitted by Diwaker Gupta. DPOTD needs your help, please contribute !

Qalculate’s tagline says “the ultimate desktop calculator”. Though this might sound a little obnoxious, Qalculate lives up to its claims.

So what is qalculate? First and foremost, its a calculator. Which means that it can do what you typically expect a calculator to do, no surprises there. Here’s a screenshot of the main window.

There’s a convenient history window as well, and a handy keypad if you should need it.

But one rarely needs to use the keypad because another great thing about qalculate is the input mechanism – it is extremely smart, context sensitive and natural language oriented. So converting 50 kgs to lbs is as simple as typing “50 kgs to lbs”! And if you don’t know how to represent a unit (pounds or lbs), not to worry, qalculate will provide completion options as you go along:

And then qalculate can be used to do a lot of other things: simplify algebraic expressions, solve equations, a plethora of banking related functions (compute accrued interest etc), unit conversion, some basic plotting (via Gnuplot) and a lot of geometry related functions. Note that the Qalculate user interface has been implemented both in Qt and GTK, and so it will fit right into your desktop whether you are using KDE or GNOME.

Check out the full feature list, and also take a look at some of the screenshots.

qalculate is available in Debian sarge (v. 0.7.2). Version 0.9.x is also available in Debian testing/unstable, and Ubuntu since Dapper. And there are no open open bugs!

htop: powerful top replacement


Entry submitted by Kristoffer Lundén. DPOTD needs your help. If you want it to continue in 2007, please contribute !

htop is a very competent interactive process viewer for the shell, providing all the functionality - and more - that the top utility does, in an easier and more intuitive way. htop provides easy-to-use menus for most operations and also has support for using a mouse.

In short, htop is an easier to use and friendlier version of top. While it hasn’t as much time behind it and therefore is less tested, it seems to work very well both locally and over SSH, and it’s well worth taking it for a spin. It’s just one of those small utilities that makes life a bit easier.

Target usages:


htop is available in Debian stable at version 0.5.1-1, testing and unstable both has 0.6.3-1. Latest Ubuntu release, 6.10/Edgy has 0.6.2-1, while the LTS release (6.06/Dapper) has 0.6-1. The development version (Feisty) currently has version 0.6.3-1. The latest version upstream is currently 0.6.5 and the program is actively maintained.

htop was created by Hisham Muhammad, who is also one of the developers for Gobolinux. Other contributors to the program are listed on the homepage.

python-scipy: get the math done


Entry submitted by Gaël Varoquaux. DPOTD needs your help, please contribute !

If you have numerical data to process, if you want to code some complex mathematical operations, or if you want to output some figures on nice graphs, scipy could be for you.

This package adds a module to the python language that allows it to do scientific data processing.

Using it, and a few friends (ipython, python-matplotlib) you have a numeric capable high-level language that allows both to replace matlab for interactive data processing, to run extensive computations, and even to build powerful GUIs for experiment control.

In the late 70s optimized fortran routines where wrapped in a high level language, MATLAB. The resulting specialized language, and its competitors, had an enormous success among engineers, as it allowed them to focus on their mathematical problem, without worrying about computing problems, such as variable types.

However these languages are very rich in math operations, but very poor in other fields. The scipy python modules adds rich numerical types and mathematical operations to an already very rich and conveniant language: python. This profits both the engineer using scipy, as he can benefit from python’s extensive librairy, and the python programmer, who can pick optimized numerical functions in scipy’s toolbox for his general purpose program.

The scipy community is very active and scipy is gaining momentum. It is a great tool to teach computing to physics and engineering studing. The goal of the project is to make coding math as simple as possible.

python-scipy is available in Debian (0.3.2 in sarge, 0.5.1 in testing/unstable) and Ubuntu (0.3.2 in dapper, 0.5.1 in edgy).

scribus-ng: next generation of the desktop publishing program


Entry submitted by Oleksandr Moskalenko.

scribus-ng is the successor to the scribus package, representing the current development tree of Scribus, the open source Desktop Publishing program.

Scribus is a cross-platform open source page layout program with the aim of producing commercial grade output in PDF and Postscript. Originally developed on Linux, Scribus also runs natively on MacOSX and Windows 2000 and XP. While the goals of the program are to make professional page layout accessible for beginners, it also has many professional publishing features, such as: spot color support, CMYK color, high grade PDF creation, Encapsulated Postscript import/export and creation of color separations. There is a great article on Desktop Publishing (DTP) versus Word Processing on

Target usages:


There are no free software programs with Scribus’s capabilities. Proprietary world is represented by Quark Xpress and Adobe Indesign. Scribus holds its ground well against these programs and has been used to produce books, journals, newspapers and other publications (see Made_with_Scribus and Success_stories). There’s also a Jerusalem Post article that states flat out that you can do everything with Scribus that can be done with Adobe ID and QXP.

scribus-ng is available in Debian testing and unstable. Sarge has the older stable branch of Scribus (package scribus, version 1.2.1), which is also present in Debian testing and unstable (also named scribus, version 1.2.5). Ubuntu has scribus-ng in Feisty, in Edgy, in Dapper and scribus 1.2.5 in Feisty, in Edgy and Dapper.

scribus and scribus-ng packages are maintained by Oleksandr Moskalenko. There are very few bugs (total of six for both packages, most are wishlist) and the Scribus development is tracked very closely. Upstream repositories for Debian stable/testing/unstable and Ubuntu breezy/dapper/edgy for scribus and scribus-ng packages are also maintained for the convenience of users. So, it is possible to transparently obtain the latest and greatest scribus-ng for Debian/Sarge for instance.

DPOTD needs your help, please contribute ! (We don’t have another post ready currently)

Hello, world!


I’ve decided to try to resurrect Debian Package a Day. It was originally created by Andrew Sweger, then David Moreno Garza gave it another try, but both blogs stopped after some time. Another blog is still active, but autogenerates its entries using the packages’ descriptions, so it’s less interesting.

So here is a third attempt. To prevent this blog from following its ancestors, here is what changes:

Everything is not totally read yet:

  1. We have to wait until DNS propagates our new name (if you can read this, it’s probably OK now).
  2. We have to get on Planet Debian and Planet Ubuntu.
  3. Someone has to submit an entry we can publish, or we could write one. But it would be so much better to start the collaborative way :-)

Update (08/12/06) : Debian Package of the Day won’t be added on Planet Debian: a recent discussion concluded that non-personal blogs should not be on Planet Debian. So you have to subscribe directly to its feed (if you read Planet Ubuntu, you probably don’t need to, since it was added there).