Làm cách nào để tôi ánh xạ lại một khóa trong macOS Sierra, ví dụ: Right Alt to Right Control?


44

Tôi đã từng sử dụng Karabiner để ánh xạ lại Alt phải sang điều khiển bên phải (với tư cách là người dùng Emacs, tôi sử dụng Control MUCH nhiều hơn Alt đó) nhưng việc cập nhật lên Sierra đã phá vỡ điều này. Hạ cấp không phải là một lựa chọn.

Làm cách nào để tôi tự sắp xếp lại các phím trong Sierra? Tôi đặc biệt muốn ánh xạ lại Alt phải để kiểm soát phải.

Câu trả lời:


37

Ghi chú kỹ thuật của Apple TN2450 mô tả cách sắp xếp lại các phím. Chạy lệnh sau sẽ ánh xạ lại Alt phải để điều khiển đúng.

hidutil property --set '{"UserKeyMapping":
    [{"HIDKeyboardModifierMappingSrc":0x7000000e6,
      "HIDKeyboardModifierMappingDst":0x7000000e4}]
}'

Lưu ý rằng lệnh trên không chuyển đổi Quyền Alt và Điều khiển Phải. Cả hai sẽ được quyền kiểm soát. Nếu bạn có MacBook, bạn sẽ không nhận thấy điều này cho đến khi cắm vào bàn phím ngoài. Nếu bạn muốn chuyển Right Alt và Right Control, bạn cần thêm lệnh chuyển đổi thứ hai, như sau.

hidutil property --set '{"UserKeyMapping":
    [{"HIDKeyboardModifierMappingSrc":0x7000000e4,
      "HIDKeyboardModifierMappingDst":0x7000000e6},
     {"HIDKeyboardModifierMappingSrc":0x7000000e6,
      "HIDKeyboardModifierMappingDst":0x7000000e4}]
}'

Bảng ở dưới cùng của Ghi chú kỹ thuật có một danh sách các giá trị hex cho mỗi khóa. Để khái quát câu trả lời trên để chuyển đổi bất kỳ khóa nào, bạn phải orcùng với giá trị hex từ danh sách đó 0x700000000. Mã Python sau đây cho thấy một cách để làm điều này.

In [1]: def convert(val):
   ...:     int_val = int(val, 16)
   ...:     int_ref = 0x700000000
   ...:
   ...:     return hex(int_ref | int_val)
   ...:

In [2]: r_alt = '0xE6'

In [3]: print(convert(r_alt))
0x7000000e6

Rất vui - cảm ơn! Có cách nào để khôi phục ánh xạ về mặc định của chúng bằng lệnh này không?
Aᴄʜᴇʀᴏɴғᴀɪʟ

1
@ Cᴀʟʟᴏᴅᴀᴄɪᴛʏ để đặt lại bất kỳ khóa nào, bạn chỉ cần chạy lại lệnh với giá trị của khóa đó trong cả hai SrcDst.
Steven C. Howell

Điều này trở lại khi khởi động lại. Tôi có thể chạy lại lệnh này trên mỗi lần khởi động, nhưng tôi không muốn làm điều này. Có cách nào để làm điều này vĩnh viễn?
firebush

2
@firebush Bài đăng này đề xuất sử dụng móc đăng nhập để thực hiện các lệnh như thế này liên tục: stackoverflow.com/a/46460200/629530
firebush

1
@ StevenC.Howell Làm thế nào về sự kết hợp của các sửa đổi chức năng? Ví dụ, dấu gạch chéo ngược \ trong bàn phím của tôi là Shift+Option+7thứ tôi muốn thay thế bằng thứ đơn giản hơn Option+.mà tôi khó sử dụng. Làm thế nào để làm điều đó? Cảm ơn bạn đã giúp đỡ.
Nanashi No Gombe

15

Một cách tiếp cận chung và thân thiện với người dùng hơn là sử dụng Karabiner-Elements , đây là phiên bản của Karabiner hoạt động trên Sierra.


