The MacBook Pro keyboard operates basically in three different modes, which may lead to different scancodes: normal mode, function mode and the numeric keypad mode.
The numeric keypad mode (Num) gets enabled by pressing fn+F6 and disabled by pressing F6. In the numerical keypad mode not all keys emit a scancode!
The function mode is in action as long as the fn key is pressed. In the function mode not all keys emit a scan code. Furthermore all keys, which emit a scancode in the numeric keypad mode will emit the same scancode in the function mode as in the numeric keypad mode (overlay all other keys and key combinations).
The normal mode is in action, when neither the numeric keypad nor the function mode is activated.
If a key and mode combination is not explicitly listed, the key emits the same scancode as in the normal keyboard mode. If a table cell is empty, it means, that for this key and mode combination no scancode gets emitted.
The following tables are ordered by:
In VirtualBox 3.2.10 for IntelMac the keyboard emulation is buggy and emits according to the USB HID Usage Tables specification for keyboard/keypad wrong scancodes for the ^ and < keys. They are actually swapped, i.e. the circumflex key produces scancode 100 and the < key scancode 53. 3.2.12 fixed this problem but it has still some problems wrt. keyboard handling.
Key [Mode] | Code | Lower | Shift | Caps | Ctrl | Option | CapsOption | Alt | Notes (ASCII/UTF-8-Code) |
---|---|---|---|---|---|---|---|---|---|
Esc | 41 | Esc | Esc | Esc | Esc | Esc | Esc | Esc | Escape (27) aka ^[ |
F1 | 58 | F1 | F1 | F1 | F1 | F1 | F1 | ||
F1 fn | Display Brightness decrease | ||||||||
F2 | 59 | F2 | F2 | F2 | F2 | F2 | F2 | F2 | |
F2 fn | Display Brightness increase | ||||||||
F3 | 60 | F3 | F3 | F3 | F3 | F3 | F3 | F3 | |
F3 fn | Mute/UnMute | ||||||||
F4 | 61 | F4 | F4 | F4 | F4 | F4 | F4 | F4 | |
F4 fn | Volume decrease | ||||||||
F5 | 62 | F5 | F5 | F5 | F5 | F5 | F5 | F5 | |
F5 fn | Volume increase | ||||||||
F6 | 63 | F6 | F6 | F6 | F6 | F6 | F6 | F6 | |
F6 fn F6 Num |
83 | Num ⇩ | Num ⇩ | Num ⇩ | Num ⇩ | Num ⇩ | Num ⇩ | Num ⇩ | Numeric Keypad mode: On/Off |
F7 | 64 | F7 | F7 | F7 | F7 | F7 | F7 | F7 | |
F7 fn | Dual-display mode: On/Off | ||||||||
F8 | 65 | F8 | F8 | F8 | F8 | F8 | F8 | F8 | |
F8 fn | Keyboard LEDs: On/Off | ||||||||
F9 | 66 | F9 | F9 | F9 | F9 | F9 | F9 | F9 | |
F9 fn | Keyboard LED Brightness decrease | ||||||||
F10 | 67 | F10 | F10 | F10 | F10 | F10 | F10 | F10 | |
F10 fn | Keyboard LED Brightness increase | ||||||||
F11 | 68 | F11 | F11 | F11 | F11 | F11 | F11 | F11 | |
F12 | 69 | F12 | F12 | F12 | F12 | F12 | F12 | F12 | |
⏏ | Eject DVD | ||||||||
^ | 53* | ^ | ° | ^ | RS | „ | „ | “ | Circumflex (94) ⎹ degree sign (176) ⎹ record separator (30) aka ^^ aka ▲ ⎹ double low-9 quote (\u201E) ⎹ left double quote (\u201C) |
^ Num | |||||||||
1 | 30 | 1 | ! | 1 | 1 | ¡ | ¡ | ¬ | One (49) ⎹ exclamation mark (33) ⎹ inverted exclamation mark (161) ⎹ not sign (172) |
1 Num | |||||||||
2 | 31 | 2 | " | 2 | 2 | “ | “ | ” | Two (59) ⎹ double quotes (34) ⎹ left double quote (\u201C) ⎹ right double quote (\u201D) |
2 Num | |||||||||
3 | 32 | 3 | § | 3 | 3 | ¶ | ¶ | # | Three (51) ⎹ section sign (167) ⎹ paragraph sign (183) ⎹ # (35) |
3 Num | |||||||||
4 | 33 | 4 | $ | 4 | 4 | ¢ | ¢ | £ | Four (52) ⎹ dollar sign (36) ⎹ cent sign (162) ⎹ pound sign (163) |
4 Num | |||||||||
5 | 34 | 5 | % | 5 | 5 | [ | [ | fi | Five (53) ⎹ percent sign (37) ⎹ opening bracket (91) ⎹ ligature fi (\uFB01) |
5 Num | |||||||||
6 | 35 | 6 | & | 6 | 6 | ] | ] | ^ | Six (54) ⎹ ampersand (38) ⎹ closing bracket (93) ⎹ Circumflex (94) |
6 Num | 83 | Esc | Esc | Esc | Esc | Esc | Esc | Esc | Escape (27) |
7 | 36 | 7 | / | 7 | 7 | | | | | \ | Seven (55) ⎹ slash (47) ⎹ vertical bar (124) ⎹ backslash (82) |
7 Num | 95 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | Seven (55) |
8 | 37 | 8 | ( | 8 | 8 | { | { | ˜ | Eight (56) ⎹ left parenthesis (40) ⎹ opening brace (123) ⎹ small tilde (\u02DC) |
8 Num | 96 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | Eight (56) |
9 | 38 | 9 | ) | 9 | 9 | } | } | · | Nine (57) ⎹ right parenthesis (41) ⎹ closing brace (125) ⎹ middle dot (183) |
9 Num | 97 | 9 | 9 | 9 | 9 | 9 | 9 | 9 | Nine (57) |
0 | 39 | 0 | = | 0 | 0 | ≠ | ≠ | ¯ | Zero (48) ⎹ equal sign (61) ⎹ not equal sign (\u2260) ⎹ overline (175) |
0 Num | 84 | / | / | / | / | / | / | / | Slash (47) |
ß | 45 | ß | ? | ß | ß | ¿ | ¿ | ˙ | sharp s (223) ⎹ question mark (63) ⎹ inverted question mark (191) ⎹ dot above (\u02D9) |
ß Num | 46 | = | = | = | = | = | = | = | equal sign (61) |
´ | 46 | ´ | ` | ´ | ´ | ' | ' | ˚ | acute accent (180) ⎹ grave accent (96) ⎹ single quote (39) ⎹ ring above (\u02DA) |
´ Num | |||||||||
⟵ | 42 | ⟵ | ⟵ | ⟵ | BS | ⟵ | ⟵ | ⟵ | delete backwards (8) |
⟵ fn | 76 | Del | Del | Del | Del | Del | Del | Del | delete forwards (127) |
⇥ | 43 | ⇥ | ⇥ | ⇥ | TAB | ⇥ | ⇥ | ⇥ | Tab (9) |
Q | 20 | q | Q | Q | DC1 | « | « | » | q (112) ⎹ Q (81) ⎹ device control 1 (17) ⎹ double left-pointing angle quote (171) ⎹ double right-pointing angle quote (187) |
Q Num | |||||||||
W | 26 | w | W | W | ETB | ∑ | ∑ | „ | w (119) ⎹ W (87) ⎹ end of transmission block (23) ⎹ n-ary sumation (\u2211) ⎹ double low-9 quote (\u201E) |
W Num | |||||||||
E | 8 | e | E | E | ENQ | € | € | ‰ | e (101) ⎹ E (69) ⎹ enquiry (5) ⎹ euro sign (\u20AC) ⎹ permille sign (\u2030) |
E Num | |||||||||
R | 21 | r | R | R | DC2 | ® | ® | ¸ | r (114) ⎹ R (82) ⎹ device control 2 (18) ⎹ registered trade mark sign (174) ⎹ cedilla (184) |
R Num | |||||||||
T | 23 | t | T | T | DC4 | † | † | ˝ | t (116) ⎹ T (84) ⎹ device control 4 (20) ⎹ dagger (\u2020) ⎹ double acute accent (\u02DD) |
T Num | |||||||||
Z | 28 | z | Z | Z | SUB | Ω | Ω | ˇ | z (122) ⎹ Z (90) ⎹ substitue (26) ⎹ greek Omega (\u03A9) ⎹ caron (\u02C7) |
Z Num | |||||||||
U | 24 | u | U | U | NAK | ¨ | ¨ | Á | u (117) ⎹ U (85) ⎹ negative acknowledge (21) ⎹ umlaut (168) ⎹ A with acute (193) |
U Num | 92 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | Four (52) |
I | 12 | i | I | I | TAB | ⁄ | ⁄ | Û | i (105) ⎹ I (73) ⎹ horizontal tab (9) aka ⇥ ⎹ fraction slash (\u2044) ⎹ U with circumflex (219) |
I Num | 93 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | Five (53) |
O | 18 | o | O | O | SI | ø | Ø | Ø | o (111) ⎹ O (79) ⎹ shift in (15) ⎹ o with slash (248) ⎹ O with slash (216) |
O Num | 94 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | Six (54) |
P | 19 | p | P | P | DLE | π | ∏ | ∏ | p (112) ⎹ P (80) ⎹ data link escape (16) ⎹ greek pi (\u03C0) ⎹ n-ary product (\u220F) |
P Num | 85 | * | * | * | * | * | * | * | Asterisk (42) |
Ü | 47 | ü | Ü | Ü | GS | • | • | ° | ü (252) ⎹ Ü (220) ⎹ group separator (29) aka ^] aka ► ⎹ bullet (\u2022) ⎹ degree sign (176) |
Ü Num | |||||||||
+ | 48 | + | * | + | + | ± | ± | | plus sign (43) ⎹ asterisk (42) ⎹ plus-minus (177) ⎹ apple sign (c3 af c2 a3 c2 bf) |
+ Num | |||||||||
⏎ | 40 | ⏎ | ⏎ | ⏎ | CR | ⏎ | ⏎ | ⏎ | Return aka carriage return (13) |
⏎ Num | 88 | ⌅ | ⌅ | ⌅ | ETX | ⌅ | ⌅ | ⌅ | Enter aka end of text (3) |
⇪ | 57 | Keyboard Modifier: ShiftLock On/Off aka CapsLock aka ⇩ | |||||||
A | 4 | a | A | A | SOH | å | Å | Å | a (97) ⎹ A (65) ⎹ start of heading (1) aka home ⎹ a with ring above (229) ⎹ A with ring above (197) |
A Num | |||||||||
S | 22 | s | S | S | DC3 | ‚ | ‚ | Í | s (115) ⎹ S (83) ⎹ device control 3 (19) ⎹ single low-9 quote (\u201A) ⎹ I with acute (205) |
S Num | |||||||||
D | 7 | d | D | D | EOT | ∂ | ∂ | ™ | d (100) ⎹ D (68) ⎹ end of transmission (4) aka end⎹ partial differential (\u2202) ⎹ trade mark sign (\u2122) |
D Num | |||||||||
F | 9 | f | F | F | ACK | ƒ | ƒ | Ï | f (102) ⎹ F (70) ⎹ acknowledge (6) ⎹ function (\u0192) ⎹ I with umlaut (207) |
F Num | |||||||||
G | 10 | g | G | G | BEL | © | © | Ì | g (103) ⎹ G (71) ⎹ bell (7) ⎹ copyright sign (169) ⎹ I with grave (204) |
G Num | |||||||||
H | 11 | h | H | H | BS | ª | ª | Ó | h (104) ⎹ H (72) ⎹ backspace (8) aka ⟵ ⎹ feminine ordinal indicator (170) ⎹ O with acute (211) |
H Num | |||||||||
J | 13 | j | J | J | LF | º | º | ı | j (106) ⎹ J (74) ⎹ linefeed (10) ⎹ masculine ordinal indicator (186) ⎹ dotless i (\u0131) |
J Num | 89 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | One (49) |
K | 14 | k | K | K | VT | Δ | Δ | ˆ | k (107) ⎹ K (75) ⎹ vertical tab (11) aka page▲ ⎹ forward difference (\u2206) (see greek Delta (\u0394)) ⎹ circumflex accent (\u0C26) |
K Num | 90 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | Two (50) |
L | 15 | l | L | L | FF | @ | @ | fl | l (108) ⎹ L (76) ⎹ form feed (12) aka page▼ ⎹ commercial at (64) ⎹ ligature fl (\uFB02) |
L Num | 91 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | Three (51) |
Ö | 51 | ö | Ö | Ö | FS | œ | Œ | Œ | ö (246) ⎹ Ö (214) ⎹ file separator (28) aka ^\ aka ◄ aka cursor left ⎹ ligature oe (\u0153) ⎹ ligature OE (\u0152) |
Ö Num | 86 | - | - | - | - | - | - | - | minus sign (45) |
Ä | 52 | ä | Ä | Ä | Esc | æ | Æ | Æ | ä (228) ⎹ Ä (196) ⎹ escape (27) ⎹ ligature ae (230) ⎹ ligature AE (198) |
Ä Num | |||||||||
# | 50 | # | ' | # | # | ‘ | ‘ | ’ | # (35) ⎹ single quote (39) ⎹ escape (27) ⎹ left single quote (\u2018) ⎹ right single quote (\u2019) |
# Num | |||||||||
⇧ | 225 | Keyboard Modifier: shift left | |||||||
< | 100* | < | > | < | < | ≤ | ≤ | ≥ | less-than (60) ⎹ greater-than (62) ⎹ less-than or equal to (\u2264) ⎹ greater-than or equal to (\u2265) |
< Num | |||||||||
Y | 29 | y | Y | Y | EM | ¥ | ¥ | ‡ | y (121) ⎹ Y (89) ⎹ end of media (25) ⎹ yen sign (165) ⎹ double dagger (\u2021) |
Y Num | |||||||||
X | 27 | x | X | X | CAN | ≈ | ≈ | Ù | x (120) ⎹ X (88) ⎹ cancel (24) ⎹ almost equal to (\u2248) ⎹ U with grave (217) |
X Num | |||||||||
C | 6 | c | C | C | ETX | ç | Ç | Ç | c (99) ⎹ C (67) ⎹ end of text (3) ⎹ c with cedilla (231) ⎹ C with cedilla (199) |
C Num | |||||||||
V | 25 | v | V | V | SYN | √ | √ | ◊ | v (118) ⎹ V (86) ⎹ synchronous idle (22) ⎹ square root (\u221A) ⎹ lozenge (\u25CA) |
V Num | |||||||||
B | 5 | b | B | B | STX | ∫ | ∫ | ‹ | b (98) ⎹ B (66) ⎹ start of text (2) ⎹ integral (\u222B) ⎹ single left-pointing angle quote (\u2039) |
B Num | |||||||||
N | 17 | n | N | N | SO | ~ | ~ | › | n (110) ⎹ N (78) ⎹ shift out (14) ⎹ tilde (126) ⎹ single right-pointing angle quote (\u203A) |
N Num | |||||||||
M | 16 | m | M | M | CR | µ | µ | ˘ | m (109) ⎹ M (77) ⎹ carriage return (13) ⎹ micro sign (181) ⎹ breve (\u02D8) |
M Num | 98 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Zero (48) |
, | 54 | , | ; | , | , | ∞ | ∞ | ˛ | m (109) ⎹ comma (44) ⎹ semicolon (59) ⎹ infinity (\u221E) ⎹ ogonek (\u02DB) |
, Num | |||||||||
. | 55 | . | : | . | . | … | … | ÷ | dot (46) ⎹ colon (58) ⎹ horizontal ellipsis (\u2026) ⎹ division sign (247) |
. Num | 99 | , | , | , | , | . | . | . | comma (44) ⎹ dot (46) |
- | 56 | - | _ | - | - | – | – | — | minus sign (45) ⎹ underline (95) ⎹ en dash (\u2013) ⎹ em dash (\u2014) |
- Num | 87 | + | + | + | + | + | + | + | plus sign (43) |
⇧ | 229 | Keyboard Modifier: shift right | |||||||
fn | Keyboard Modifier: function | ||||||||
ctrl | 224 | Keyboard Modifier: control left | |||||||
⌥ | 226 | ⌥ | alt | ⌥ | ⌥ | ⌥ | ⌥ | ⌥ | Keyboard Modifier: option/alt left |
⌘ | 227 | Keyboard Modifier: meta left aka command left | |||||||
44 | space (32) ⎹ non-breaking space (160) | ||||||||
Num | |||||||||
⌘ | 231 | Keyboard Modifier: meta right aka command right | |||||||
⌅ | 88 | ⌅ | ⌅ | ⌅ | ETX | ⌅ | ⌅ | ⌅ | Enter aka end of text (3) |
⌅ Num | |||||||||
◄home | 80 | ◄ | ◄ | ◄ | FS | ◄ | ◄ | ◄ | left arrow aka aka ^\ ⤎ ⎹ file separator (28) |
◄home fn | 74 | home | home | home | SOH | home | home | home | home aka ↖ aka Pos1 ⎹ start of heading (1) |
page▲ | 82 | ▲ | ▲ | ▲ | RS | ▲ | ▲ | ▲ | up arrow aka ↑ ⎹ record separator (30) aka ^^ |
page▲ fn | 75 | page▲ | page▲ | page▲ | VT | page▲ | page▲ | page▲ | page up aka Bild ↑ ⎹ vertical tab (11) |
page▼ | 81 | ▼ | ▼ | ▼ | US | ▼ | ▼ | ▼ | down arrow aka ↓ ⎹ unit separator (31) aka ^_ |
page▼ fn | 78 | page▼ | page▼ | page▼ | FF | page▼ | page▼ | page▼ | page down aka Bild ↓ ⎹ form feed (12) |
end► | 79 | ► | ► | ► | GS | ► | ► | ► | right arrow aka aka ^] ⤏ ⎹ group separator (29) |
end► fn | 77 | end | end | end | EOT | end | end | end | end aka ↘ aka Ende ⎹ end of transmission (4) |
Javascript needs to be enabled to generate this table
Code | default mapping | Notes |
---|---|---|
0 | NUL aka ^@ | |
1 | ErrorRollOver | |
2 | POSTFail | |
3 | ErrorUndefined | |
49 | \ or | | Bug? IMHO fn+ß should produce 49 and not 46 |
70 | Print Screen | |
71 | Scroll Lock | |
72 | Pause | |
73 | Insert | |
101 | Application | 0x309 |
102 | Power | bf(13) |
103 | Keypad | |
104 | F13 | |
105 | F14 | |
106 | F15 | |
107 | F16 | |
108 | F17 | |
109 | F18 | |
110 | F19 | |
111 | F20 | |
112 | F21 | |
113 | F22 | |
114 | F23 | |
115 | F24 | |
116 | Execute | lf(7) |
117 | Help | lf(16) |
118 | Menu | lf(3) |
119 | Select | lf(5) |
120 | Stop | buckybits+systembit up buckybits+systembit |
121 | Again | lf(2) |
122 | Undo | lf(4) |
123 | Cut | lf(10) |
124 | Copy | lf(6) |
125 | Paste | lf(8) |
126 | Find | lf(9) |
127 | Mute | rf(4) numl padequal |
128 | Volume Up | |
129 | Volume Down | |
130 | Locking Caps Lock | |
131 | Locking Num Lock | |
132 | Locking Scroll Lock | |
133 | Keypad Comma | |
134 | Keypad Equal Sign for AS/400 | |
135 | International1 | |
136 | International2 | |
137 | International3 | |
138 | International4 | |
139 | International5 | |
140 | International6 | |
141 | International7 | |
142 | International8 | |
143 | International9 | |
144 | LANG1 | |
145 | LANG2 | |
146 | LANG3 | |
147 | LANG4 | |
148 | LANG5 | |
149 | LANG6 | |
150 | LANG7 | |
151 | LANG8 | |
152 | LANG9 | |
153 | AlternateErase | |
154 | SysReq/Attention | |
155 | Cancel | |
156 | Clear | |
157 | Prior | |
158 | Return | '\r' |
159 | Separator | |
160 | Out | |
161 | Oper | |
162 | Clear/Again | |
163 | CrSel/Props | |
164 | ExSel | |
165-223 | Reserved | |
228 | Right Control | shiftkeys+rightctrl up shiftkeys+rightctrl |
230 | Right Alt | shiftkeys+altgraph up shiftkeys+altgraph |
232-255 | Reserved |
Copyright (C) 2010 Jens Elkner (jel+mac@cs.uni-magdeburg.de)