Câu hỏi Làm thế nào để tôi remap một số phím hoặc thiết bị?


Tôi đang tìm kiếm một cách để remap một số phím trong ubuntu.

I E.

Tôi muốn thay đổi PgUp đến Nhà hoặc là PgDown đến Kết thúc.

Lệnh tích hợp hoặc công cụ có tồn tại gán lại các khóa trong Ubuntu / GNOME không?


214
2018-02-05 13:20


gốc


kiểm tra câu trả lời của tôi đây. Nó không đáng sao chép và dán cùng một câu trả lời. Có lẽ nó sẽ giúp bạn. - Rahul Virpara
Bất kỳ ràng buộc như Emacs ở đây cho CTRL-P / N cho các bước đơn vị? - Léo Léopold Hertz 준영
Từ một thời gian xmodmap được depricated! để có được một thiết lập hệ thống rộng, bạn phải sử dụng xkb. Vì vậy, chỉnh sửa tệp ngôn ngữ trong /usr/share/X11/xkb/symbols/ để thêm các thay đổi của bạn ở đó. Xem askubuntu.com/a/898462/34298 - rubo77


Các câu trả lời:


Để ý: Tính đến năm 2013, Ubuntu và các dẫn xuất không còn sử dụng nữa xmodmap, nhưng thay vì sử dụng xkb. Để biết thêm thông tin, xem câu trả lời này. Câu trả lời dưới đây không còn phù hợp với bản phát hành hiện tại nữa.


Để remapping một số phím bạn cần hai công cụ. Đầu tiên xev (công cụ dòng lệnh) và thứ hai xmodmap (cũng là công cụ dòng lệnh). Cả hai nên có sẵn trong Ubuntu mà không cần cài đặt thêm chúng.

  1. Bắt đầu cửa sổ đầu cuối và chạy xev. Bây giờ nó đang hoạt động và chờ bạn bấm một phím. Sau đó nhấn phím có hành vi bạn muốn thay đổi. I E. PgUp.

  2. xev sẽ xuất ra một số thông tin về phím bấm. Dòng thứ ba là quan trọng. Nó sẽ trông giống như:

    state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
    

    trong ví dụ này Prior là tên của hành vi mà khóa được gán vào lúc này, mã khóa số là id nội bộ để nhận dạng khóa. Bây giờ, hãy thực hiện điều này bằng một khóa khác, tức là PgDown cho đầu ra này

    state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
    

    Ở đây một lần nữa phần thú vị cho chúng tôi là keycode 115 và Next - tên của hành vi.

  3. bây giờ khi bạn muốn trao đổi hai phím sử dụng xmodmap.

     xmodmap -e "keycode 110 = Next"
    

    Điều này thay đổi chìa khóa bằng mã phím 110 trên bàn phím của bạn thành hành động Next. Nó khá đơn giản.

    Lưu ý rằng nếu khóa bạn đang ánh xạ phải có ý nghĩa khác khi được sử dụng với Shift khóa (ví dụ: bố cục bàn phím tiếng Anh, Shift+2 cho dấu ngoặc kép) thì bạn có thể chỉ cần liệt kê lệnh phụ sau lệnh đầu tiên. Ví dụ: nếu bạn muốn khóa có mã 53 để ánh xạ tới dấu gạch chéo ngược bình thường, nhưng với biểu tượng thanh khi được sử dụng với ca, bạn có thể làm:

     xmodmap -e "keycode 53 = backslash bar"
    

Thông tin thêm: Trình tự của các ánh xạ này là Chìa khóa, Shift + Key, mode_switch + Khóa, chế độ_switch + Shift + Key, AltGr + Key, AltGr + Shift + Key. Để bỏ qua việc sử dụng cột NoSymbol. Hơn thế nữa, đây là một danh sách toàn diện của tất cả các từ khóa.

Lưu ý: Những thay đổi này chỉ dành cho phiên X đang hoạt động và sẽ bị mất sau khi khởi động lại. Khi bạn muốn lưu các thay đổi vĩnh viễn, bạn phải chạy các lệnh sau đây sau các lệnh sau:

xmodmap -pke >~/.Xmodmap