2
Cập nhật nhanh về Karabiner-Elements . Nó hoạt động trên macOS High Sierra 10.13.3 (17D102) Tôi đã trao đổi thành công các phím Command và Option bên phải của mình.
Steve Clement

Ứng dụng của bên thứ ba không bao giờ "chung chung" hơn. Tại sao mọi người sẽ làm lộn xộn hệ thống của họ với các ứng dụng làm những thứ được tích hợp ngay trong HĐH?
Bachsau

1
@Bachsau nói chung hơn là cho phép bạn thực hiện nhiều công việc khác, ví dụ như thiết lập các tổ hợp phím, macro và cấu hình hoặc sử dụng các cấu hình ánh xạ được chia sẻ và / hoặc chia cho mọi bàn phím bên trong và bên ngoài.
Janosch

@Bachsau Tôi giữ các cấu hình khác nhau cho mỗi bàn phím của mình, vì vậy chúng hoạt động giống nhau. Ứng dụng rất hay
AlexG

8

Đây là phần phụ lục cho câu trả lời của Steven C. Howell.

Tôi có một chiếc MacBook Pro mới với bàn phím Scandinavia. Mô hình mới này không còn có phím Esc, đây là một bất lợi đáng kể đối với tôi.

Tôi phát hiện ra rằng phần sau đây sẽ dịch phím § (phía trên bên trái, bên trái của phím 1 và trên tab) - mà tôi không nghĩ rằng mình đã từng sử dụng cho bất cứ điều gì trước ngày hôm nay - để sản xuất Esc.

hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'

Trong tài liệu của Apple (được liên kết từ câu trả lời của Steven), điều này được gắn nhãn là "Bàn phím không phải của Mỹ \ và |" (0x64).

Một số phím "không phải của Hoa Kỳ" rất khó để khám phá vì chúng thường đề cập đến các phím có nhãn khác trên bàn phím bạn đang sử dụng. (Tôi cũng phát hiện ra rằng "Dấu huyền và dấu ngã" đề cập đến chính giữa dịch trái và z, mà trên bàn phím của tôi tạo ra <. Tôi đã không thể thiết lập mà tương ứng với chìa khóa để "Non-Mỹ #~" và không thử nghiệm thêm một lần tôi thấy khóa của tôi.) Nếu bạn muốn thử nghiệm, hãy thử chạy tập lệnh trong thiết bị đầu cuối cho đến khi bạn tìm thấy khóa bạn cần:

for ((i=1;i<=128;++i)); do
    printf '0x7000000%0x\n' "$i"
    printf '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x7000000%0x,"HIDKeyboardModifierMappingDst":0x70000000a}]}' "$i" |
    xargs -0 hidutil property --set >/dev/null
    read -p "Type some stuff: "
    hidutil property --set '{"UserKeyMapping":[{}]}' >/dev/null
done

Vòng lặp này trên các mã khóa và thay đổi từng mã một lần, với hy vọng rằng bạn có thể tìm thấy thông qua bản dùng thử và lỗi một khóa không đặc biệt hữu ích cho bạn. Hãy thử gõ một cái gì đó khi nó yêu cầu bạn - nếu bạn nhận được một gthay vì những gì bạn mong đợi, bạn đã tìm đúng mã khóa. (Thay đổi 0x70000000athành thứ khác nếu gkhông phải là lựa chọn thuận tiện cho bạn. Có lẽ bạn muốn sắp xếp lại gphím?) Khi bạn nhập xong, chỉ cần nhấn Enter để chuyển sang phím tiếp theo.

Để biết giá trị của nó, lệnh cuối cùng trong vòng lặp là cách bạn hạ gục tất cả các UserKeyMappingcài đặt:

hidutil property --set '{"UserKeyMapping":[{}]}'

Khi bạn chạy ban đầu, hidutil property --get UserKeyMappingnó tạo ra

(null)

