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