How to map your Mac’s CapsLock key to a NVDA or JAWS key in a Windows virtual machine

OK folks, this is hopefully it, the ultimate way to map the CapsLock key of your MacBook to be used as a NVDA or JAWS modifier key in a virtual machine running Windows.

The problem

The MacBook’s keyboard has no insert key. The insert key, however, is the main modifier key used by screen readers on Windows. This stems from the era where computers all still had big keyboards with number pads, and even laptops were still big enough that most of them had these.

In newer, tinier models, these have gone for good. Yes, there are possibilities to use external Bluetooth number pads, but hey, this is not really mobile, is it? 😉 These keyboards do, however, still have CapsLock keys. So why not use them? If you then switch your Windows screen reader to laptop layout, you get full functionality within a Windows VM.

I realize there are other solutions out there to re-map another key to the insert key within Windows by using tools such as SharpKeys. But I found these always conflicted with other keys, caused whacky behavior if VoiceOver was running on the Mac side still, etc. etc. So I was always on the look-out for a better solution.

Credit where credit is due

And heureka! I found it in a German FAQ article on TuKSuB. Thank you, Kamil, for putting this together! This article is based on, but not an exact translation of, Kamil’s entry. So here we go!

The prerequisites

For this to work, we need two freely available Mac tools: Karabiner (formerly KeyRemap4MacBook), and Seil (formerly PCKeyboardHack). Karabiner will map the CapsLock key to a VoiceOver key for us, and Seil will help us to use CapsLock as an Insert key in a Windows VM. Go ahead and download and install both tools now. They come with standard installation packages. We’ll use each tool in the following steps. Just make sure you install the right version for your operating system. Seil, for example, comes in different versions for OS X 10.11 El Capitan and 10.10 Yosemite plus 10.9 Mavericks.

Step 1: Remap CapsLock to a VoiceOver key

  1. Go to your Applications folder (Cmd+Shift+A), and launch Karabiner. On first launch, you will most likely be prompted that KarabinerAxHelper wants to use Accessibility features.
  2. Click the Open Preferences button, which will open to the Security/Privacy tab. Unlock the settings with your admin password, and enable the checkbox for KarabinerAxHelper in the Accessibility permissions table. Now, close System Preferences with Cmd+W.
  3. Press VoiceOver+M twice to reach the notifications area at the top right of your Mac screen. Karabiner inserted itself here. Use VoiceOver+Right and Left Arrows to find Karabiner and press VoiceOver+SpaceBar to activate. DownArrow to Preferences and activate again with VoiceOver+SpaceBar or Enter.
  4. The Preferences window opens to the Change Key tab. VoiceOver+RightArrow until you find the Remap Keys table.
  5. DownArrow in this table until you reach the row that reads „For blind users“. Press RightArrow to open that node.
  6. DownArrow once, and activate the checkbox for the now visible option „Use CapsLock as VoiceOver key“. The rest of that checkbox label gives a hint to what’s to be done for virtual machines, too, and we’ll get to that in a minute.
  7. Press Cmd+W to close this window.

Step 2: Change CapsLock key behavior in System Preferences

Now, we need to tell Mac OS X to leave the CapsLock key alone.

  1. Open the menu bar with VoiceOver+M, and DownArrow on the Apple menu to System Preferences.
  2. Tab to Keyboard and press VoiceOver+SpaceBar to open that settings panel.
  3. Make sure the Keyboard tab is selected, and at the bottom of the screen, find the Modifiers button and press it with VoiceOver+SpaceBar.
  4. In the Modifiers dialog, VoiceOver+RightArrow to the CapsLock popup menu, press VoiceOver+SpaceBar and select the option No Action. Press Enter to make the choice.
  5. VoiceOver+RightArrow onto the OK button and press it.
  6. Close the System Preferences with Cmd+W.

Step 3: Using CapsLock as the Insert key on Windows

Now, the last step is to use the Seil tool to map CapsLock to the Insert key when a virtual machine is running. Karabiner already hinted for us to do this when we checked the option to use CapsLock as a VoiceOver key above.

  1. From your Applications folder, launch the Seil application.
  2. Make sure the Setting tab is selected. Find the first table. In my case, it has 6 entries.
  3. DownArrow to find the Change the CapsLock Key option, and expand it by pressing RightArrow.
  4. DownArrow once more to a similar entry called Change the CapsLock key. Interact with the row and find the checkbox. Press VoiceOver+Space to check it.
  5. VoiceOver+RightArrow onto the column called KeyCode, and press VoiceOver+SpaceBar to edit this value.
  6. Change it to 110 from the default of 51, and press Enter to accept.
  7. Close the window with Cmd+W.

Step 4 only for El Capitan: Disable CAPS Lock as VoiceOver modifier in VoiceOver Utility

  1. Launch VoiceOver Utility by pressing Control+Option+F8 while VoiceOver is running.
  2. In the General category, change the popup for the VoiceOver modifier from “Ctrl+Option or CAPS Lock” to “Only Ctrl+Option”. This is new in 10.11 El Capitan, and VoiceOver sets the modifier to be both by default.
  3. Quit VoiceOver Utility.

If you don’t change this, the CAPS Lock key will cause erratic behavior when used inside virtual machines.

Step 5: Launch your virtual machine and test

In order to verify that this all worked, launch VMware Fusion or your virtualization software of choice, and launch your Windows VM. Verify that NVDA, JAWS or your other preferred screen reader can now use the CapsLock key. JAWS should immediately find it, and in my case, NVDA did, too. Note that you should not tell your screen reader to use CapsLock as a modifier key, but leave it on Insert instead. But you can use the laptop keyboard layout for better access to many commands.


8 thoughts on “How to map your Mac’s CapsLock key to a NVDA or JAWS key in a Windows virtual machine”

  1. You wrote:
    “Note that you should not tell your screen reader to use CapsLock as a modifier key, but leave it on Insert instead.”

    Not having this setup, what would happen if you instead told the screen reader to use caps lock as an insert key? Couldn’t you avoid much of this remapping hastle, at least on the windows side?

    — Rich

    1. The problem is that leaving the CapsLock as the original may still cause interference between Mac and Windows. Furthermore, while JAWS and NVDA do support CapsLock as a modifier, other assistive technology products may not. However, you’re of course welcome to try and report back here with your findings. 🙂

  2. I struggled with this for ages, and there’s no perfect solution to leveraging Caps-Lock that I can find, it still causes problems with discontinuity with the key’s “on” state between the VM and host.

    But I did eventually come up with a simpler approach: Shift+Backtick — they’re right next to each at the left of the Mac’s keyboard, so they’re easy to press together, don’t need any special tools to map, and don’t have any undesirable side-effects 🙂

  3. Re-stumbled upon this enlightening article and now with much thanks and gratitude to you, Marco, I have my capslock key working as it should in Fusion. However, one question remains: how do I get capslock functionality from it? AS in it acting like a capslock key? This is now gone from the Mac as well as Windows. For Fusion, should I just use its own key remapping utilities to map the capslock to the ` key? And just forego it on Mac? If so, a very small price to pay to have normal insert functionality and use with a screen reader. Thank you so much for this post.

  4. It works, only problem is that I wouldn’t be able to use Jaws and Pc cursor: I tried caps lock-p, caps lock-ò and so on, nothing.

What are your thoughts?