Want to get rid of the evil caps lock key without mutilating your keyboard? Want to give those silly Windows keys useful jobs, or put all those extra multi-media keys to work? Want to become a powerhouse keyboarding commando? Then come along and join the fun, because Linux has all kinds of good tools for taming wayward keyboards and increasing your efficiency. In this two-part series we're going to use xmodmap, XBindKeys, and KeyTouch to create custom keybindings for launching applications and running commands.
Exorcising Caps Lock
The placement of the caps lock key is a demonstration of malicious cunning. It's above the shift key and it's usually oversized, so it's way too easy to hit it when you don't want to, which for me is all the time. On a case-sensitive operating system it's not all that useful anyway. Unhappy users often resort to remedies like prying it off entirely or covering it with duct tape. You can do this if you're careful, but elite geeks resort to more sophisticated measures that do not mangle their nice keyboards. It's not the fault of the keyboards that manufacturers have giant Windows-sized blind spots, and as always, Linux makes lemonade out of lemons and provides useful alternatives.
This command reverses whatever position the caps lock key is in, so first make sure it is not on:
$ xmodmap -e "remove lock = Caps_Lock"
What if you do this when caps lock is on? One remedy is get used to typing like a dork: "dEAR jUPITERMEDIA, i WANT MORE STORIES ABOUT hp, ibm, AND dELL." Or you could fix it. First run this command:
$ xmodmap -e "add lock = Caps_Lock"
Then make sure it is not on, and re-run the "remove lock" command.
This won't survive a reboot, so put it in your ~/.bashrc file to make it permanent.
XBindKeys For Launching Applications
KDE and GNOME, window managers like IceWM and Fluxbox, and many applications come with their own set of prefab keybindings. You should investigate these before going on a customization spree, or you run the risk of creating conflicts. We're going to learn how to use XBindKeys. XBindKeys is not dependent on any particular desktop or window manager, and should run on pretty much any Linux or Unix system."
The easy way is to install xbindkeys-config along with xbindkeys, which gives you a typically plain GTK-based graphical configuration tool, as Figure 1 shows.
xbindkeys-config comes with Debian and all of its descendants. If you want an RPM and can't find one, get the source tarball from the Debian repository.
Launching graphical applications with root privileges is easy when you know a few slick tricks. In this example I have configured the left Windows key to launch a root file manager, and the right Windows key to launch a root text editor. Before you do anything else you must create a default configuration file with this command:
$ xbindkeys --defaults > $HOME/.xbindkeysrc
xbindkeys won't work without this. Take a look at it to get an idea of how to manually configure it; you might even make a copy to study, because xbindkeys-config will overwrite it.
Next, follow these steps to create a new keybinding:
- Hit the "New" button in xbindkeys-config
- Press "Get Key"
- Press a key or key combination on your keyboard
- On the "Action" line, type in your command
- Press "Run Action" to test it
- If it works, hit Apply and do more keybindings, or hit Save&Apply&Exit. Your changes will not be saved until you press the Save&Apply&Exit button
Figuring Out Commands
The tricky bit with xbindkeys-config is knowing the correct application launching commands. The simplest command is the program's name with no options, like kate or gimp or firefox. (Shame on Linux distributions and desktop environments that obscure the real application names - users will not faint at the sight of useful information.) Anything that works on the command line will work in xbindkeys-config. For launching graphical applications with rootly powers, or as any other user, you need gksu or kdesu. Using one of these gives you a graphical login window, like Figure 2.
gksu is a graphical front-end to both su and sudo. Just to add to the fun and confusion, so is gksudo. Making it even more fun is Ubuntu makes gksu behave like gksudo. So let's talk about this first.