:: uControl :: | home | ucontrol | contacts | macosx | gbasdk | java | jfunc ::

uControl is no longer being maintained. Take a look at fKeys instead.

uControl is a keyboard remapper and more. Meaning, those useless keys can now be reused, remapped, or reduced. Unix hackers will be pleased to remap the caps lock key to the control key. Indeed, that was the reason uControl was originally created; however, it has since evolved into a fairly sophisticated means of not only remapping modifier keys, but providing a virtual scroll wheel for track pad users, providing real function keys for laptop users, swapping the right and left mouse button for left handed users, and even providing a one handed typing feature for those with disabilities. Note: the one handed typing feature has been removed due to possible patent infringement (details here).

uControl is now hosted on sourceforge.net and has a mailing list. Also, bugs can be queried and reported using bug tracker.


uControl version Mac OS X version binary source code

Please see the note on uControl's status for Tiger.

1.4.6 10.3.8 uControl1.4.6.dmg ucontrol1.4.6.tgz

Updated the installer to work with Mac OS 10.3.8. Many thanks to Aaron Botsis for providing a patch that worked for some. And special thanks to Ingo Paschke whose patch seems to be working for all.

Note: uControl version 1.4.6 is NOT compatible with any version prior to Mac OS 10.3.8.

1.4.5 10.3.1, 10.3.2, 10.3.3, 10.3.4, 10.3.5, 10.3.6, 10.3.7 uControl1.4.5.dmg ucontrol1.4.5.tgz

Updated the installer to work 10.3.6 and 10.3.7. No other enhancements.

Note: uControl version 1.4.5 is NOT compatible with Mac OS 10.2.x or Mac OS 10.3.8 and could cause a kernel panic if installed.

1.3.5 10.2.x uControl1.3.5.dmg uControl1.3.5.tgz
Alex Harper has completely rewritten the "Real Function Keys" feature. It works much, much better than before. In fact, it uses the same method OS 9 did. Mapping modifier keys to the fn key and vice versa has been removed. It was a feature that just never worked quite right. One can now remap modifier keys to nothing. That was requested to squelch the caps lock key by a lot of people.
1.3.0 10.2.x
Note: This version has been pulled due to an alleged patent violation regarding the Twerq feature. Another version should be available in a, hopefully, short amount of time.
Now featuring the ability to apply settings to a particular keyboard; Left Handed Mouse feature contributed by Paul Guyot; a number of bug fixes, and no reboots required to load the extension.
1.0.6 10.1.5 uControl1.0.6.pkg.zip uControl1.0.6.tgz
Added control panel and fixed kernel panic that happened with the new OS. Installation no longer requires a restart. (I finally figured out how to run a few installation scripts.) Releasing binary as a zip file now.
1.0.3 10.1.4, 10.1.3, 10.1.2, 10.1.1 uControl1.0.3.pkg.tgz uControl1.0.3.tgz
Changed name from iControl to uControl. Fixed kernel panic that resulted from upgrading from 10.0.x. Nicely packaged to allow for easy install. Unfortunately Apple still doesn't have the rest of the package system in place, namely uninstallation of packages.
1.0.1 10.0.x iControl.dmg.gz iControl.tgz
Initial release of iControl, really just a hacked up version of iJect. It has one feature: remapping caps lock to control.


Installation is simple. Open the uControl disk image (the .dmg file). If you are upgrading, open the "Uninstall uControl" to remove the previous version. Then open the uControl package (the .pkg file). After installation, open the System Preferences to configure uControl. You should find the new uControl icon on the bottom row in the preference's window.

Conflicts: There are a number of other HID Hacks that uControl is currently incompatible with. They must be removed before installing uControl. Be sure to remove the following HID Hacks: iJect, DoubleCommand, CommandAndControl and PowerDelete.


There is an AppleScript called "Uninstall uControl" bundled on the disk image. Launch it and it will verify that you wish to uninstall, ask for the administrator's password, and remove uControl in full.

