Ghi đè một vài mã khóa bằng XKB


10

Tôi muốn xáo trộn một vài phím xung quanh với XKB. (Tại sao? Trên máy tính xách tay có một số phím được đặt bất tiện.) Tôi hiện đang sử dụng xmodmap:

keycode 110 = Prior
keycode 115 = Delete
keycode 112 = Next
keycode 117 = Insert
keycode 119 = End
keycode 118 = Home

Thay vào đó, tôi muốn sử dụng XKB và gán các tên tượng trưng khác nhau cho các khóa vật lý nhất định, thay vì gán các từ khóa khác nhau cho một số mã khóa nhất định. ( Đây là lý do.) Tôi muốn gửi mã khóa 110 PGUPthay vì HOMEmã khóa 115 gửi DELEthay vì END, v.v. Phần còn lại của cấu hình không bị ảnh hưởng (vì vậy PGUPhãy tiếp tục gửi keyym Prior, v.v., và tất cả các khóa khác vẫn còn như họ).

Làm cách nào tôi có thể thay đổi việc gán các mã khóa cụ thể này? Tôi sẽ tải một tập tin với xkbcomp somefile.xkb $DISPLAY, tôi cần phải đặt somefile.xkbgì?

Câu trả lời:


13

Tạo một tệp chứa các thay đổi mã khóa của bạn và lưu nó dưới dạng (ví dụ) ~/.xkb/keycodes/local. (Thư mục keycodesđược mã hóa cứng; thư mục cơ sở có thể là một cái gì đó khác và tên tệp cũng vậy.) Điều này sẽ chứa trong trường hợp của bạn

xkb_keycodes {
  <PGUP> = 110;
  <PGDN> = 112;
  <DELE> = 115;
  <INS> = 117;
  <HOME> = 118;
  <END> = 119;
};

Để tải cái này, hãy chạy

setxkbmap -print | sed -e '/xkb_keycodes/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.xkb - $DISPLAY

Thao tác này xuất các cài đặt hiện tại của bạn, thêm +localvào xkb_keycodes includecâu lệnh và tải nó vào trình biên dịch XKB, thêm ~/.xkbvào đường dẫn đi kèm. (Nếu bạn đặt tên cho tệp của mình một cái gì đó khác ~/.xkb/keycodes/local, rõ ràng bạn sẽ cần thay đổi +local-I${HOME}/.xkb}.) Bằng cách đó, tất cả các cài đặt khác được giữ nguyên.


1
Vì vậy, đây là con đường dự kiến ​​và cách để chuyển nó -Isang chuyển đổi! Cảm ơn, tôi không thể tìm ra điều này từ trang web.
L. Levrel

làm việc như người ở! nó hoạt động nếu muốn cập nhật xkb_symbols, chỉ cần thay xkb_keycodes bằng nó, đã hoạt động
zw963

5

Bạn có thể bắt đầu bằng cách setxkbmap -print > somefile.xkblấy sơ đồ bàn phím bạn đang sử dụng làm cơ sở và sau đó xác định lại tên khóa bạn muốn trong xkb_keycodesphần như sau:

xkb_keymap {
 xkb_keycodes {
  include "evdev+aliases(azerty)"
  // Custom <key name> = keycode
  <INS> = 117;
  <HOME> = 118;
  <PGUP> = 110;
  <DELE> = 115;
  <END> = 119;
  <PGDN> = 112;
 };
 xkb_types { include "complete"};
 xkb_compatibility { include "complete"};
 xkb_symbols { include "pc+fr+inet(evdev)"};
 xkb_geometry { include "pc(pc104)"};
};

Điều này tạo ra cảnh báo rằng một số tên chính được gán nhiều lần, nhưng nó hoạt động vì chỉ có một số cuối cùng (vì vậy điều quan trọng là phải đặt cài đặt tùy chỉnh sau bao gồm). Và các tập tin có lợi thế là có thể đọc được.

Một cách khác là kết xuất sơ đồ bàn phím bạn sử dụng vào một tệp: xkbcomp $DISPLAY somefile.xkbvà sửa đổi cùng một dòng (đó là cùng một sơ đồ với bao gồm đánh giá). Cách này không có cảnh báo cho nhiều định nghĩa, nhưng nó ít đọc hơn.


1
Đâu là tất cả những cái tên này ( evdev+aliases(azerty), vv) đến từ đâu? Tôi rõ ràng muốn thực hiện một thay đổi tương đối, không phải cấu hình lại đầy đủ. Các khóa khác với 6 được liệt kê trong các câu hỏi không được ảnh hưởng, chúng phải ở trạng thái khi chúng ban hành lệnh.
Gilles 'SO- ngừng trở thành ác quỷ'

1
Họ đến từ setxkbmap -print, họ là tập tin từ /usr/share/X11/xkb/. Tôi nghĩ rằng bạn phải đưa ra một sơ đồ toàn bộ xkbcompnhưng tôi có thể sai ...
Leiaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.