(nó tạo ra một tập tin có tên .Xmodmap trong thư mục chính của bạn (~))

Sau đó, bạn phải tạo một tệp có tên .xinitrc trong thư mục chính của bạn nơi bạn đặt lệnh xmodmap .Xmodmap trong.

Bây giờ bạn có thể sửa đổi .Xmodmap và chạy xmodmap .Xmodmap từ bảng điều khiển để xem các thay đổi ngay lập tức. Những thay đổi trong .Xmodmap sẽ vẫn tồn tại.

nguồn: Ubuntu Foruns

Phần thưởng:

Nếu khóa bạn đang remapping có hành vi khác nhau tùy thuộc vào trạng thái ( như cách các phím trong bàn phím số phụ thuộc vào NumLock) bạn chỉ cần làm xmodmap -pmđể có danh sách các công cụ sửa đổi và sau đó thực hiện:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

Giả sử, ví dụ, bạn muốn có một khoảng thời gian thay vì dấu phẩy trên bàn phím số (hữu ích cho hầu hết các lập trình viên), nhưng bạn muốn giữ hành vi "xóa" khi NumLock tắt.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2, bởi vì xmodmap -pm nói với chúng tôi rằng mod2 Là Num_Lock, các tên khác có được bằng cách nhấn các phím trong xev.


233
2017-12-17 18:46



xev không thể bắt được Fn nhấn phím - om-nom-nom
Tôi yêu cách bạn giải thích tất cả mọi thứ thay vì chỉ làm mờ cú pháp với những nơi để thay thế - Programming Noob
Câu trả lời được chọn không hoạt động để ánh xạ lại phím Caps-lock cho tôi trên Ubuntu 12.10. Tôi đã có thể làm điều này bằng cách vào System Settings -> Keyboard -> Layout Settings -> Options, trong đó có một danh sách các phím và hành vi thay thế. Làm việc hoàn hảo trong Unity và thiết bị đầu cuối. - Allyl Isocyanate
Lạ thật, tôi đã làm mọi thứ, nhưng keymappings của tôi vẫn được thiết lập lại sau khi khởi động lại. - Costa
Tôi không nghĩ rằng tôi có một -event gắn cờ trong Ubuntu 12.04. Nó ném một lỗi và không đề cập đến "sự kiện" trong man xev. - isomorphismes


Nếu bạn đang cố gắng di chuyển phím Shift, có một vài bước bổ sung:

 xmodmap -e "keycode 62 = Up" # Shift => Up
 xmodmap -e "keycode 111 = Shift_R" # Up => Shift
 xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
 xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
 xset r 62 # Make the new Up key autorepeat
 xset -r 111 # Prevent the new Shift key from autorepeating

18
2018-02-05 14:04



+1 Câu trả lời tối ưu nhất của tất cả những người sửa đổi (tôi đã làm như vậy, cách trở lại với iBook 2 của tôi, khi tôi muốn phím enter để có chức năng của Control_R, nhưng đã quên các chi tiết). - rbrito
Một câu trả lời quan trọng cho người dùng sử dụng bàn phím trên máy tính xách tay Lenovo - Einar Ólafsson


Tôi đã có một suy nghĩ .. Tôi nghĩ rằng bạn có thể có nghĩa là một cái gì đó hoàn toàn khác nhau bởi "remap" .. nhưng tôi sẽ để lại câu trả lời của tôi vì nó là ... (Tôi không biết làm thế nào để gán lại một chìa khóa để cư xử như người khác)

CẬP NHẬT: 'afterthought' của tôi đã được xác nhận; (Tôi đã trả lời sai câu hỏi:) ... vui lòng xem câu trả lời của Cộng đồng Wiki của NES (được chấp nhận ở trên).

Có hai cách chung để remap rebind một chìa khóa.

  • địa phương cho một chương trình cụ thể
    (một khóa có thể được sử dụng cho những thứ khác nhau trong các ứng dụng / cửa sổ khác nhau)
  • toàn cầu cho một người dùng cụ thể
    (một khóa có cùng chức năng trong tất cả các cửa sổ)

Đối với phương pháp 'cục bộ cho một chương trình', đôi khi có một cách để thay đổi keybindings được cung cấp bởi chính ứng dụng ... ví dụ.