FAQ: Frequently Asked Questions

I found a bug. Where should I report it?

First, go here. Take a look at the bugs that have already been submitted on sourceforge. If you do not see one describing the behavior you have witnessed, then file a bug. If you do not have a sourceforge account, please leave your email address in the bug comment. DO NOT FILE a new bug to try and increase the priority of an existing bug. If you have more information on a particular bug you can add your comments to it.

Why is the control panel not showing up?

System Preferences sometimes relies on a cache that isn't in sync with reality. To remove the cache do the following: open your home directory, open "Library", open "Caches", and toss "com.apple.preferencepanes.cache" into the trash.

Could uControl differentiate between the left and right keys?

Currently the place where uControl is intercepting keyboard events doesn't allow it to differentiate between left and right keys, but maybe someday in the future.

Can uControl remap any keys on my keyboard?

The question that one might want to ask is "should uControl remap any keys?" I think the answer is no. Mac OS X has a very good keyboard layout system that uses XML files to describe what key should produce what character and under what circumstances (read about it here). That is more than sufficient for many key remapping needs. It also has a remappable key binding system (read about one of its uses here). The only thing either of these two lack is a means of remapping modifier keys, and that's the hole that uControl aims to fill.

Why does uControl make my caps lock key into a sticky control key?

This is not uControl's intended behavior. It's a bug. It should make caps lock behave like the regular control key. If this happens to your machine, send me a bug report and maybe we can fix it.

Will this make my machine kernel panic?

The short answer: Possibly since uControl does link to internal kernel structures, which Apple can change at their whim. Luckily, now OS X will refuse to load a kext if it declares itself bound to a particular kernel version.

Is it possible to distinguish between the right and left Option and Command keys?

