Có hai lớp ở đây, ánh xạ KEYCODE sang KEYSYM và ánh xạ KEYSYM sang ánh xạ văn bản. Có nhiều lớp hơn nếu bạn đếm hạt nhân, phải ánh xạ các bàn phím AT Bàn phím thành KEYCODE kiểu Xt hoặc mã HID Bàn phím USB thành KEYCODE. KEYCODE chỉ đơn giản là một số nguyên không dấu 8 bit mà hạt nhân của Hệ điều hành chuyển đến máy chủ X11. Nó có thể khác nhau giữa các Hệ điều hành như Linux và Solaris. Trên Linux, các KEYCODE này thường có cùng số được sử dụng trên Bàn phím máy tính cũ của PC. Các máy tính mới hơn có bàn phím AT, PS / 2 hoặc USB thường chỉ ánh xạ các bàn phím đó sang mã XT cũ cho phím để giữ cho cuộc sống đơn giản.
Mã bàn phím thô, cho dù chúng là XT, AT, PS / 2 hoặc USB đại diện cho một vị trí thực trên bàn phím. Bàn phím XT chỉ gửi một số 8 bit duy nhất khi nhấn hoặc nhả phím. Phím q trên bàn phím XT của Hoa Kỳ / Anh gửi số 16. Trên bàn phím tiếng Pháp có cùng khóa vật lý được gắn nhãn a, nhưng nó vẫn gửi 16. Đó là các lớp cao hơn trong hệ điều hành gán cho nó một ý nghĩa thực sự. Khi một khóa được phát hành trên bàn phím XT, cùng một mã khóa được gửi cộng với 128. Trong ví dụ này, khi nhấn q, 16 được gửi, nhưng khi phát hành, số 142 (16 + 128) được gửi. Bàn phím AT sử dụng scancodes là một chuỗi các số và có thể khá dài. Phát hành chính thêm mã bổ sung. Ví dụ: scancode cho Tạm dừng là E1, 1D, 45, E1, 9D, C5. Hầu hết các hệ điều hành bao gồm DOS, Windows, Linux, FreeBSD, và BIOS tất cả các scancodes ánh xạ thành các scancodes kiểu XT đơn giản hơn nhiều. Nó cũng giúp dễ dàng hơn để hỗ trợ các bàn phím mới hơn sử dụng các mã khác nhau như Bàn phím USB gửi mã HID. Tất cả các mã được ánh xạ tới cùng một bộ mã nhất quán của Hệ điều hành trước X11 hoặc ứng dụng nhìn thấy chúng.
X11 không biết gì về phần này của quy trình, nó chỉ lấy KEYCODE từ kernel và áp dụng ánh xạ của chính nó để chuyển KEYCODE đó thành KEYSYM. Xmodmap là công cụ tiêu chuẩn để kiểm soát ánh xạ đó. Phần lớn hành vi của ánh xạ bàn phím là cấu hình, nhưng có một số trường hợp đặc biệt như Num Lock, Mode Switch và Caps Lock / Shift Lock được mã hóa cứng thành X11. Các khía cạnh khác như Shift thực sự có thể cấu hình. Bất kỳ khóa nào cũng có thể được ánh xạ để hoạt động như shift, không giống như Mode Switch hoặc Num Lock.
Các KEYCODE đại diện cho các khóa vật lý được gửi bởi kernel của Hệ điều hành. Mỗi KEYCODE có thể ánh xạ tới 8 KEYSYM có thể. Chỉ có 4 được sử dụng và đôi khi được gọi là cấp 1-4. Cấp 1 chỉ định KEYSYM được in khi không có sửa đổi nào được kích hoạt. Đây thường là chữ thường và chữ số. Công cụ sửa đổi là các KEYCODE sửa đổi KEYSYM được tạo bởi các KEYCODE khác khi công cụ sửa đổi được kích hoạt (nhấn hoặc bật.) Các mã khóa sửa đổi cũng được điều khiển thông qua Xmodmap. Cấp độ 2 chỉ định một KEYSYM được gửi khi nhấn công cụ sửa đổi ca. Cấp 3 được kích hoạt bất cứ khi nào Công tắc chế độ KEYSYM được nhấn. Cấp 4 được kích hoạt khi cả phím shift và Mode Switch đang hoạt động.
Khi KEYSYM đã được tạo, điều này có thể được diễn giải trực tiếp, nhưng hầu hết sẽ được chuyển đổi thành văn bản. Không phải tất cả các KEYSYM đều biến thành văn bản hoặc chỉ có thể ảnh hưởng đến một KEYSYM trong tương lai. Một ví dụ là Shift_L, tất nhiên, không có biểu diễn văn bản, nhưng cũng có một số KEYSYM được sử dụng để Soạn một ký tự khác. Một danh sách của họ trên hệ thống của tôi là dưới /usr/share/X11/locale/en_US.UTF-8/Compose
. Một ví dụ như vậy là dead_acute KEYSYM, khi được nhấn, sẽ cố gắng chuyển đổi KEYSYM tiếp theo thành một chữ cái có dấu cấp tính. Có một ánh xạ chuẩn để biến các KEYSYM thành Unicode.
Bây giờ tất cả những điều này đã được nói, lưu ý rằng Xmodmap đã lỗi thời và được thay thế bằng XKB phức tạp hơn nhiều. Điều này ảnh hưởng đến cách các KEYCODE được ánh xạ tới các KEYSYM, nhưng không ảnh hưởng đến cách kernel tạo ra các KEYCODE cũng như cách các KEYSYM được chuyển đổi thành văn bản hoặc sáng tác vẫn giống nhau. XKB có thể bị vô hiệu hóa khôi phục hành vi Xmodmap. Nó cũng có một lớp tương thích để hỗ trợ Xmodmap, nhưng nó có thể có vấn đề vì nó không hoàn toàn tương thích. Các quy tắc XKB được thực hiện /usr/share/X11/xkb/
và tinh vi hơn nhiều. Có một số tài liệu tốt ở nơi khác về cách nó tạo bố cục bàn phím để ánh xạ các KEYCODE sang KEYSYM.
Đối với bảng điều khiển Linux, nó có bố trí bàn phím riêng được lưu trữ /usr/share/keymaps
và tải loadkeys
lệnh. Khi ở giai đoạn BIOS và bộ tải khởi động trước đó, bao gồm GRUB2, ánh xạ bàn phím là bất cứ số nào mà BIOS quyết định ánh xạ khóa tới.