Use Google Hangouts via Bitlbee / IRC

As someone who hates Google Hangouts with a passion it took me surprisingly long to look into a way to use it via an IRC bridge to get rid of the annoying Chrome app. Today I finally had some spare time to look into it and found some promising projects that enabled me to do exactly what I wanted: Getting rid of the shitty desktop client and use Hangouts directly through IRC.

I'm already using Twitter and AIM through Bitlbee so checking if there's support for Hangouts was the first thing I did. Bitlbee is an amazing piece of software enabling you to use a lot of different chat services through a unified IRC interface. Unfortunately Hangouts is a propritary protocol now and you can't just use Jabber like it was the case with GTalk back in the days. There's a new library now that reverse engineered the protocol and enables developers to still build on the protocol: hangups. There's a whole list of other projects using that library now.

One of the project that got inspired by hangups is purple-hangouts which is an additional plugin for the already existing libpurple library. libpurple is the IM library behind Pidgin.

Install purple-hangouts

The overlay we need to install purple-hangouts is already in the official overlays so we can just run layman -L | grep mrueg to see if it's still there and then add the repository to our overlays with layman -a mrueg. Then just run eix-sync to update your eix index and install it with emerge -av purple-hangouts.

Enable libpurple support in Bitlbee

To use the
purple-hangouts is just some additional plugins for the already existing libpurple library so we have to make sure bitlbee is already compiled with these enabled. To do that just set the use flags of the bitlbee package to include purple and then emerge the package again.

root@notmyhostname /etc/portage$ cat package.use | grep bitlbee  
net-im/bitlbee otr twitter purple  

Configure Bitlbee

After restarting Bitlbee (/etc/init.d/bitlbee restart) you should be able to connect to your server again. Type help purple in your &bitlbee channel and you should see hangouts in the list of available services.

[14:21:25]  dewey    help purple
[14:21:30]  root    BitlBee libpurple module supports the following IM protocols:
[14:21:30]  root     
[14:21:30]  root    * aim (AIM)
[14:21:30]  root    * hangouts (Hangouts)
...

To add the account to your bitlbee configuration just run add hangouts example@gmail.com with your Google Account email. To set the password you'll have to use the /OPER command which should look like that:

/OPER hangouts <your google password>
[14:23:15]  dewey    account add hangouts example@gmail.com
[14:23:15]  root    Account successfully added with tag hangouts
[14:23:15]  root    You can now use the /OPER command to enter the password
[14:24:00]  dewey    account list
[14:24:00]  root     0 (twitter): twitter, tehwey (connected)
[14:24:00]  root     2 (hangouts): hangouts, example@gmail.com
[14:24:00]  root    End of account list
[14:24:43]  dewey    account on hangouts

Once that is done we are ready to just turn it on which is done by running account hangouts on which will in turn trigger the authentication process with Google. This will open a new IRC query that prompts you to click an URL and paste an oAuth token. This URL is currently broken so to finalize the login process we'll have to get an oAuth token from Google through another way.

Google is trying to prevent this so there are some additional hoops we have to jump through. A workaround is currently being discussed on the issue tracker.

Just follow the instructions in this comment and grab the oAuth token, then just paste it in the IRC query that prompted you for the token and hit return. Now we are ready to finally login with accounts hangouts on:

[14:34:29]  dewey    account hangouts on
[14:34:35]  root    hangouts - Logging in: Authenticating
[14:34:35]  root    hangouts - Logging in: Logged in

Done, that was easy!

Show real names instead of IDs

If you prefer not to memorize long IDs I'd recommend to enable full names for the hangouts plugin. This will just show the real name people set on their Hangouts profile instead. To do that just run the following commands:

account hangouts set nick_format %full_name  
accounts hangouts off  
accounts hangouts on  

That's it!