Yes, it is possible (anything's possible) but, in short, the answer is no. The calls that uControl intercepts are at too high a level for it to distinguish between right and left keys. It might be possible to drag uControl down into a lower subsystem, but I don't envision myself doing it. Alex Harper, though, he's one you should watch.

Could the Virtual Scroll Wheel feature be implemented without a modifier key? I have seen other trackpads that do this on windows.

(Technical answer provided by Alex Harper.)

This is a feature of many Win32 machines that use Synaptics trackpads. Some manufacturers include drivers to do this (Dell, for example).

Apple Power Books do use Synaptics trackpads, but those trackpads are hidden behind an ADB chip set that does the mouse emulation. Synaptics doesn't make drivers for Macs, and its not clear that even if they did they could get around the ADB chip.

Several years ago, before the move to Mac OS X, I spent some time using an ADB debugger utility to try to talk to the pad directly. Nothing worked. When OS X came out I also spent some time with the source of the track pad driver (as well as with the Linux driver for PowerBooks). Still no dice.

AFAIK the method used in uControl is really the only way to do scroll wheel emulation.

Technical Question: I thought caps lock key event behavior was wired into the hardware; hence, there is no key up for caps lock. How did you do it?

After playing with iJect, I started to believe the same thing. When caps lock on was turned on, you got a key down event. When caps lock was turned off, you got a key up event. At that point I thought I was sunk. No one wants a sticky control key. Fortunately, in between those two events are "special" events which can be directly correlated with the regular key up, key down events. So by looking at both the regular and special events, you can make the caps lock simulate a standard key up/down sequence.


Here are the current set of features that uControl implements:

  • Left Handed Mouse since version 1.3.0
    Swaps your left and right mouse buttons. Contributed by Paul Guyot.
  • Apply Settings to a Particular Keyboard since version 1.3.0
    You can choose what keyboard you want a modifier mapping applied to. This is especially useful for external keyboards made for windows boxes that have the Option and Command key swapped (or alt and Windows keys in PC-speak).
  • Scroll Wheel Emulation since version 1.2.0
    Gives your track pad, or mouse, a virtual scroll wheel. Hold down the key(s) of your choice, and your track pad instantly becomes a scroll wheel not just for vertical scroll bars, but horizontal ones as well. Use it once and you're hooked. Generously contributed by Alex Harper.
  • Real Function Keys since version 1.0.7
    Removes the need to hold down the fn key to access the function keys (useful on laptops). The implementation of this feature was completely redone by Alex Harper in 1.3.5, and it works much, much better than before. It now uses the same method that OS 9 used. Also, many thanks to the Linux PPC folks, Jimi X and Matthias Grim, who discovered how to do the actual ADB muckery that was required.
  • Power Delete since version 1.0.7
    Turns shift delete into a forward delete key. Generously contributed by Graham Bakay. (It should also be noted that fn-delete will give you forward delete.)
  • Remap Caps Lock to Control since version 1.0.1
    The feature that started it all, and inspired this rant, "Tired of hitting all the wrong modifier keys on your laptop to get that simple control sequence? Are you forced to drag a keyboard around with you that has the control key in the right place? The place that Apple mistakenly put the caps lock key. Take control back! uControl maps your control key to its rightfully intended place on your laptops keyboard; the place that's currently occupied by the oft-unused caps lock key." (Actually as of version 1.0.7 you can remap caps lock to any modifier key.)
  • Twerq since version 1.0.1
    Mirrors the key map by holding down the space bar. This is an accessibility feature I added for my mother who has a little trouble with her left hand. It makes one handed typing much easier. (Made available within uControl in version 1.0.7, was previously a separate hack.) Note: this feature has been removed due to possible patent infringement.

Known Problems

    All bugs found and fixed after version 1.3.5 can be found on bug tracker.

  • Found in version:1.0.1
    The caps lock key will still light up even if it behaves as a control key. I do not think there is any way to change this behavior, but if anyone does figure it out a lot of people would be happy to have this changed. (I still sometimes tap caps lock again just to turn it off.)
  • Found in version:1.0.1
    If caps lock is lit and you put the machine to sleep, when it comes out of sleep the control key will be locked as if it were being pressed down. (Work around is to press caps lock key again.)

If you can consistently reproduce any of other cases that will invariably pop up, file a bug at sourceforge. For issues other than bugs, check the mailing list. And hey, if this utility just makes your life easier, by all means send me an email. It makes my day.

-shane (at) gnufoo (dot) org


  • Shane Celis
    The author and maintainer of uControl.
  • Christian Starkjohann
    uControl was derived from iJect, a project by Christian Starkjohann who works for Objective Development, maker of other cool stuff. He wrote an excellent article on how to do the impossible with C++.
  • Alex Harper
    Contributed the idea, code, and GUI panel for scroll wheel emulation, one of my favorite features. He also completely rewrote the implementation of real function keys. He also has some great software on his own site ragingmenace.com like MenuMeters which allows you to monitor your CPU, memory, disk and/or network from your menu bar. For those who enjoy scroll wheel emulation, Alex Harper created another application called SideTrack which does something similar but does not require holding down any key like uControl does.
  • Adam Megacz
    Adam Megacz significantly restructured uControl to get it working on 10.3 (Panther). It no longer relies on the dreaded vtable hack but, I assure you, it still has a hack or two in there.
  • Michael Baltaks
    The real magic behind making uControl configurable at runtime had to do with the work by Michael Baltaks's on DoubleCommand (another project derived from iJect).
  • Paul Guyot
    Submitted the left handed mouse patch that he implemented for his friend and decided to share with the rest of us.
  • Graham Bakay
    Submitted a patch for the inclusion of the PowerDelete feature. The original author of the PowerDelete kernel extension, another derivative of iJect.
  • Carsten Bormann
    Submitted a patch to fix the broken fn key implementation so that function key remappings will now make the page up/down, home and end keys work.
  • Sean Gies
    Submitted a patch for the inverted scrolling option for Scroll Wheel Emulation. He says it's more intuitive. I say to each his own.