Bagaimana cara memetakan kembali kunci di macOS Sierra, mis. Alt Kanan ke Kontrol Kanan?

45

Saya dulu menggunakan Karabiner untuk memetakan ulang Alt Kanan ke Kontrol Kanan (sebagai pengguna Emacs saya menggunakan Kontrol JAUH lebih banyak dari Alt) tetapi memperbarui ke Sierra memecahkan ini. Penurunan peringkat bukanlah opsi.

Bagaimana cara saya membuat ulang kunci secara manual di Sierra? Saya secara khusus ingin memetakan kembali Alt Kanan ke Kontrol Kanan.

Steven C. Howell
sumber

Jawaban:

40

Catatan Teknis Apple TN2450 menjelaskan cara memetakan kembali kunci. Menjalankan perintah berikut akan memetakan Alt Kanan menjadi Kontrol Kanan.

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

Perhatikan bahwa perintah di atas tidak mengalihkan Alt Kanan dan Kontrol Kanan. Keduanya akan menjadi Kontrol Benar. Jika Anda memiliki MacBook, Anda tidak akan melihat ini sampai mencolokkan keyboard eksternal. Jika Anda ingin mengganti Alt Kanan dan Kontrol Kanan, Anda perlu menambahkan perintah sakelar kedua, seperti berikut ini.

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

Tabel di bagian bawah Catatan Teknis memiliki daftar nilai hex untuk setiap kunci. Untuk menggeneralisasi jawaban di atas untuk beralih tombol apa saja, Anda harus ornilai hex dari daftar itu bersama 0x700000000. Kode Python berikut menunjukkan satu cara untuk melakukan ini.

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
Steven C. Howell
sumber
Terima kasih banyak! Apakah ada cara untuk mengembalikan pemetaan ke default dengan perintah ini?
A
1
@ Cᴀʟʟᴏᴅᴀᴄɪᴛʏ untuk me-reset tombol apa saja, Anda cukup menjalankan perintah lagi dengan nilai yang utama di kedua Srcdan Dst.
Steven C. Howell
Ini kembali saat reboot. Saya dapat menjalankan kembali perintah ini pada setiap boot, tetapi saya lebih suka tidak melakukan ini. Apakah ada cara untuk membuat ini permanen?
firebush
2
@ Firebush Posting ini menyarankan menggunakan kait masuk untuk membuat perintah seperti ini terus-menerus: stackoverflow.com/a/46460200/629530
firebush
1
@ StevenC.Howell Bagaimana dengan kombinasi pengubah fungsi? Misalnya, garis miring \ di keyboard saya adalah Shift+Option+7yang ingin saya ganti dengan sesuatu yang lebih sederhana seperti Option+.yang jarang saya gunakan. Bagaimana aku melakukan itu? Terima kasih atas bantuan Anda.
Nanashi No Gombe
15

Pendekatan yang lebih umum dan ramah pengguna adalah menggunakan Karabiner-Elements , yang merupakan versi Karabiner yang bekerja di Sierra.

mikaraento
sumber
2
Pembaruan cepat di Karabiner-Elements . Ini bekerja pada macOS High Sierra 10.13.3 (17D102) Saya berhasil menukar tombol Command dan Option kanan saya.
Steve Clement
Aplikasi pihak ketiga tidak pernah "lebih umum". Mengapa ada orang yang mengacaukan sistem mereka dengan aplikasi melakukan hal-hal yang dibangun langsung ke OS?
Bachsau
1
@Bachsau lebih umum karena memungkinkan Anda melakukan banyak hal lain, misalnya mengatur kombinasi tombol, makro dan profil, atau menggunakan konfigurasi pemetaan bersama dan / atau split untuk setiap keyboard internal dan eksternal.
Janosch
@ Bachsau saya menyimpan profil yang berbeda untuk masing-masing keyboard saya, sehingga fungsinya sama. Aplikasi yang sangat bagus
AlexG
9

Ini merupakan tambahan untuk jawaban Steven C. Howell.

Saya memiliki MacBook Pro baru dengan keyboard Skandinavia. Model baru ini tidak lagi memiliki kunci Esc, yang merupakan cacat signifikan bagi saya.

Saya menemukan bahwa yang berikut ini akan menerjemahkan kunci § (kiri atas, kiri 1 dan tombol tab di atas) - yang saya pikir saya belum pernah gunakan untuk apa pun sebelum hari ini - untuk menghasilkan Esc.

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

Dalam dokumentasi Apple (ditautkan dari jawaban Steven) ini dilabeli sebagai "Keyboard Non-US \ dan |" (0x64).

