Review: Linux IM Software

I’ve been looking at instant messaging and chat software lately. Briefly stated, I connect to Jabber and IRC networks from at least three different computers. I don’t like having to sign in and out on different machines. One of the nice features about Jabber (XMPP) is that I can have clients signing in from all over the place and it will automatically route messages to the active one. If the clients are smart enough, that is.


I have been using Gajim as my primary chat client for some time now. It has a good feature set, but has had a history of being a bit buggy for me. It used to have issues when starting up: sometimes it would try to fire up two copies of itself. It still has a bug when being fired up from a terminal: if you run gajim & exit, it will simply die. You have to wait a few seconds to close the terminal you launched it from. It has also had issues with failing to reconnect properly after a dropped network connection and generating spurious “resource already in use” errors. Upgrades sometimes fix bugs, and sometimes introduce them.

The latest one I’ve been dealing with is its auto-idle support. Sometimes it will fail to recognize that I am back at the machine. Even weirder, sometimes it will set one of my accounts to available status, but not the other.

So much for my complaints about Gajim; it also has some good sides. It has excellent multi-account support. You can have it present your multiple accounts as separate sections in the roster, or you can have them merged. Then, say, all your contacts in a group called Friends will be listed together, regardless of which account you use to contact them.

The Jabber protocol (XMPP) permits you to connect from multiple clients. Each client specifies a numeric priority for its connection. When someone sends you a message, it will be sent to the connection with the highest priority. The obvious feature, then, is to lower your priority when you are away (or auto-away due to being idle), so that you always get IMs at the device you are actively using. Gajim supports this via letting you specify timeouts that get you into different away states, and using the advanced configuration editor, you can also set the priority that each state goes to. So, if Gajim actually recognized your idleness correctly, this would be great.

I do also have AIM and MSN accounts which I use rarely. I run Jabber gateways to each of these on my server, so there is no need for me to use a multiprotocol client. That also is nice because then I can use a simple Jabber client on my phone, laptop, whatever and see all my contacts.

Gajim does not support voice or video calls.

Due to an apparent bug in Facebook, the latest Gajim release won’t connect to Facebook servers, but there is a patch that claims to fix it.


Psi is another single-protocol Jabber client, and like Gajim, it runs on Linux, Windows, and MacOS. Psi has a nicer GUI than Gajim, and is more stable. It is not quite as featureful, and one huge omission is that it doesn’t support dropping priority on auto-away (though it, weirdly, does support a dropped priority when you manually set yourself away).

Psi doesn’t support account merging, so it always shows my contacts from one account separately from those from another. I like having the option in Gajim.

There is a fork of Psi known variously as psi-dev or psi-plus or Psi+. It adds that missing priority feature and some others. Unfortunately, I’ve had it crash on me several times. Not only that, but the documentation, wiki, bug tracker, everything is available only in Russian. That is not very helpful to me, unfortunately. Psi+ still doesn’t support account merging.

Both branches of Psi support media calling.


Kopete is a KDE multiprotocol instant messenger client. I gave it only about 10 minutes of time because it is far from meeting my needs. It doesn’t support adjustable priorities that I can tell. It also doesn’t support XMPP service discovery, which is used to do things like establish links to other chat networks using a Jabber gateway. It also has no way to access ejabberd’s “send message to all online users” feature (which can be accessed via service discovery), which I need in emergencies at work. It does offer multimedia calls, but that’s about it.

Update: A comment pointed out that Kopete can do service discovery, though it is in a very non-obvious place. However, it still can’t adjust priority when auto-away, so I still can’t use it.


Pidgin is a multiprotocol chat client. I have been avoiding it for years, with the legitimate fear that it was “jack of all trades, master of none.” Last I looked at it, it had the same limitations that Kopete does.

But these days, it is more capable. It supports all those XMPP features. It supports priority dropping by default, and with a plugin, you can even configure all the priority levels just like with Gajim. It also has decent, though not excellent, IRC protocol support.

Pidgin supports account merging — and in fact, it doesn’t support any other mode. You can, for instance, tell it that a given person on IRC is the same as a given Jabber ID. That works, but it’s annoying because you have to manually do it on every machine you’re running Pidgin on. Worse, they used to support a view without merged accounts, but don’t anymore, and they think that’s a feature.

