Nhắc lại Caps Lock để kiểm soát và thoát (không phải cách thông thường)


27

Tôi biết cách sử dụng xmodmap để ánh xạ lại phím Caps lock để nó hoạt động như một phím Control hoặc như một phím Escape. Tôi muốn kết hợp cả hai tính năng như sau:

Khi tôi ấn, sau đó nhả, phím Caps lock, nó sẽ gửi Escape. Khi tôi giữ phím Caps và ấn một phím khác (giả sử A), nó sẽ gửi Control-A.

Có sự kết hợp nào của xkb, xmodmap và một cái gì khác có thể làm cho khóa Caps hoạt động theo cách này trong X không?

Tôi đang sử dụng Ubuntu Precise trên Macbook Air 3,1.

Câu trả lời:


-2

Bạn có thể làm cái thứ nhất (ánh xạ Caps Locktới Esc) nhưng bạn không thể làm cái thứ hai.

Giải thích đơn giản: Caps Lock chỉ là không được thiết kế để làm một cái gì đó khi nhấn.

Giải thích xây dựng: Có nhiều loại chìa khóa. Hai trong số đó là Phím ModifierKhóa Khóa .

Caps Locklà một Lock Key trong khi các phím như Ctrl, Alt, và ShiftModifier Keys .

Rõ ràng từ tên của họ, Phím Modifier sửa đổi chức năng của (các) phím tiếp theo được nhấn và Khóa Khóa hoạt động như một công tắc bật tắt để bật hoặc tắt một số chức năng cụ thể.

Bây giờ, vì Caps Lock Khóa Khóa , bạn không thể có nó hoạt động giống như Khóa sửa đổi mà không ánh xạ nó thành một Khóa . Caps Locktự nó không thể hoạt động như một khóa sửa đổi .


Cảm ơn bạn đã xác nhận rằng X không được thiết kế để làm những gì tôi muốn. Nếu một guru X muốn hack một cái gì đó để làm cho nó hoạt động, xin vui lòng liên lạc với tôi.
dùng372737

4
Như câu trả lời không được chấp nhận dưới đây, bạn chắc chắn có thể thực hiện phần thứ hai với nhiều tiện ích như xcape hoặc At-Home-Modifier.
Sparhawk

34

Tôi có thiết lập này trên máy Mac của mình và tôi đã cố gắng tìm cách cho Ubuntu mà không gặp may.

Chà, giờ nó đã hoạt động. Cảm ơn tungd vì đã đưa tôi đến xcape . Những gì tôi đã làm là thực sự đơn giản và dễ hiểu.

  1. Trong Tùy chọn hệ thống> Bố cục bàn phím> Tùy chọn ...> Vị trí phím Ctrl, tôi đã chọn 'Caps Lock là Ctrl'.

  2. xcape -e 'Control_L = Thoát'

Xong, Caps Lock hoạt động như Ctrl khi được sử dụng như công cụ sửa đổi và như Esc khi nhấn một mình (có độ trễ vài trăm mili giây, như đã lưu ý trên tệp README xcape, vì vậy nó vẫn không tối ưu như giải pháp Mac sử dụng KeyRemap4MacBook.)


4
Tôi đã sử dụng gnome-tweak-toolđể lập bản đồ Caps Lockđến Ctrlnhư không có là Keyboard layoutSystem Settingstrên Ubuntu 14.04. Sau đó xcape -e 'Control_L=Escape'không hoạt động, nhưng sau khi sử dụng, xcape -dtôi phát hiện ra rằng Caps Locktạo mã khóa 66 và ánh xạ lại tương ứng : xcape -e '#66=Escape'.
Sergiy Belozorov

3
Theo bài đăng trên blog này , có thể làm điều này chỉ với xcape: setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape' setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape;Control_L=Escape;Control_R=Escape'
Louis Simoneau

Đây thực sự phải là câu trả lời được chấp nhận @ user372737
Assaf Lavie

@LouisSimoneau cái này gấp ngàn lần cái này.
Spencer Boucher

1
Bất kỳ tiến triển với vấn đề chậm trễ?
Tẩy răng

6