Beberapa tombol "non-AS" sulit ditemukan karena biasanya merujuk pada tombol yang memiliki label berbeda pada keyboard yang Anda gunakan. (Saya juga menemukan bahwa "Aksen dan tilde Grave" mengacu pada tombol antara shift kiri dan z, yang diproduksi keyboard saya <. Saya tidak dapat menetapkan kunci mana yang sesuai dengan "Non-AS #dan ~" dan tidak bereksperimen lebih jauh setelah saya menemukan kunci saya.) Jika Anda ingin bereksperimen, coba jalankan skrip di terminal sampai Anda menemukan kunci yang Anda butuhkan:

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

Ini loop atas kode kunci dan perubahan satu per satu, dengan harapan bahwa Anda dapat menemukan melalui trial and error kunci yang tidak terlalu berguna bagi Anda. Coba ketikkan sesuatu saat diminta - jika Anda mendapatkan galih - alih apa yang Anda harapkan, Anda telah menemukan kode kunci yang tepat. (Ubah 0x70000000ake hal lain jika gbukan pilihan yang nyaman untuk Anda. Mungkin Anda ingin memetakan ulang gkunci?) Saat Anda selesai mengetik, cukup tekan Enter untuk melanjutkan ke tombol berikutnya.

Untuk apa nilainya, perintah terakhir di dalam loop adalah bagaimana Anda mengubah semua UserKeyMappingpengaturan:

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

Ketika Anda awalnya menjalankannya hidutil property --get UserKeyMappingmenghasilkan

(null)

tetapi tampaknya Anda tidak dapat mengumpan balik nilai ini untuk mengubah pengaturan (atau lebih tepatnya, menerima tetapi mengabaikan input ini).

(Jika Anda tidak terbiasa dengan Terminal, hanya copy / paste hal dari forsampai donedi Anda bash$cepat atau serupa.)

Sesuai pertanyaan Stack Overflow terkait ini, Anda dapat menempatkan perintah dalam file skrip di direktori home Anda dan menambahkannya ke launchdkonfigurasi Anda untuk membuat perubahan ini terus-menerus.

Jika beberapa pembaca tidak nyaman melakukan ini sendiri, berikut ini skrip cepat yang melakukan ini untuk Anda. Sekali lagi, cukup salin / tempel ini di Terminal prompt.

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

Tentunya jika Anda berakhir dengan beberapa kunci selain 0x700000064Anda perlu mengubahnya dalam skrip, atau dalam file "$HOME"/bin/userkeymappingitu akhirnya membuat jika Anda sudah menjalankan di atas.

tripleee
sumber
Versi sebelumnya dari jawaban ini menganjurkan penggunaan LoginHooktetapi tidak berhasil untuk saya, dan berdasarkan stackoverflow.com/a/22872222/874188 Saya beralih ke launchdpendekatan sebagai gantinya.
tripleee
Sebagai penggemar vi / vim yang bersemangat, inilah tepatnya yang saya cari. Terima kasih.
Philip Kearns
7

Jika semua yang ingin Anda lakukan adalah memetakan kembali satu tombol

Contoh: Cara Memetakan Escape Key di Mac

  1. Buka  menu Apple dan pilih "System Preferences" dan kemudian pergi ke panel preferensi "Keyboard" dan pilih tab "Keyboard"

  2. Klik tombol "Tombol Pengubah" di sudut kanan bawah

  3. Pilih tombol yang ingin Anda remap dan modifikasi untuk melakukan fungsi Escape: Caps Lock (rekomendasi kami), Control, Option, atau Command
  4. Pilih "Escape" dari daftar dropdown yang sesuai dengan kunci yang ingin Anda remap sebagai kunci Escape perangkat keras kemudian klik "OK" untuk mengatur perubahan

referensi

jasonleonhard
sumber
2
Ini hanya memberi Anda kendali atas empat kunci yang disebutkan dalam jawaban ini.
tripleee
Benar, dan sangat membantu. Jika seseorang ingin memetakan kunci tambahan pertimbangkan karabiner
jasonleonhard
Sepertinya tidak ada cara untuk menentukan kunci tertentu, seperti "benar ⌥". Yang paling spesifik yang bisa Anda dapatkan adalah sinyalnya, seperti pada "any ⌥".
Merchako
Benar, tetapi bagian baiknya adalah Anda tidak perlu menginstal apa pun itu berfungsi.
jasonleonhard
0

Jika Anda mungkin ingin mengembalikan default:

# setting it to 'null' does not work on my MBP High Sierra
hidutil property --set '{"UserKeyMapping":[]}'
clarkttfu
sumber