nhưng có vẻ như bạn không thể cung cấp lại giá trị này để hạ gục cài đặt (hay đúng hơn là nó chấp nhận nhưng bỏ qua đầu vào này).

(Nếu bạn không quen thuộc với Terminal, chỉ cần sao chép / dán thứ đó forcho đến khi donetại bash$dấu nhắc của bạn hoặc tương tự.)

Theo câu hỏi Stack Overflow liên quan này, bạn có thể đặt lệnh trong tệp tập lệnh trong thư mục chính của bạn và thêm nó vào launchdcấu hình của bạn để thực hiện thay đổi này liên tục.

Trong trường hợp một số độc giả không cảm thấy thoải mái khi tự mình làm điều này, đây là một kịch bản nhanh thực hiện điều này cho bạn. Một lần nữa, chỉ cần sao chép / dán này tại dấu nhắc Terminal.

mkdir -p "$HOME"/bin
printf '%s\n' '#!/bin/sh' \
    'hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}' \
    >"$HOME"/bin/userkeymapping
chmod 755 "$HOME"/bin/userkeymapping
cat<<: >"$HOME"/Library/LaunchAgents/userkeymapping.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>userkeymapping</string>
    <key>ProgramArguments</key>
    <array>
        <string>$HOME/bin/userkeymapping</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
:
launchctl load "$HOME"/Library/LaunchAgents/userkeymapping.plist

Rõ ràng nếu bạn đã kết thúc với một số khóa khác ngoài 0x700000064bạn cần thay đổi mã đó trong tập lệnh hoặc trong tệp, "$HOME"/bin/userkeymappingnó sẽ kết thúc việc tạo nếu bạn đã chạy ở trên.


Một phiên bản trước đó của câu trả lời này đã ủng hộ việc sử dụng LoginHooknhưng nó không hiệu quả với tôi và dựa trên stackoverflow.com/a/22872222/874188 tôi đã chuyển sang một launchdphương pháp thay thế.
tripleee

Là một người hâm mộ cuồng nhiệt vi / vim, đây chính xác là những gì tôi đang tìm kiếm. Cảm ơn bạn.
Philip Kearns

7

Nếu tất cả những gì bạn muốn làm là ánh xạ lại một phím duy nhất

Ví dụ: Cách Remap Escape Key trên Mac

  1. Chuyển đến menu  Apple và chọn Tùy chọn hệ thống tùy chọn và sau đó chuyển đến bảng tùy chọn Bàn phím của bàn phím và chọn tab Bàn phím bàn phím

  2. Nhấp vào nút Phím Modifier trên nút góc ở góc dưới bên phải

  3. Chọn khóa bạn muốn ánh xạ lại và sửa đổi để thực hiện chức năng Escape: Caps Lock (khuyến nghị của chúng tôi), Kiểm soát, Tùy chọn hoặc Lệnh
  4. Chọn loại Escape Escape từ danh sách thả xuống tương ứng với khóa bạn muốn ánh xạ lại dưới dạng phím Thoát phần cứng, sau đó nhấp vào OK OK để đặt thay đổi

tài liệu tham khảo


1
Điều này chỉ cho phép bạn kiểm soát bốn phím được liệt kê trong câu trả lời này.
tripleee

Chính xác, và rất hữu ích. Nếu ai đó muốn sắp xếp lại các khóa bổ sung, hãy xem xét karabiner
jasonleonhard

Dường như không có cách nào để chỉ định một khóa cụ thể, như "phải". Cụ thể nhất bạn có thể nhận được là tín hiệu, như trong "bất kỳ".
Merchako

Đúng, nhưng phần tốt là bạn không phải cài đặt bất cứ thứ gì nó chỉ hoạt động.
jasonleonhard

1

Trong trường hợp bạn có thể muốn khôi phục mặc định:

# setting it to 'null' does not work on my MBP High Sierra
hidutil property --set '{"UserKeyMapping":[]}'
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.