Làm cách nào để sắp xếp lại các phím hoặc thiết bị nhất định?


236

Tôi đang tìm cách để ánh xạ lại một số khóa nhất định trong Ubuntu.

I E

Tôi muốn thay đổi PgUpthành Homehoặc PgDownthành End.

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


kiểm tra câu trả lời của tôi ở đây . Nó không có giá trị 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

1
Bất kỳ ràng buộc nào giống như Emacs ở đây cho CTRL-P / N cho các bước đơn vị?
Léo Léopold Hertz

Vì một thời gian xmodmaplà hết hạn! để có được một thiết lập toàn hệ thống, bạn phải sử dụng xkb. Vì vậy, chỉnh sửa tệp ngôn ngữ /usr/share/X11/xkb/symbols/để thêm các thay đổi của bạn ở đó. Xem Askubfox.com/a/898462/34298
rubo77

Câu trả lời:


249

Lưu ý: Kể từ năm 2013, Ubuntu và các công cụ phái sinh không còn sử dụng nữa xmodmapmà thay vào đó là 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 các bản phát hành hiện tại.


Để ánh xạ lại các phím nhất định, bạn cần hai công cụ. Xev đầu tiên (công cụ dòng lệnh) và xmodmap thứ hai (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.

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

  2. xevsẽ xuất ra một số thông tin về phím được nhấn. Dòng thứ ba là quan trọng. Nó sẽ trông tương tự như:

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

    trong ví dụ Priornày 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 bên trong để nhận ra khóa. Bây giờ làm điều này với một khóa khác, tức là PgDowncung cấp đầ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ị đối với chúng tôi là keycode 115Next- tên của hành vi.

  3. Bây giờ khi bạn muốn trao đổi hai khóa sử dụng xmodmap.

     xmodmap -e "keycode 110 = Next"
    

    Điều này thay đổi phím với mã khóa 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 Shiftkhóa (ví dụ: bố trí bàn phím của Anh, Shift+ 2đưa ra dấu ngoặc kép) thì bạn có thể chỉ cần liệt kê lệnh phụ sau lần đầu tiên. Ví dụ: nếu bạn muốn khóa có mã 53 ánh xạ để 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 shift, bạn có thể làm:

     xmodmap -e "keycode 53 = backslash bar"
    

Thông tin thêm: Trình tự các ánh xạ là Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key. Để bỏ qua một cột sử dụng NoSymbol. Hơn 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 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 sau các lệnh trên:

xmodmap -pke >~/.Xmodmap

(nó tạo một tệp có tên .Xmodmaptrong thư mục chính của bạn ( ~))

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

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

nguồn: Ubuntu Forun

Phần thưởng:

Nếu khóa bạn đang ánh xạ lại 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 thực hiện xmodmap -pmđể có danh sách các sửa đổi, sau đó thực hiện:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

Ví dụ, giả sử rằng 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, Vì xmodmap -pmcho chúng ta biết mod2Num_Lock, những cái tên khác thu được bằng cách nhấn các phím trong xev.


3
xevkhông thể bắt được Fncác phím bấm
om-nom-nom

3
Câu trả lời được chọn không hoạt động để ánh xạ lại khóa Caps-lock cho tôi trên Ubuntu 12.10. Tôi đã có thể thực hiện việc này bằng cách đi tới Cài đặt hệ thống -> Bàn phím -> Cài đặt bố cục -> Tùy chọn, trong đó có 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

1
Nếu bạn có nhiều bàn phím được kết nối, các công cụ này có thấy sự khác biệt giữa cùng một phím trên bàn phím khác không?
stommestack

1
Thật kỳ lạ, tôi đã làm mọi thứ, nhưng keymappings của tôi vẫn thiết lập lại sau khi khởi động lại.
Costa

1
Tôi không nghĩ rằng tôi có một -eventlá cờ trong Ubuntu 12.04. Nó đưa ra một lỗi và không đề cập đến "sự kiện" trong man xev.
đẳng cấu

20

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

 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

+1 Câu trả lời unix-y nhất trong số tất cả những câu hỏi dành cho người sửa đổi (tôi đã thực hiện theo 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 Control_R, nhưng đã quên chi tiết).
rbrito

2
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

16

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

CẬP NHẬT : 'suy nghĩ lại' 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 Wiki của Cộng đồng (được chấp nhận ở trên).

Có hai cách chung để ánh xạ lại rebind một khóa.

  • cục bộ 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)
  • trên 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 các phương thức 'cục bộ cho một chương trình', đôi khi có một cách để thay đổi các phím bấm được cung cấp bởi chính ứng dụng ... ví dụ:

Firefoxcó một addon được gọi là keyconfig ... để biết một số thông tin hãy xem bài đăng MozillZine này

Hầu hết các chương trình Ubuntu đều dựa trên Gnome và có một tiện ích cụ thể để sửa đổi liên kết phím cho bất kỳ mục menu nào của các ứng dụng Gnome này ... Nó được gọi là Editable Menu Accelerator... Đây là một công cụ rất 'cảm động', 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- interfacevà chọn can_change_accels.... Sau đó, bạn có thể thay đổi các mục menu thành ảo bất cứ thứ gì bạn thích (theo chương trình / cửa sổ) ... Tôi khuyên bạn nên tắt ngay khi bạn hoàn thành những gì bạn cần ..

