xref: /freebsd/usr.sbin/bhyve/kbdlayout/default (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
1*19eaa01bSMichael Reifenberger# bhyve ps2kbd keyboard layout file (US - default)
2*19eaa01bSMichael Reifenberger#
3*19eaa01bSMichael Reifenberger# Created by: Koine Yuusuke(koinec) <koinec@users.osdn.me>
4*19eaa01bSMichael Reifenberger#
5*19eaa01bSMichael Reifenberger
6*19eaa01bSMichael Reifenberger# for those who create the Keyboard Layout File. ******************************
7*19eaa01bSMichael Reifenberger#  To create the keyboard layout file, first copy this 'default' file into the
8*19eaa01bSMichael Reifenberger#  same dir. with the layout name as the file name.
9*19eaa01bSMichael Reifenberger#  The file name is a character string that can be specified as it is in the
10*19eaa01bSMichael Reifenberger#  -k option of the bhyve command, so a normal language name is desirable.
11*19eaa01bSMichael Reifenberger#  Then, it is necessary to define the difference between the standard US keyboard
12*19eaa01bSMichael Reifenberger#  and the keyboard for each language according to the setting method described
13*19eaa01bSMichael Reifenberger#  in the comment below.
14*19eaa01bSMichael Reifenberger#
15*19eaa01bSMichael Reifenberger#  Note that lines starting with '#' and blank lines are ignored.
16*19eaa01bSMichael Reifenberger#  In addition, the definition of the standard layout setting (US keyboard)
17*19eaa01bSMichael Reifenberger#  is described as a comment line below for reference.
18*19eaa01bSMichael Reifenberger#  So you usually only need to remove the '#' and fix it to the correct ScanCode
19*19eaa01bSMichael Reifenberger#  only on the lines of the key that you can't type correctly with the standard
20*19eaa01bSMichael Reifenberger#  US keyboard settings.
21*19eaa01bSMichael Reifenberger
22*19eaa01bSMichael Reifenberger
23*19eaa01bSMichael Reifenberger# Alphabet/Number/Sign Keys ---------------------------------------------------
24*19eaa01bSMichael Reifenberger#   Format:
25*19eaa01bSMichael Reifenberger#     'Chr',ScanCode(Hex); <Comment>
26*19eaa01bSMichael Reifenberger#       or
27*19eaa01bSMichael Reifenberger#     AsciiCode(Hex),ScanCode(Hex); <Comment>
28*19eaa01bSMichael Reifenberger#
29*19eaa01bSMichael Reifenberger#  If there are ASCII characters that cannot be entered correctly with the
30*19eaa01bSMichael Reifenberger#  standard settings(US Keyboard layout), delete the "#" at the beginning of the
31*19eaa01bSMichael Reifenberger#  relevant line below and set the correct ScanCode.
32*19eaa01bSMichael Reifenberger#
33*19eaa01bSMichael Reifenberger#  For example, when a Japanese Keyboard is used, the '@' sign cannot be input
34*19eaa01bSMichael Reifenberger#  correctly and the number '2' is input.
35*19eaa01bSMichael Reifenberger#  This is because the US keyboard can input the '@' sign with the Shift + number'2'
36*19eaa01bSMichael Reifenberger#  keys, and the ScanCode of the '@' sign is the number '2' key by default.
37*19eaa01bSMichael Reifenberger#  In this case, remove the '#' at the beginning of the line with the '@' sign
38*19eaa01bSMichael Reifenberger#  below and correct the ScanCode from 0x1e to 0x54 so that you can enter it
39*19eaa01bSMichael Reifenberger#  correctly.
40*19eaa01bSMichael Reifenberger#  ScanCode differs depending on the keyboard of eash language, so check it on
41*19eaa01bSMichael Reifenberger#  the Internet.
42*19eaa01bSMichael Reifenberger#  Note that keys that have no problems with input have the same settings as
43*19eaa01bSMichael Reifenberger#  the US keyboard, so you do not need to set anything below.
44*19eaa01bSMichael Reifenberger#  See the "/usr/share/bhyve/kbdlayout/jp106" file for the specific setting method.
45*19eaa01bSMichael Reifenberger
46*19eaa01bSMichael Reifenberger# '!',0x16;	!  (0x21)
47*19eaa01bSMichael Reifenberger# '"',0x52;	"  (0x22)
48*19eaa01bSMichael Reifenberger# '#',0x26;	#  (0x23)
49*19eaa01bSMichael Reifenberger# '$',0x25;	$  (0x24)
50*19eaa01bSMichael Reifenberger# '%',0x2e;	%  (0x25)
51*19eaa01bSMichael Reifenberger# '&',0x3d;	&  (0x26)
52*19eaa01bSMichael Reifenberger# ''',0x52;	'  (0x27)
53*19eaa01bSMichael Reifenberger# '(',0x46;	(  (0x28)
54*19eaa01bSMichael Reifenberger# ')',0x45;	)  (0x29)
55*19eaa01bSMichael Reifenberger# '*',0x3e;	*  (0x2a)
56*19eaa01bSMichael Reifenberger# '+',0x55;	+  (0x2b)
57*19eaa01bSMichael Reifenberger# ',',0x41;	,  (0x2c)
58*19eaa01bSMichael Reifenberger# '-',0x4e;	-  (0x2d)
59*19eaa01bSMichael Reifenberger# '.',0x49;	.  (0x2e)
60*19eaa01bSMichael Reifenberger# '/',0x4a;	/  (0x2f)
61*19eaa01bSMichael Reifenberger
62*19eaa01bSMichael Reifenberger# '0',0x45;	0  (0x30)
63*19eaa01bSMichael Reifenberger# '1',0x16;	1  (0x31)
64*19eaa01bSMichael Reifenberger# '2',0x1e;	2  (0x32)
65*19eaa01bSMichael Reifenberger# '3',0x26;	3  (0x33)
66*19eaa01bSMichael Reifenberger# '4',0x25;	4  (0x34)
67*19eaa01bSMichael Reifenberger# '5',0x2e;	5  (0x35)
68*19eaa01bSMichael Reifenberger# '6',0x36;	6  (0x36)
69*19eaa01bSMichael Reifenberger# '7',0x3d;	7  (0x37)
70*19eaa01bSMichael Reifenberger# '8',0x3e;	8  (0x38)
71*19eaa01bSMichael Reifenberger# '9',0x46;	9  (0x39)
72*19eaa01bSMichael Reifenberger# ':',0x4c;	:  (0x3a)
73*19eaa01bSMichael Reifenberger# ';',0x4c;	;  (0x3b)
74*19eaa01bSMichael Reifenberger# '<',0x41;	<  (0x3c)
75*19eaa01bSMichael Reifenberger# '=',0x55;	=  (0x3d)
76*19eaa01bSMichael Reifenberger# '>',0x49;	>  (0x3e)
77*19eaa01bSMichael Reifenberger# '?',0x4a;	?  (0x3f)
78*19eaa01bSMichael Reifenberger
79*19eaa01bSMichael Reifenberger# '@',0x1e;	@  (0x40)
80*19eaa01bSMichael Reifenberger# 'A',0x1c;	A  (0x41)
81*19eaa01bSMichael Reifenberger# 'B',0x32;	B  (0x42)
82*19eaa01bSMichael Reifenberger# 'C',0x21;	C  (0x43)
83*19eaa01bSMichael Reifenberger# 'D',0x23;	D  (0x44)
84*19eaa01bSMichael Reifenberger# 'E',0x24;	E  (0x45)
85*19eaa01bSMichael Reifenberger# 'F',0x2b;	F  (0x46)
86*19eaa01bSMichael Reifenberger# 'G',0x34;	G  (0x47)
87*19eaa01bSMichael Reifenberger# 'H',0x33;	H  (0x48)
88*19eaa01bSMichael Reifenberger# 'I',0x43;	I  (0x49)
89*19eaa01bSMichael Reifenberger# 'J',0x3b;	J  (0x4a)
90*19eaa01bSMichael Reifenberger# 'K',0x42;	K  (0x4b)
91*19eaa01bSMichael Reifenberger# 'L',0x4b;	L  (0x4c)
92*19eaa01bSMichael Reifenberger# 'M',0x3a;	M  (0x4d)
93*19eaa01bSMichael Reifenberger# 'N',0x31;	N  (0x4e)
94*19eaa01bSMichael Reifenberger# 'O',0x44;	O  (0x4f)
95*19eaa01bSMichael Reifenberger
96*19eaa01bSMichael Reifenberger# 'P',0x4d;	P  (0x50)
97*19eaa01bSMichael Reifenberger# 'Q',0x15;	Q  (0x51)
98*19eaa01bSMichael Reifenberger# 'R',0x2d;	R  (0x52)
99*19eaa01bSMichael Reifenberger# 'S',0x1b;	S  (0x53)
100*19eaa01bSMichael Reifenberger# 'T',0x2c;	T  (0x54)
101*19eaa01bSMichael Reifenberger# 'U',0x3c;	U  (0x55)
102*19eaa01bSMichael Reifenberger# 'V',0x2a;	V  (0x56)
103*19eaa01bSMichael Reifenberger# 'W',0x1d;	W  (0x57)
104*19eaa01bSMichael Reifenberger# 'X',0x22;	X  (0x58)
105*19eaa01bSMichael Reifenberger# 'Y',0x35;	Y  (0x59)
106*19eaa01bSMichael Reifenberger# 'Z',0x1a;	Z  (0x5a)
107*19eaa01bSMichael Reifenberger# '[',0x54;	[  (0x5b)
108*19eaa01bSMichael Reifenberger# '\',0x5d;	\  (0x5c)
109*19eaa01bSMichael Reifenberger# ']',0x5b;	]  (0x5d)
110*19eaa01bSMichael Reifenberger# '^',0x36;	^  (0x5e)
111*19eaa01bSMichael Reifenberger# '_',0x4e;	_  (0x5f)
112*19eaa01bSMichael Reifenberger
113*19eaa01bSMichael Reifenberger# '`',0x0e;	`  (0x60)
114*19eaa01bSMichael Reifenberger# 'a',0x1c;	a  (0x61)
115*19eaa01bSMichael Reifenberger# 'b',0x32;	b  (0x62)
116*19eaa01bSMichael Reifenberger# 'c',0x21;	c  (0x63)
117*19eaa01bSMichael Reifenberger# 'd',0x23;	d  (0x64)
118*19eaa01bSMichael Reifenberger# 'e',0x24;	e  (0x65)
119*19eaa01bSMichael Reifenberger# 'f',0x2b;	f  (0x66)
120*19eaa01bSMichael Reifenberger# 'g',0x34;	g  (0x67)
121*19eaa01bSMichael Reifenberger# 'h',0x33;	h  (0x68)
122*19eaa01bSMichael Reifenberger# 'i',0x43;	i  (0x69)
123*19eaa01bSMichael Reifenberger# 'j',0x3b;	j  (0x6a)
124*19eaa01bSMichael Reifenberger# 'k',0x42;	k  (0x6b)
125*19eaa01bSMichael Reifenberger# 'l',0x4b;	l  (0x6c)
126*19eaa01bSMichael Reifenberger# 'm',0x3a;	m  (0x6d)
127*19eaa01bSMichael Reifenberger# 'n',0x31;	n  (0x6e)
128*19eaa01bSMichael Reifenberger# 'o',0x44;	o  (0x6f)
129*19eaa01bSMichael Reifenberger
130*19eaa01bSMichael Reifenberger# 'p',0x4d;	p  (0x70)
131*19eaa01bSMichael Reifenberger# 'q',0x15;	q  (0x71)
132*19eaa01bSMichael Reifenberger# 'r',0x2d;	r  (0x72)
133*19eaa01bSMichael Reifenberger# 's',0x1b;	s  (0x73)
134*19eaa01bSMichael Reifenberger# 't',0x2c;	t  (0x74)
135*19eaa01bSMichael Reifenberger# 'u',0x3c;	u  (0x75)
136*19eaa01bSMichael Reifenberger# 'v',0x2a;	v  (0x76)
137*19eaa01bSMichael Reifenberger# 'w',0x1d;	w  (0x77)
138*19eaa01bSMichael Reifenberger# 'x',0x22;	x  (0x78)
139*19eaa01bSMichael Reifenberger# 'y',0x35;	y  (0x79)
140*19eaa01bSMichael Reifenberger# 'z',0x1a;	z  (0x7a)
141*19eaa01bSMichael Reifenberger# '{',0x54;	{  (0x7b)
142*19eaa01bSMichael Reifenberger# '|',0x5d;	|  (0x7c)
143*19eaa01bSMichael Reifenberger# '}',0x5b;	}  (0x7d)
144*19eaa01bSMichael Reifenberger# '~',0x0e;	~  (0x7e)
145*19eaa01bSMichael Reifenberger
146*19eaa01bSMichael Reifenberger
147*19eaa01bSMichael Reifenberger# Functional Keys -------------------------------------------------------------
148*19eaa01bSMichael Reifenberger#   Format:
149*19eaa01bSMichael Reifenberger#     Xorg KeySym(Hex:2Byte),ScanCode(Hex); <Comment>
150*19eaa01bSMichael Reifenberger#       or
151*19eaa01bSMichael Reifenberger#     Xorg KeySym(Hex:2Byte),ScanCode(Hex),Prefix(Hex); <Comment>
152*19eaa01bSMichael Reifenberger#
153*19eaa01bSMichael Reifenberger#  Key definitions other than alphanumeric characters such as Enter and Escape
154*19eaa01bSMichael Reifenberger#  are set in this section.
155*19eaa01bSMichael Reifenberger#  If there is a key that can not be entered correctly with the standard settings
156*19eaa01bSMichael Reifenberger#  (US Keyboard layout),, delete the '#' at the beginning of the corresponding
157*19eaa01bSMichael Reifenberger#  line and set the correct scan code.
158*19eaa01bSMichael Reifenberger#  The Xorg KeySym Code can be checked by using the 'xev' command from X window
159*19eaa01bSMichael Reifenberger#  on the guest OS.
160*19eaa01bSMichael Reifenberger#  In addition, some keys have ScanCodes that have a Prefix Byte.
161*19eaa01bSMichael Reifenberger#  In this case, define '0xe0' as the third argument.(example Home Key,etc)
162*19eaa01bSMichael Reifenberger#  Note that keys that have no problems with input have the same settings as
163*19eaa01bSMichael Reifenberger#  the US keyboard, so you do not need to set anything below.
164*19eaa01bSMichael Reifenberger#  See the "/usr/share/bhyve/kbdlayout/jp106" file for the specific setting method.
165*19eaa01bSMichael Reifenberger
166*19eaa01bSMichael Reifenberger# 0xff08,0x66;		Back space
167*19eaa01bSMichael Reifenberger# 0xff09,0x0d;		Tab
168*19eaa01bSMichael Reifenberger# 0xff0d,0x5a;		Return
169*19eaa01bSMichael Reifenberger# 0xff1b,0x76;		Escape
170*19eaa01bSMichael Reifenberger# 0xff50,0x6c,0xe0; 	Home
171*19eaa01bSMichael Reifenberger# 0xff51,0x6b,0xe0; 	Left arrow
172*19eaa01bSMichael Reifenberger# 0xff52,0x75,0xe0; 	Up arrow
173*19eaa01bSMichael Reifenberger# 0xff53,0x74,0xe0; 	Right arrow
174*19eaa01bSMichael Reifenberger# 0xff54,0x72,0xe0; 	Down arrow
175*19eaa01bSMichael Reifenberger# 0xff55,0x7d,0xe0; 	PgUp
176*19eaa01bSMichael Reifenberger# 0xff56,0x7a,0xe0; 	PgDown
177*19eaa01bSMichael Reifenberger# 0xff57,0x69,0xe0; 	End
178*19eaa01bSMichael Reifenberger# 0xff63,0x70,0xe0; 	Ins
179*19eaa01bSMichael Reifenberger# 0xff8d,0x5a,0xe0; 	Keypad Enter
180*19eaa01bSMichael Reifenberger# 0xffe1,0x12;		Left shift
181*19eaa01bSMichael Reifenberger# 0xffe2,0x59;		Right shift
182*19eaa01bSMichael Reifenberger# 0xffe3,0x14;		Left control
183*19eaa01bSMichael Reifenberger# 0xffe4,0x14,0xe0; 	Right control
184*19eaa01bSMichael Reifenberger# 0xffe9,0x11;		Left alt
185*19eaa01bSMichael Reifenberger# 0xfe03,0x11,0xe0; 	AltGr
186*19eaa01bSMichael Reifenberger# 0xffea,0x11,0xe0; 	Right alt
187*19eaa01bSMichael Reifenberger# 0xffeb,0x1f,0xe0; 	Left Windows
188*19eaa01bSMichael Reifenberger# 0xffec,0x27,0xe0; 	Right Windows
189*19eaa01bSMichael Reifenberger# 0xffbe,0x05;		F1
190*19eaa01bSMichael Reifenberger# 0xffbf,0x06;		F2
191*19eaa01bSMichael Reifenberger# 0xffc0,0x04;		F3
192*19eaa01bSMichael Reifenberger# 0xffc1,0x0c;		F4
193*19eaa01bSMichael Reifenberger# 0xffc2,0x03;		F5
194*19eaa01bSMichael Reifenberger# 0xffc3,0x0b;		F6
195*19eaa01bSMichael Reifenberger# 0xffc4,0x83;		F7
196*19eaa01bSMichael Reifenberger# 0xffc5,0x0a;		F8
197*19eaa01bSMichael Reifenberger# 0xffc6,0x01;		F9
198*19eaa01bSMichael Reifenberger# 0xffc7,0x09;		F10
199*19eaa01bSMichael Reifenberger# 0xffc8,0x78;		F11
200*19eaa01bSMichael Reifenberger# 0xffc9,0x07;		F12
201*19eaa01bSMichael Reifenberger# 0xffff,0x71,0xe0;	Del
202*19eaa01bSMichael Reifenberger# 0xff14,0x7e;		ScrollLock
203*19eaa01bSMichael Reifenberger
204*19eaa01bSMichael Reifenberger
205*19eaa01bSMichael Reifenberger# NumLock and Keypads ---------------------------------------------------------
206*19eaa01bSMichael Reifenberger#
207*19eaa01bSMichael Reifenberger#  The numeric keypad settings are the same as the Functional Key section above.
208*19eaa01bSMichael Reifenberger
209*19eaa01bSMichael Reifenberger# 0xff7f,0x77; 		NumLock
210*19eaa01bSMichael Reifenberger# 0xffaf,0x4a,0xe0; 	Keypad slash
211*19eaa01bSMichael Reifenberger# 0xffaa,0x7c; 		Keypad asterisk
212*19eaa01bSMichael Reifenberger# 0xffad,0x7b; 		Keypad minus
213*19eaa01bSMichael Reifenberger# 0xffab,0x79;	 	Keypad plus
214*19eaa01bSMichael Reifenberger# 0xffb7,0x6c; 		Keypad 7
215*19eaa01bSMichael Reifenberger# 0xff95,0x6c; 		Keypad home
216*19eaa01bSMichael Reifenberger# 0xffb8,0x75; 		Keypad 8
217*19eaa01bSMichael Reifenberger# 0xff97,0x75; 		Keypad up arrow
218*19eaa01bSMichael Reifenberger# 0xffb9,0x7d; 		Keypad 9
219*19eaa01bSMichael Reifenberger# 0xff9a,0x7d; 		Keypad PgUp
220*19eaa01bSMichael Reifenberger# 0xffb4,0x6b; 		Keypad 4
221*19eaa01bSMichael Reifenberger# 0xff96,0x6b; 		Keypad left arrow
222*19eaa01bSMichael Reifenberger# 0xffb5,0x73; 		Keypad 5
223*19eaa01bSMichael Reifenberger# 0xff9d,0x73; 		Keypad empty
224*19eaa01bSMichael Reifenberger# 0xffb6,0x74; 		Keypad 6
225*19eaa01bSMichael Reifenberger# 0xff98,0x74; 		Keypad right arrow
226*19eaa01bSMichael Reifenberger# 0xffb1,0x69; 		Keypad 1
227*19eaa01bSMichael Reifenberger# 0xff9c,0x69; 		Keypad end
228*19eaa01bSMichael Reifenberger# 0xffb2,0x72; 		Keypad 2
229*19eaa01bSMichael Reifenberger# 0xff99,0x72; 		Keypad down arrow
230*19eaa01bSMichael Reifenberger# 0xffb3,0x7a; 		Keypad 3
231*19eaa01bSMichael Reifenberger# 0xff9b,0x7a; 		Keypad PgDown
232*19eaa01bSMichael Reifenberger# 0xffb0,0x70; 		Keypad 0
233*19eaa01bSMichael Reifenberger# 0xff9e,0x70; 		Keypad ins
234*19eaa01bSMichael Reifenberger# 0xffae,0x71; 		Keypad .
235*19eaa01bSMichael Reifenberger# 0xff9f,0x71; 		Keypad del
236*19eaa01bSMichael Reifenberger
237*19eaa01bSMichael Reifenberger
238*19eaa01bSMichael Reifenberger# Language Specific Keys -------------------------------------------------------
239*19eaa01bSMichael Reifenberger#
240*19eaa01bSMichael Reifenberger#  If a key not exist in the US keyboard is added to the keyboard of each language,
241*19eaa01bSMichael Reifenberger#  it is necessary to add the combination of Xorg KeySym and ScanCode of the
242*19eaa01bSMichael Reifenberger#  corresponding key.
243*19eaa01bSMichael Reifenberger#  The setting format is the same as the Functional Key section above.
244*19eaa01bSMichael Reifenberger#   example:
245*19eaa01bSMichael Reifenberger#     0xff2a,0x0e;   Hankaku/Zenkaku|Kanji (Japanese 106 keyboard original Key)
246*19eaa01bSMichael Reifenberger
247*19eaa01bSMichael Reifenberger
248