มีสองเลเยอร์ที่นี่การแมป KEYCODE กับ KEYSYM และ KEYSYM กับการแมปข้อความ มีเลเยอร์มากกว่านี้ถ้าคุณนับเคอร์เนลซึ่งต้องแม็ป AT Keyboard scancodes กับ KEYCODE สไตล์ XT หรือรหัส HID Keyboard USB กับ KEYCODE KEYCODE เป็นเพียงจำนวนเต็ม 8 บิตที่ไม่ได้ลงชื่อซึ่งเคอร์เนลของระบบปฏิบัติการจะส่งผ่านไปยังเซิร์ฟเวอร์ X11 มันสามารถแตกต่างกันระหว่างระบบปฏิบัติการเช่น Linux และ Solaris บน Linux KEYCODE เหล่านี้มักจะเป็นหมายเลขเดียวกับที่ใช้กับคีย์บอร์ด PC XT เก่า คอมพิวเตอร์รุ่นใหม่ที่มีแป้นพิมพ์ AT, PS / 2 หรือ USB มักจะจับคู่แป้นพิมพ์เหล่านั้นกับรหัส XT เก่าเพื่อให้ปุ่มใช้งานง่าย
รหัสแป้นพิมพ์แบบ Raw ไม่ว่าจะเป็น XT, AT, PS / 2 หรือ USB แสดงถึงตำแหน่งทางกายภาพบนแป้นพิมพ์ แป้นพิมพ์ XT ส่งหมายเลข 8 บิตเดียวเมื่อกดหรือปล่อยปุ่มเท่านั้น ปุ่ม q บนแป้นพิมพ์ US / British XT ส่งหมายเลข 16 บนแป้นพิมพ์ภาษาฝรั่งเศสที่มีรหัสทางกายภาพเดียวกันติดป้าย a แต่ยังคงส่งหมายเลข 16 เป็นชั้นที่สูงกว่าในระบบปฏิบัติการที่กำหนดความหมายที่แท้จริง เมื่อปล่อยปุ่มบนแป้นพิมพ์ XT รหัสเดียวกันจะถูกส่งบวก 128 ตัวอย่างเช่นเมื่อกด q จะส่ง 16 ครั้ง แต่จะปล่อยเมื่อส่งหมายเลข 142 (16 + 128) AT Keyboards ใช้ scancodes ซึ่งเป็นตัวเลขและอาจยาวได้ การปล่อยคีย์เพิ่มรหัสเพิ่มเติม ตัวอย่างเช่น scancode สำหรับหยุดชั่วคราวคือ E1, 1D, 45, E1, 9D, C5 ระบบปฏิบัติการส่วนใหญ่รวมถึง DOS, Windows, Linux, FreeBSD และ BIOS สแกนแผนที่ทั้งหมดเป็น scancodes สไตล์ XT ที่ง่ายกว่ามาก นอกจากนี้ยังช่วยให้ง่ายขึ้นในการสนับสนุนคีย์บอร์ดรุ่นใหม่ที่ใช้รหัสต่าง ๆ เช่นคีย์บอร์ด USB ที่ส่งรหัส HID รหัสทั้งหมดจะถูกแมปเข้ากับชุดรหัสที่สอดคล้องกันโดยระบบปฏิบัติการก่อน X11 หรือแอปพลิเคชันมองเห็น
X11 ไม่รู้ส่วนนี้ของกระบวนการมันเพิ่งได้รับ KEYCODE จากเคอร์เนลและใช้การทำแผนที่ของตัวเองเพื่อแปลง KEYCODE นั้นเป็น KEYSYM Xmodmapเป็นเครื่องมือมาตรฐานสำหรับการควบคุมการทำแผนที่นั้น พฤติกรรมส่วนใหญ่ของการแมปคีย์บอร์ดนั้นสามารถกำหนดค่าได้ แต่มีหลายกรณีพิเศษเช่น Num Lock, Mode Switch และ Caps Lock / Shift Lock ที่ฮาร์ดโค้ดไว้ใน X11 ด้านอื่น ๆ เช่น Shift สามารถกำหนดค่าได้จริง คีย์ใด ๆ ที่สามารถแมปเพื่อทำหน้าที่เป็นกะซึ่งแตกต่างจาก Mode Switch หรือ Num Lock
KEYCODE แสดงถึงฟิสิคัลคีย์ที่ส่งโดยเคอร์เนลของระบบปฏิบัติการ KEYCODE ทุกรายการสามารถแมปกับ KEYSYM ที่เป็นไปได้ 8 รายการ ใช้ 4 เท่านั้นและบางครั้งเรียกว่าระดับ 1-4 ระดับ 1 ระบุ KEYSYM ที่ได้รับการพิมพ์เมื่อไม่มีตัวดัดแปลงใดทำงาน ตัวอักษรและตัวเลขเหล่านี้มักเป็นตัวพิมพ์เล็ก โมเดอเรเตอร์คือ KEYCODE ที่แก้ไข KEYSYM ที่สร้างโดย KEYCODE อื่น ๆ เมื่อโมดิฟายเออร์ทำงานอยู่ (กดหรือเปิดใช้งาน) โมเดอเรเตอร์ของคีย์จะถูกควบคุมผ่าน Xmodmap ระดับ 2 ระบุ KEYSYM ที่จะส่งเมื่อกด shift shift ระดับ 3 ถูกเปิดใช้งานทุกครั้งที่กดสวิตช์โหมด KEYSYM ระดับ 4 ถูกเปิดใช้งานเมื่อทั้งปุ่ม Shift และสวิตช์โหมดทำงาน
เมื่อ KEYSYM ถูกสร้างขึ้นสิ่งนี้อาจตีความได้โดยตรง แต่ส่วนใหญ่จะถูกแปลงเป็นข้อความ ไม่ใช่ KEYSYM ทั้งหมดที่เปลี่ยนเป็นข้อความหรืออาจมีผลกับ KEYSYM ในอนาคตเท่านั้น ตัวอย่างหนึ่งคือ Shift_L ซึ่งแน่นอนว่าไม่มีการแสดงข้อความ แต่ยังมี KEYSYM จำนวนหนึ่งที่ใช้ในการเขียนอักขระอื่น /usr/share/X11/locale/en_US.UTF-8/Compose
รายชื่อของพวกเขาในระบบของฉันอยู่ภายใต้ ตัวอย่างหนึ่งดังกล่าวคือ dead_acute KEYSYM ซึ่งเมื่อกดจะพยายามแปลง KEYSYM ถัดไปเป็นอักษรเน้นเสียงแบบเฉียบพลัน มีการแมปมาตรฐานสำหรับเปลี่ยน KEYSYM เป็น Unicode
ตอนนี้สิ่งนี้ได้ถูกกล่าวไว้แล้วโปรดทราบว่า Xmodmap นั้นล้าสมัยและถูกแทนที่ด้วย XKB ซึ่งมีความซับซ้อนกว่ามาก สิ่งนี้มีผลต่อวิธีที่ KEYCODE นั้นถูกแมปกับ KEYSYM แต่ไม่ใช่ว่าเคอร์เนลสร้าง KEYCODE อย่างไรและวิธีที่ KEYSYM นั้นถูกแปลงเป็นข้อความหรือการแต่งซึ่งยังคงเหมือนเดิม XKB สามารถปิดใช้งานการเรียกคืนพฤติกรรม Xmodmap นอกจากนี้ยังมีเลเยอร์ความเข้ากันได้เพื่อรองรับ Xmodmap แต่ก็สามารถมีปัญหาตามที่มันเข้ากันไม่ได้อย่างสมบูรณ์ กฎ XKB อยู่ภายใต้/usr/share/X11/xkb/
และมีความซับซ้อนมากขึ้น มีเอกสารที่ดีบางส่วนเกี่ยวกับวิธีสร้างเค้าโครงแป้นพิมพ์สำหรับการจับคู่ KEYCODE กับ KEYSYM
สำหรับคอนโซล Linux มันมีรูปแบบแป้นพิมพ์ของตัวเองซึ่งถูกจัดเก็บ/usr/share/keymaps
และโหลดด้วยloadkeys
คำสั่ง เมื่ออยู่ในไบออสและบูตเดอร์ขั้นตอนก่อนหน้ารวมถึง GRUB2 การจับคู่คีย์บอร์ดเป็นสิ่งที่หมายเลข BIOS ตัดสินใจในการจับคู่กุญแจ