Nếu không, bạn có thể thiết lập các phím nóng toàn cầu. Tôi sử dụng một chương trình có tên là xbindkeys Cài đặt xbindkey và 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 thêm nó vào "Ứng dụng khởi động" (Menu chính - Tùy chọn) ... Ngoài ra (như được đề xuất bởi Stefano Palazzo) Trước đây tôi đã viết một mô tả chi tiết hơn về xbindkey trong câu trả lời về điều này trang Askubfox


+1, rất hay! Một gợi ý: Bạn nên tích hợp câu trả lời tuyệt vời của mình từ câu hỏi khác vào câu hỏ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

1
Một chút về việc gán các khóa khác có thể được xử lý bằng cách xdotoolkiểm tra trang man, 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ụ có tên là xmodmap kết hợp với một công cụ có tên là xev. Tôi không biết sự khác biệt giữa xmodmap và xbindkey là gì, nhưng điều này hoạt động khá tốt đối với tôi. Một số lời khuyên với công cụ để thích hai cái tên? Đây là một bước rất hữu ích bước hướng dẫn trong đó 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 .. Có vẻ như bạn thực sự muốn ánh xạ lại cách một khóa cụ thể được HĐH diễn giải, tức là, một cách giải thích bàn phím không chuẩn, trong khi tôi đã tham khảo một giải thích bàn phím tiêu chuẩn và đơn giản là quá tải các bài tập phím mặc định. (Tôi nghĩ những gì bạn đang theo dõi tương tự như việc hoán đổi các nút chuột trái và chuột phải) .. Vâng, có vẻ như câu trả lời của tôi là tốt cho những điều sai lầm :)
Peter.O

có, nhưng không vấn đề gì 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

9

Đây là cách tôi đã cố gắng để chuyển ánh xạ của ENTERkhóa sang SHIFTkhó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 phím bấ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".

SỬA ĐỔ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 ENTERchốt được ánh xạ tới các SHIFT_Rtrọng điểm; nhưng SHIFT_Rkhóa không được ánh xạ tới ENTERkhóa. Đi hình.


7

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

Trong trường hợp của tôi, tôi muốn ánh xạ lại Caps Lockkhóa D, vì Dkhóa của tôi bị hỏng :)

Đầu tiên tôi sử dụng dumpkey (1) để lấy mẫu cho ánh xạ, trong trường hợp của 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 vào đó, để thay đổi bản đồ để áp dụng cho Caps Lock(mã khóa 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 tóm tắt này vào bản đồ mặc định, đơn giản chỉ cần thêm vào bản tóm tắt bao gồm tệp để thiết lập bảng điều khiển

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

thiết lập giao diệ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 tóm tắt phải được hoàn thành và được tải tự động khi khởi động.


3

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

Lần đầu tiên tôi đã thử xmodmapnhưng điều đó không thể tạo ra các sự kiện sửa đổi. Vì vậy, không thể tạo một lối tắt tạo ra ví dụ Controlsự kiện.

Sau đó tôi đã thử xbindkeysvới xmacro. Đó là loại công việc, nhưng xbindkeyskhông thể nắm bắt một số kết hợp chính 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 riêng của Unity -> Phím tắt tùy chỉnh để thiết lập phím tắt của mình.

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


2

Đối với tôi AutoKey từ Trung tâm phần mềm hoạt động tốt nhất. Nó có GUI trực quan, để thêm liên kết mới, nhấp vào Mới -> Cụm từ và

  1. Thêm tên, nhấp vào OK
  2. Trong phần "Cài đặt cụm từ", đảm bảo 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 - đó là <left>(danh sách các phím đặc biệt có ở đây ).

Điều này làm việc perfekt để thiết lập Super+CSuper+Vđến Ctrl+CCtrl+V. Chỉ là giải pháp hoàn hảo khi sử dụng Ubuntu qua VirtualBox trên máy mac
Ben

Tuy nhiên, điều này không vô hiệu hóa các lệnh khác nghe các phím tắt này. Để tắt Super+Vđể "hiển thị danh sách thông báo", hãy đi tới Cài đặt -> Thiết bị -> Bàn phím và tắt nó ở đó
Ben

@Ben yup, sẽ thật tuyệt nếu nó hiển thị các ràng buộc của các ứng dụng khác, nhưng nó khá là đóng băng trên bánh. Vấn đề của tôi là không thể ánh xạ lại phím "Fn". Tôi đã quyết định dùng thử bàn phím uhk - thứ đó có thể lập trình độc lập với os, sẽ thấy nó hoạt động như thế nào.
bản ngã

0

Nếu bạn chỉ cần ánh xạ lại một khóa cho một chương trình cụ thể, tôi vừa thêm tính năng này vào hax11.

Tôi muốn thay đổi PgUpthành Homehoặc PgDownthành End.

Để thực hiện việc này với hax11, hãy mở tệp cấu hình cấu hình của chương trình trong ~/.config/hax11/profiles(ví dụ ~/.config/hax11/profiles/usr\lib\firefox\firefox) và thêm:

Enable=1
MapK112=K110
MapK117=K115
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.