Hoán đổi <esc> và <caps lock> theo cách vẫn tồn tại với bàn phím ngoài


8

Tôi có một tệp có tên ~ / .speedswapper chứa các mục sau:

! Swap caps lock and escape
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock

... Khi tôi chạy xmodmap ~/.speedswapper, cái này sẽ chuyển escCaps Lockphím. Tôi có dòng này trong ~ / .profile của mình, để bất cứ khi nào tôi đăng nhập các khóa này đều được chuyển đổi.

Tuy nhiên , nếu tôi cắm vào bàn phím USB bên ngoài, cài đặt này dường như không tồn tại. Bàn phím máy tính xách tay của tôi hoạt động hoàn toàn tốt, nhưng tôi phải chạy lại lệnh để bàn phím ngoài chuyển đổi hai phím. May mắn thay, làm như vậy dường như không ảnh hưởng đến bàn phím máy tính xách tay của tôi - chúng dường như đồng bộ hóa.

Một giải pháp sẽ là tìm cách chạy lệnh xmodmap đó bất cứ khi nào cắm bàn phím ngoài, nhưng tôi sẽ mở một giải pháp gõ phím khác, nếu nó mạnh hơn. HĐH là Ubuntu 13.04.

Đưa ra nhận xét của người mới, có vẻ như điều này có thể đạt được bằng cách viết quy tắc udev - Tôi nghĩ rằng tôi phải sử dụng tùy chọn RUN và nó sẽ được kích hoạt trên / dev / hidraw0 hoặc / dev / hidraw1, đó là các thiết bị xuất hiện khi tôi cắm bàn phím vào ... nhưng tôi vẫn đang cố gắng xoay quanh khái niệm này, vì vậy tôi đánh giá cao bất kỳ sự giúp đỡ nào từ những người biết họ đang làm gì với udev.


Nhìn vào việc viết các quy tắc udev cho việc này.
justbrowsing

Câu trả lời:


3

Vì bạn có lệnh này ~/.profile, nên nó sẽ chỉ được thực thi một lần, khi bạn đăng nhập. Một giải pháp không phải là rất thanh lịch, đó là đặt lệnh vào ~/.bashrcthay vì vậy nó sẽ được chạy mỗi khi bạn mở terminal.

Một giải pháp tốt hơn sẽ là xác định udevquy tắc sẽ thực thi xmodmapkhi cắm bàn phím USB của bạn (Tôi đang sử dụng các giá trị được trả về cho bàn phím USB của mình, bạn sẽ cần chỉnh sửa giải pháp này cho phù hợp với mình):

  1. Nhận thông tin chi tiết về bàn phím USB của bạn. Chạy lệnh này với bàn phím được cắm vào:

    $ /lib/udev/findkeyboards | grep USB
    USB keyboard: input/event6
    
  2. Để viết udevcác quy tắc, bạn cần biết những gì họ nên phù hợp với. Bạn có thể nhận được rằng bằng cách tìm kiếm đầu ra của udevadm info --export-dbcho event6nhập cảnh, hoặc chỉ phân tích nó trực tiếp như sau:

    udevadm info --export-db | perl -ne 'BEGIN{$/="\n\n"}print if /event6/'
    

    Điều đó trả về một số dòng văn bản bao gồm cả những dòng mà chúng ta sẽ sử dụng:

    E: ID_MODEL_ID=0002
    [...]
    E: ID_VENDOR_ID=1c4f
    
  3. udevtrở nên phức tạp khi sử dụng các chương trình X như thế xmodmap, tôi thậm chí không thể làm cho nó hoạt động khi xuất $DISPLAY$XAUTHORITY. Dù sao, tôi không thể làm cho nó hoạt động với phương pháp của bạn, vì vậy giải pháp của tôi sử dụng keymapthay thế. Trước tiên, bạn sẽ cần tìm ra các mã khóa EscCaps Lock, bạn có thể làm điều này bằng cách chạy

    sudo /lib/udev/keymap -i input/event6
    

    và sau đó nhấn các phím có liên quan. Trên hệ thống của tôi, điều này trả về:

    scan code: 0x70029   key code: esc
    scan code: 0x70039   key code: capslock
    
  4. Tạo quy tắc sơ đồ bàn phím mới chứa các dòng này:

    0x70029 capslock
    0x70039 esc
    

    và lưu nó dưới dạng /lib/udev/keymaps/speedswap.

  5. Xác định một udevquy tắc mới . Tạo một tệp được gọi /etc/udev/rules.d/95-speedswap.rulesvà thêm các dòng này vào nó:

    ACTION=="add", 
    SUBSYSTEM=="input", 
    ATTRS{idVendor}=="1c4f", 
    ATTRS{idProduct}=="0002", 
    RUN+="keymap $name speedswap"
    

Điều đó sẽ làm điều đó, ít nhất là trên hệ thống của tôi, cắm USB bên ngoài khiến tôi Eschành động như thế Caps Lockngược lại .


Điều này có vẻ tốt và tôi sẽ thử nó vào ngày mai hoặc ngày mốt. Tôi đã hy vọng cho một cách không thể tin được bằng bàn phím để làm điều này, nhưng đó là một điều 'nó sẽ gọn gàng' hơn là một nhu cầu thực sự .
evilsoup

@evilsoup bạn sẽ có thể đưa ra một quy tắc tổng quát hơn, thử udevadm info --export-dbvới một vài bàn phím và xem họ có điểm chung. Có lẽ ID_MODEL=USB_Keykoardhoặc ID_USB_DRIVER=usbhidnhưng điều đó cũng có thể kích hoạt quy tắc với thiết bị sai. Tùy bạn
terdon
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.