Pidgin does still miss some nifty features that Gajim and Psi both have. Both of those clients will not only tell you that someone is away, but if you hover over their name, tell you how long someone has been away. (Gajim says “away since”, while Pidgin shows “last status at”. Same data either way.) Pidgin has the data to show this, but doesn’t. You can manually find it in the system log if you like, but unhelpfully, it’s not on the log for an individual person.

Also, the Jabber protocol supports notifications while in a chat: “The contact is typing”, paying attention to a conversation, or closed the chat window. Psi and Gajim have configurable support for these; you can send whatever notifications your privacy preferences say. Pidgin, alas, removed that option, and again they see this as a feature.

Pidgin, as a result, makes me rather nervous. They keep removing useful features. What will they remove next?

It is difficult to change colors in Pidgin. It follows the Gtk theme, and there is a special plugin that will override some, but not all, Gtk options.


Empathy supports neither priority dropping when away nor service discovery, so it’s not usable for me. Its feature set appears sparse in general, although it has a unique desktop sharing option.

Update: this section added in response to a comment.


I also use IRC, and have been using Xchat for that for quite some time now. I tried IRC in Pidgin. It has OK IRC support, but not great. It can automatically identify to nickserv, but it is under-documented and doesn’t support multiple IRC servers for a given network.

I’ve started using xchat with the bip IRC proxy, which makes connecting from multiple machines easier.

15 thoughts on “Review: Linux IM Software

  1. Kopete has in fact all the features you think are missing from it. When you right click on the icon for the Jabber account in the lower area of the window, there is a menu item “Services…” which is used to discover services on Jabber servers. You can set the priority in the properties of a Jabber account.

      1. I believe that empathy has an away feature, which is triggered by the screen saver, but I haven’t checked lately.

        If I leave my empathy running at work, then then incoming messages are send to my empathy client at home. It works very well.

        1. Empathy supports “Contact is typing”, but I am not sure how many protocols they it works for. I think that they add a time stamp in the chat window when the other person closes his chat window.

          They don’t support contact merging / metacontacts, and they don’t support “Away since”, but I personally don’t have many multiprotocol friend, so that has not a problem for me.

          My only problem with empathy is that their IRC user interface is optimized for a different usage pattern than mine, so I tend to use gnome-xchat for IRC, when I really want to chat, and troll on many channels simultaneously.

  2. Current pidgin still seems to have a typing indicator, and if you enable the psychic mode plugin it will provide the typing indicator for people who haven’t yet sent the first message.

    1. That is correct. But the typing indicator is the *only* one it will send; it won’t sent the GONE (window closed) notification, for instance. It can receive and display them from the other end, but not send them from its end.

  3. I’m a big fan of bitlebee (
    None of the multi-client chat programs I tried could handle IRC well, so I instead went with screen + weechat/irssi and bitlbee as a gateway to AIM/jabber. I’ve heard of people doing an xchat/irssi-proxy/bitlbee setup as well.
    It’s very convenient if you only need basic IM features, but otherwise not suitable since it doesn’t support video/audio/etc.

    1. bitlbee is indeed very interesting. I looked at it, but concluded that its interface wasn’t going to be quite what I was after, especially since IRC clients aren’t really set up to pop up notifications on certain events.

  4. For me, IRC and XMPP are also the needed protocols, but with a bit more emphasis on IRC. My solution is to use irssi (running in a screen session on a server) and bitlbee (also running on the same server). While bitlbee doesn’t provide any advanced XMPP features, I don’t need to run multiple instances as I just connect to the same screen session from everywhere.

  5. I’ve actually tried moving my IM systems to my Maemo phone on the theory that it better maps my availability than an idle pidgin client on my desktop at home. It solves your multi-signin problem but perhaps a bit brutishly.

    The plus side: it’s a very slick interface. Seamlessly integrates SMS as well. The Telepathy UI is mostly divorced from the protocol, so adding new protocols appears to be fairly simple and popular. The contacts book supports merging various account data, including phone number.

    Downside: most chat protocols don’t support decent whitelisting or spam filtering. This is nearly a deal breaker.

    One thing I haven’t checked or thought about is busy status; the phone has access to busy/free calendars, so it might automatically set these based on your schedule.

Leave a Reply

Your email address will not be published. Required fields are marked *