Firefox có một addon được gọi là keyconfig ... để biết một số thông tin, hãy xem Bài viết của MozillZine 

Hầu hết các chương trình Ubuntu là Gnome dựa và có một tiện ích cụ thể để sửa đổi keybinding cho bất kỳ mục trình đơn của các ứng dụng Gnome ... Nó được gọi là Editable Menu Accelerator ... Nó là một công cụ rất "nhạy cảm", nhưng khá mạnh mẽ .. Bạn có thể kích hoạt nó bằng cách chạy gconf-editor (thông qua Terminal hoặc Alt + F2) ... điều hướng đến desktop- -gnome- -interface và chọn can_change_accels .... Sau đó bạn có thể thay đổi các mục menu thành bất kỳ thứ gì bạn thích (mỗi chương trình / cửa sổ) ... Tôi khuyên bạn nên tắt nó ngay sau khi bạn đã thực hiện những gì bạn cần ..

Nếu không, bạn có thể thiết lập phím nóng Toàn cầu. Tôi sử dụng một chương trình gọi là xbindkeys  Install xbindkeysvà cũng có một tùy chọn có sẵn thông qua Menu chính - Tùy chọn, được gọi là Keyboard Shortcuts 

Nếu bạn sử dụng xbindkeys, bạn sẽ cần phải thêm nó vào "Startup Applications" của bạn (Menu chính - Preferences) ... Ngoài ra (như đề xuất của Stefano Palazzo) Tôi đã viết một mô tả chi tiết hơn về xbindkeys trong một câu trả lời về điều này trang askubuntu


16
2018-01-27 03:04



1, rất đẹp! Một gợi ý: Bạn nên tích hợp câu trả lời tuyệt vời từ một câu hỏi khác vào cái này, cũng có thể giải thích định dạng cấu hình của xbindkeys một chút. - Stefano Palazzo♦
Các bit về việc gán các phím khác có thể được xử lý bởi xdotool, hãy xem trang người đàn ông, tôi đã sử dụng nó để giải quyết vấn đề này. - Stefano Palazzo♦
Gần đây tôi đã tìm thấy một cách tiếp cận khác với một công cụ gọi là xmodmap kết hợp với một công cụ gọi là xev. Tôi không biết những gì khác biệt giữa xmodmap và xbindkeys được, nhưng điều này hoạt động khá tốt cho tôi. một số lời khuyên với công cụ để thích của hai tên? Dưới đây là hướng dẫn từng bước rất hữu ích mô tả xmodmap và xev ubuntuforums.org/showpost.php?p=7675138&postcount=2 - NES
@NES .. Có vẻ như tôi đã giải quyết sai điểm .. Bạn dường như muốn thực sự remap cách một khóa cụ thể được giải thích bởi hệ điều hành, tức là, một cách giải thích bàn phím không chuẩn, trong khi tôi đã đề cập đến một tiêu chuẩn bàn phím-giải thích, và chỉ đơn giản là quá tải các khóa gán mặc định. (Tôi nghĩ rằng những gì bạn đang sau là tương tự như trao đổi các nút chuột trái và phải) .. Vâng có vẻ như câu trả lời của tôi là tốt cho điều sai :) - Peter.O
vâng, nhưng không sao cả. câu trả lời cũng thú vị. hướng dẫn từng bước tôi đăng liên kết ở trên là đúng cách. vì vậy tôi sẽ đăng một câu trả lời ngắn với giải pháp mà những người dùng khác có một hướng dẫn tốt. cảm ơn fred - NES


Đây là cách tôi cố gắng chuyển đổi ánh xạ của ĐI VÀO chìa khóa để SHIFT Chìa khóa (và ngược lại):

$ uname -a

BÁO CÁO:

Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux

$ which xmodmap

BÁO CÁO:

/usr/bin/xmodmap

$ which xev

BÁO CÁO:

/usr/bin/xev

$ xev

(bỏ qua năm mươi dòng tiếp theo hoặc hơn)

PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XmbLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
    state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
    state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

Điều quan trọng là dòng thứ ba của mỗi lần nhấn phím:

FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".

state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".

CHUYỂN ĐỔI BẢN ĐỒ:

$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"

TIẾT KIỆM KẾT QUẢ:

$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc

THÊM VÀO

 xmodmap ~/.Xmodmap

$ sudo reboot

Vấn đề chính là sự đảo ngược KHÔNG hoạt động. Các ĐI VÀO khóa được ánh xạ tới SHIFT_R Chìa khóa; nhưng SHIFT_R khóa không được ánh xạ tới ĐI VÀO Chìa khóa. Đi con số.


8
2018-01-20 05:30





Để thực hiện các lần remaps toàn cầu độc lập với X, bạn có thể sử dụng thiết lập bàn điều khiển (5) thay thế.

Trong trường hợp của tôi, tôi muốn remap Phím Caps Lock chìa khóa để D, kể từ của tôi D-key bị hỏng :)

Đầu tiên tôi sử dụng dumpkeys (1) để lấy mẫu để lập bản đồ, trong trường hợp D-key, bit thú vị là ánh xạ cho mã khóa 32 (trên bàn phím của tôi); Lưu ý rằng có hai khoảng trống trong mẫu grep!

$ sudo dumpkeys | grep "keycode  32" > tempfile
$ cat tempfile
keycode  32 = +d
    shift   keycode  32 = +D
    altgr   keycode  32 = +eth
    shift   altgr   keycode  32 = +ETH
    control keycode  32 = Control_d
    shift   control keycode  32 = Control_d
    altgr   control keycode  32 = Control_d
    shift   altgr   control keycode  32 = Control_d
(121 lines total...)

Để thay đổi bản đồ để áp dụng cho Phím Caps Lock (mã phím 58 trên bàn phím của tôi)

sed 's/32/58/' -i tempfile

Bây giờ nó đọc

keycode  58 = +d
    shift   keycode  58 = +D
    altgr   keycode  58 = +eth
(etc...)

Để thêm bản remap này vào bản đồ mặc định, nó chỉ cần được thêm vào bản remap bao gồm tệp cho thiết lập bàn điều khiển

sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'

thiết lập bàn điều khiển cần phải được cấu hình lại (bỏ qua các câu hỏi ưu tiên thấp với -phigh)

sudo dpkg-reconfigure console-setup -phigh

Bây giờ bản remap sẽ được hoàn thành và được tải tự động khi khởi động.


6
2017-07-28 12:15





Tôi đã dành cả ngày để cố gắng tạo lối tắt cho Ctrl+Pageup.

Tôi đã thử lần đầu tiên xmodmap nhưng điều đó không thể tạo ra các sự kiện bổ trợ. Vì vậy, không thể tạo lối tắt tạo ra ví dụ như Control biến cố.

Sau đó tôi đã cố gắng xbindkeys với xmacro. Đó là loại tác phẩm, nhưng xbindkeys không thể chụp một số tổ hợp phím trên hệ thống của tôi, chẳng hạn như Alt + ___.

Vì vậy, cuối cùng tôi đã sử dụng phím tắt của riêng Unity -> Phím tắt tùy chỉnh để thiết lập phím tắt của tôi.

Và thay vì xmacro, Tôi đã sử dụng xvkbd để tạo ra các sự kiện bàn phím, nhưng đó chỉ là một sở thích cá nhân. Cả hai xmacro và xvkbd làm việc gần như giống nhau. Một mẹo bổ sung là thêm thông số trễ vào xmacro hoặc là xvkbd để đảm bảo rằng các sự kiện không bị lạc.


3





Đối với tôi AutoKey từ Trung tâm Phần mềm làm việc tốt nhất. Nó có giao diện trực quan, để thêm mới ràng buộc click New -> Phrase và

  1. Thêm tên, bấm OK
  2. Tại phần "Cài đặt cụm từ", hãy đảm bảo rằng việc dán sử dụng được đặt thành bàn phím
  3. Thêm phím nóng mà bạn muốn sử dụng
  4. Thêm lệnh vào trường văn bản, ví dụ: để mô phỏng phím mũi tên trái - nó sẽ là <left> (danh sách các phím đặc biệt là đây).

0