CapsLock làm khóa sửa đổi cho các keymap ứng dụng


11

Tôi là nhà phát triển và hiện tại tôi đang sử dụng Ubuntu Linux với PyCharm IDE để phát triển trang web. Để cải thiện hiệu suất gõ, tôi xem xét thay đổi CapsLock thành Hyper_L và gán nó cho mod3 bằng xmodmap. Sau này, tôi muốn ánh xạ mod3 cho phím 'i' thành 'Up'. Cho đến nay những gì tôi đã làm là:

xmodmap -e "keysym Caps_Lock = Hyper_L"

đầu ra là như thế này:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Hyper_L (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

sau đó tôi xóa Hyper_L khỏi mod4

xmodmap -e "remove Mod4 = Hyper_L"

Sau đó tôi đã thử gán Hyper_L cho mod3

xmodmap -e "add Mod3 = Hyper_L"

Tuy nhiên tôi đã gặp lỗi như sau:

X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  11
  Current serial number in output stream:  11

Vì vậy, vấn đề ở đây là gì? Làm thế nào tôi có thể làm cho nó hoạt động? Liệu cách tiếp cận của tôi là đúng? Hoặc tôi nên sử dụng cách tiếp cận khác nhau để sử dụng mod3 cho các phím tùy chỉnh?

PS Tôi đang sử dụng bàn phím Microsoft Natural Ergonom 7000

Câu trả lời:


20

Có một câu trả lời bajillion trên internet, hầu hết đều khó hiểu.

Chìa khóa là bạn cần ánh xạ 'mã khóa 66' sang khóa siêu tốc của mình, xóa ánh xạ của khóa đó khỏi các mod {1,2,4,5} khác (chỉ khi có), sau đó đặt mod3.

Mở ~ / .Xmodmap và đặt như sau:

! Unmap capslock
clear Lock
keycode 66 = Hyper_L

! Leave mod4 as windows key _only_
remove mod4 = Hyper_L

! Set mod3 to capslock
add mod3 = Hyper_L

Chạy cái này

xmodmap ~/.Xmodmap

Nếu có lỗi xảy ra, bạn có thể đặt lại bàn phím bằng:

setxkbmap -layout us

Nguyên nhân có khả năng gây ra thứ gì đó phát nổ là Hyper_L được ánh xạ ở một nơi khác. Khắc phục sự cố này bằng cách chạy xmodmap mà không cần tranh luận để tìm ra điều gì khác bị ràng buộc với Hyper_L. Khi bạn biết những gì bạn cần xóa, hãy bấm nút 'remove BINDING = Hyper_L' trong tệp .Xmodmap của bạn.

Tệp .Xmodmap sẽ được tải vào khi bạn mở các phiên X11, bạn nên đặt bản đồ này vào vị trí vào lần tới khi bạn đăng nhập hoặc khởi động lại.

Cấu hình này hoạt động cho thiết lập Ubuntu 14.04 của tôi. Nếu bạn có một * nix khác và điều này không hoạt động, vui lòng đăng những gì bạn đã làm để giải quyết nó ở đây và tôi sẽ kết hợp nó vào câu trả lời.


@antindexer đã làm việc cho bạn?
heymatthew

Tôi đã thử khá nhiều câu trả lời, và đây là câu trả lời phù hợp với tôi. Ít nhất, nó đã làm trên một cài đặt linux kim loại trần. Điều kỳ lạ là, nó không thành công trong QEMU / KVM, chỉ hoạt động trên các lần nhấn khác của phím khóa mũ.
chéo

0

Tôi biết câu hỏi này khá cũ, nhưng tôi cần chia sẻ giải pháp của mình, vì (bực bội) câu trả lời của heymantthew không hiệu quả với tôi. Điều gì đã kết thúc làm việc cho tôi:

setxkbmap -layout us -option lv3:caps_switch -variant intl

Điều này sẽ kích hoạt capslock làm khóa mod3, đặt bố cục thành "chúng tôi" và đặt biến thể thành "intl". Nếu bạn sử dụng một vỏ tương tác như cá, thì bạn có thể nhấn tab sau khi "-layout", "-option" hoặc "-variant" để có danh sách đầy đủ các tham số có thể.

Thông tin cơ bản khác: Tôi đã thử cách tiếp cận xmodmap một năm trước trên máy Ubuntu chạy trình quản lý cửa sổ i3, chuyển từ môi trường gnome tiêu chuẩn. Tôi đã sửa đổi bố cục bàn phím xkb "chúng tôi", cụ thể là bàn phím quốc tế có phím chết. Nó hoạt động tốt khi sử dụng gnome-desktop-manager (có một tùy chọn để đặt caps-lock làm phím mod3), nhưng tôi không thể làm cho nó hoạt động với xmodmap. Đây là sai lầm của tôi: Tôi nghĩ GUI gdm đã sử dụng xmodmap để ánh xạ khóa mũ thành mod3, nhưng thực tế nó đã đặt tùy chọn X11 này. Bây giờ tôi đã chuyển sang Arch, tôi buộc phải tìm ra nó.

Tôi khuyên mọi người có kế hoạch gây rối với điều này để đọc các trang man trên localectl, xmodmap, setxkbmap và bố trí thử nghiệm bằng cách thêm một phần ngủ và hoàn nguyên:

setxkbmap ... ; sleep 10; setxkbmap <INSERT DEFAULT SETTINGS>

Điều này tiết kiệm cho tôi một khoảng thời gian tốt.

Tuy nhiên, tôi vẫn không hiểu cách tiếp cận xmodmap không hoạt động. Hy vọng điều này sẽ giúp được ai đó.

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.