Puede usar un private.xml como este con KeyRemap4MacBook:
<root>
<vkopenurldef>
<name>KeyCode::VK_OPEN_URL_KEYBOARDVIEWER</name>
<url>file:///System/Library/Input%20Methods/KeyboardViewer.app</url>
</vkopenurldef>
<vkopenurldef>
<name>KeyCode::VK_OPEN_URL_QUITKEYBOARDVIEWER</name>
<url>file:///Applications/QuitKeyboardViewer.app</url>
</vkopenurldef>
<item>
<name>test</name>
<identifier>test</identifier>
<autogen>
__KeyToKey__ KeyCode::OPTION_L,
ModifierFlag::OPTION_L | ModifierFlag::NONE,
KeyCode::OPTION_L,
Option::KEYTOKEY_BEFORE_KEYDOWN,
KeyCode::VK_OPEN_URL_KEYBOARDVIEWER,
Option::KEYTOKEY_AFTER_KEYUP,
KeyCode::VK_OPEN_URL_QUITKEYBOARDVIEWER
</autogen>
<autogen>
__KeyToKey__ KeyCode::OPTION_R,
ModifierFlag::OPTION_R | ModifierFlag::NONE,
KeyCode::OPTION_R,
Option::KEYTOKEY_BEFORE_KEYDOWN,
KeyCode::VK_OPEN_URL_KEYBOARDVIEWER,
Option::KEYTOKEY_AFTER_KEYUP,
KeyCode::VK_OPEN_URL_QUITKEYBOARDVIEWER
</autogen>
</item>
</root>
Guarde este script como /Applications/QuitKeyboardViewer.app
en el Editor de AppleScript:
quit application "KeyboardViewer"
Hay un retraso notable (pero no tan largo) antes de que KeyboardViewer se abra o cierre. Si, por ejemplo, mantiene presionadas simultáneamente la opción y el comando, se muestra KeyboardViewer si presiona primero la opción pero no si presiona primero el comando.