Sử dụng setxkbmap để hoán đổi Shift trái và Điều khiển trái


17

Có thể hoán đổi phím Trái ShiftCTRLPhím trái bằng cách sử dụng setxkbmapthay vì xmodmap?

BIÊN TẬP

Tôi đã chuyển sang Fcitx , hoạt động tốt hơn nhiều với cách bố trí bàn phím và sơ đồ bàn phím tùy chỉnh so với IBus ở mọi khía cạnh. Tôi khuyên bạn nên nó.

Câu trả lời:


28

xmodmapLà lỗi thời; Vì vậy, thực sự nó nên được thực hiện với các xkbcông cụ.

Việc hoán đổi bạn muốn dường như không được bao gồm trong các tệp X11 mặc định; vì vậy bạn phải tự viết nó

Trang http://madduck.net/docs/extending-xkb/ đã giúp tôi hiểu và tìm ra cách để làm điều đó.

Tạo một tệp ~/.xkb/keymap/mykbdnơi bạn đặt đầu ra setxkbmap, nó sẽ là định nghĩa bàn phím cơ sở của bạn; ví dụ:

setxkbmap -print > ~/.xkb/keymap/mykbd

sau đó, tạo một tệp biểu tượng để xác định hoán đổi khóa của bạn, ví dụ như đặt nó vào ~/.xkb/symbols/myswap

ở đó, đặt các dòng sau:

partial modifier_keys
xkb_symbols "swap_l_shift_ctrl" {
    replace key <LCTL>  { [ Shift_L ] };
    replace key <LFSH> { [ Control_L ] };
};

Sau đó, chỉnh sửa ~/.xkb/keymap/mykbdtệp và thay đổi xkb_symbolsdòng để thêm

+myswap(swap_l_shift_ctrl)

cuối cùng, bạn có thể tải nó với xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY(bạn không thể sử dụng "~" cho -Itham số). Nó có thể sẽ đưa ra rất nhiều cảnh báo về các ký hiệu không xác định cho một số khóa hiếm, nhưng bạn có thể bỏ qua chúng (ví dụ: lỗi chuyển hướng sang dave 2> /dev/null:).

Nếu bạn muốn có thể dễ dàng trao đổi giữa một ctrl / ca đảo ngược bình thường của bạn; chỉ cần tạo trong ~/.xkb/keymap/một tệp khác mà không có tùy chọn "myswap" bổ sung và tải nó với xkbcomp. Bạn có thể tạo hai tập lệnh nhỏ để tải chúng.


1
Cảm ơn. Nó không hoạt động, nhưng cho một lần. Vấn đề là tôi đang sử dụng một công cụ đầu vào gọi là IBus. Bất cứ khi nào tôi chuyển đổi phương thức nhập liệu và sau đó quay lại bằng hành trình phím "Ctrl + Space", Shift trái và Điều khiển trái được chuyển trở lại. Bất kỳ đề nghị về cách tránh nó.
ngày

mmn, có lẽ IBus tự xác định một số bàn phím. thử xkbcomp $DISPLAY some.dumpsau và trước khi gọi IBus, và thực hiện một khác biệt của hai bãi (đó là định nghĩa bàn phím hoàn chỉnh); bạn có thể sẽ thấy sự khác biệt
Pablo Saratxaga

Hmm, nó làm, thật khó chịu. Bất kỳ ý tưởng để thoát khỏi vấn đề? Lưu ý rằng lệnh setxkbmap -option caps:escapehoạt động. IBus nhớ các phím được hoán đổi Các phím Esc và Caps_Lock Nhưng nó không làm được với các phím Shift trái và Phím điều khiển trái.
ngày

có thể IBus đọc bàn phím khi ra mắt. Hãy thử tải IBus, thay đổi bàn phím của bạn và tải lại. Nếu vấn đề vẫn còn, thì nên đặt câu hỏi cụ thể cho IBus (và có thể báo cáo lỗi; imho, IBus nên phát hiện các thay đổi bàn phím và tôn trọng chúng)
Pablo Saratxaga

Chào. Ai đó có thể cho tôi biết làm thế nào tôi sẽ sử dụng cùng một kỹ thuật để hoán đổi phím Alt trái với phím Control trái không? Tôi đã thử thay đổi tệp myswap thành: modifier_keys xkb_symbols "exchange_l_shift_ctrl" {thay thế khóa <LCTL> {[Alt_L]}; thay thế khóa <LALT> {[Control_L]}; }; nhưng nó không hoạt động. TIA !!!
Neil Girardi

3

Tôi gặp một số vấn đề về ánh xạ LALTkhi Control_Lsử dụng giải pháp của Pablo , có vẻ như bạn cũng cần thiết lập các modifier_maptùy chọn.

Tôi đã sao chép một mẫu từ /usr/share/X11/xkb/symbols/altwin- tìm kiếm xkb_symbols "ctrl_alt_win"- và sửa đổi nó để đặt các thay đổi sau:

  • Phím LALT để điều khiển **
  • Phím LWIN cho Alt
  • Phím MENU cho phím Windows

Các ~/.xkb/symbols/myswaptập tin cuối cùng là:

partial modifier_keys
xkb_symbols "swap" {
   key <MENU> {     [   Super_L     ]   };
   key <LALT> { [ Control_L, Control_L  ] };
   key <RALT> { type[Group1] = "TWO_LEVEL",
                symbols[Group1] = [ Alt_R, Meta_R ] };
   key <LWIN> { [ Alt_L, Meta_L ] };
   key <LCTL> { [ Control_L ] };
   key <RCTL> { [ Control_R ] };
   modifier_map Control { <LALT>, <LCTL>, <RCTL> };
   modifier_map Mod1 { <LWIN>, <RALT> };
   modifier_map Mod4 { <MENU> };
};

Tôi cũng đã thêm -w0vào xkbcomplệnh để tránh bất kỳ đầu ra cảnh báo khi mở một lớp vỏ mới.

xkbcomp -w0 -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY

** Chuyển đổi giữa Mac và Linux rất nhiều, tôi muốn có hai phím điều khiển trên Linux để xấp xỉ bàn phím Mac cho bộ nhớ cơ của mình.

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.