Tôi cũng đang tìm kiếm cái này Kể từ một tuần trước, tôi đã tìm cho mình một giải pháp một phần bằng cách sử dụng xmodmap:

add Control = Caps_Lock
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

Điều này tất nhiên là không hoạt động hoàn hảo, nó có hiệu quả gửi cả Escape và Ctrl cùng lúc khi tôi nhấn CapsLock, nhưng tôi đã hài lòng với nó trong một thời gian.

Cuối cùng tôi đã tìm thấy tiện ích nhỏ này https://github.com/alols/xcape . Vì vậy, bây giờ tôi có thể chỉ cần ánh xạ lại CapsLock thành Ctrl và để xcape thực hiện công việc của nó.


Một tùy chọn khác là At-Home-Modifier. Nó không phát triển tích cực và khác một chút so với xcape bằng cách cài đặt tại root. Tuy nhiên, nó kích hoạt thông qua xorg.conf và do đó chỉ có thể hoạt động trên các bàn phím cụ thể, trong khi sử dụng các bàn phím khác đồng thời.
Sparhawk

4

EDIT: Đã sửa lỗi này cho hầu hết các trình quản lý hiển thị thông minh (mới hơn).

Theo nhận xét của Louis và Sergiy, tôi đã đưa ra giải pháp này phù hợp với tôi trên Ubuntu 16.04 (Xenial) với LightDM và Unity.

Tôi đặt dòng mã sau vào .xprofiletập tin của tôi trong thư mục nhà của tôi.

setxkbmap -option 'caps:ctrl_modifier' && xcape -e 'Caps_Lock=Escape' &

Việc theo dõi & đặt lệnh xcape vào nền để nó không chặn phiên của bạn. Setxkbmap làm cho nó thay đổi ngay lập tức.

Trung sĩ:

Tôi đã sử dụng công cụ chỉnh sửa gnome để ánh xạ Caps Lock sang Ctrl vì không có bố cục Bàn phím trong Cài đặt hệ thống trên Ubuntu 14.04. Sau đó xcape -e 'Control_L = Escape' không hoạt động, nhưng sau khi sử dụng xcape -d tôi đã phát hiện ra rằng Caps Lock tạo mã khóa 66 và ánh xạ lại tương ứng: xcape -e '# 66 = Escape'. - Sergiy Byelozyorov ngày 4 tháng 9 năm 14 lúc 10:08

Louis:

Theo bài đăng trên blog này, có thể thực hiện việc này chỉ với xcape: setxkbmap -option 'caps: ctrl_modifier' xcape -e 'Caps_Lock = Escape' setxkbmap -option 'caps: ctrl_modifier' xcape -e 'Caps_Lock = Thoát; Control_R = Escape '- Louis Simoneau 4 tháng 8' lúc 10:06


3

cài đặt, dựng lên xcape

sudo apt-get install xcape

Thêm hai dòng trong của bạn ~/.bashrc

/usr/bin/setxkbmap -option 'caps:ctrl_modifier'⏎
/usr/bin/xcape -e 'Caps_Lock=Escape' -t 100

Lưu ý phần này -t 100, nếu bạn không đặt nó, bạn có thể nhận thấy độ trễ trong Esc nếu bạn sử dụng vim.


sudo apt-get install xcape(lỗi đánh máy)
David Shakes

1

Tôi đã xây dựng một công cụ trong C đặc biệt cho mục đích này để khắc phục nhiều vấn đề với giải pháp xcape / xmodmap :


Có cách nào để tắt "hoán đổi" Esc thành Caps không, tôi thích không có Caps nào cả và giữ cho Esc cũ và mới đều hoạt động như Escape.
dragon788


Cảm ơn, tôi sẽ phải đặt một liên kết để tự động biên dịch nó vào dotfiles của tôi. Tôi cũng có thể PR cho README.md như trên Ubuntu 16.04, nó yêu cầu libudev-dev và libevdev-dev để biên dịch.
dragon788

@ dragon788 đến với Arch (bạn thậm chí có thể thử Antergos). Tôi đã rời khỏi Ubuntu từ nhiều năm trước và sẽ không bao giờ quay trở lại, mọi thứ sẽ tốt hơn.
pepper_chico
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.