นี่คือภาคผนวกของคำตอบของ Steven C. Howell
ฉันมี MacBook Pro ใหม่พร้อมแป้นพิมพ์สแกนดิเนเวียน รุ่นใหม่นี้ไม่มีปุ่ม Esc ซึ่งเป็นแต้มต่อสำคัญสำหรับฉัน
ฉันค้นพบว่าสิ่งต่อไปนี้จะแปลคีย์ ((ซ้ายบนซ้ายของ 1 และคีย์แท็บด้านบน) - ซึ่งฉันคิดว่าฉันไม่เคยใช้อะไรมาก่อนเลยในวันนี้ - เพื่อผลิต Esc
hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'
ในเอกสารประกอบของ Apple (เชื่อมโยงจากคำตอบของ Steven) สิ่งนี้มีชื่อเป็น "Keyboard Non-US \ and |" (0x64)
คีย์ "ที่ไม่ใช่ของสหรัฐ" หลายตัวนั้นหายากเพราะโดยทั่วไปแล้วจะอ้างถึงคีย์ที่มีป้ายกำกับต่าง ๆ บนแป้นพิมพ์ที่คุณใช้ (ฉันค้นพบด้วยว่า "สำเนียงหลุมฝังศพและตัวหนอน" หมายถึงคีย์ระหว่างการเลื่อนซ้ายและ z ซึ่งบนคีย์บอร์ดของฉันสร้าง<
ขึ้นฉันไม่สามารถกำหนดได้ว่าคีย์ใดสอดคล้องกับ "ไม่ใช่สหรัฐอเมริกา#
และ~
" และไม่ได้ทดลองเพิ่มเติมเมื่อพบ กุญแจของฉัน) หากคุณต้องการทดลองลองใช้งานสคริปต์ในเครื่องจนกว่าคุณจะพบกุญแจที่คุณต้องการ:
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
สิ่งนี้จะวนซ้ำรหัสและเปลี่ยนแปลงทีละครั้งด้วยความหวังว่าคุณจะสามารถค้นพบผ่านการลองผิดลองถูกซึ่งเป็นกุญแจที่ไม่มีประโยชน์สำหรับคุณโดยเฉพาะ ลองพิมพ์บางสิ่งเมื่อมันขอให้คุณ - ถ้าคุณได้รับg
แทนที่จะเป็นอย่างที่คุณคาดไว้คุณจะพบรหัสกุญแจที่ถูกต้อง (เปลี่ยน0x70000000a
เป็นอย่างอื่นหากg
ไม่ใช่ตัวเลือกที่สะดวกสำหรับคุณคุณอาจต้องการตั้งค่าg
คีย์ใหม่หรือไม่) เมื่อคุณพิมพ์เสร็จให้กด Enter เพื่อดำเนินการต่อไปยังคีย์ถัดไป
สำหรับสิ่งที่คุ้มค่าคำสั่งสุดท้ายในลูปคือวิธีที่คุณปะทะUserKeyMapping
การตั้งค่าทั้งหมด:
hidutil property --set '{"UserKeyMapping":[{}]}'
เมื่อคุณเริ่มเรียกใช้hidutil property --get UserKeyMapping
มันผลิต
(null)
แต่ดูเหมือนว่าคุณไม่สามารถดึงกลับค่านี้เพื่อ zap การตั้งค่า (หรือมากกว่าก็ยอมรับ แต่ไม่สนใจอินพุตนี้)
(หากคุณไม่คุ้นเคยกับเทอร์มินัลเพียงแค่คัดลอก / วางสิ่งของจากfor
จนกว่าจะถึงพร้อมท์done
ของคุณbash$
หรือคล้ายกัน)
ตามคำถาม Stack Overflow ที่เกี่ยวข้องคุณสามารถวางคำสั่งในไฟล์สคริปต์ในโฮมไดเร็กตอรี่ของคุณและเพิ่มลงในlaunchd
การกำหนดค่าของคุณเพื่อทำการเปลี่ยนแปลงนี้แบบถาวร
ในกรณีที่ผู้อ่านบางคนไม่สะดวกที่จะทำด้วยตัวเองนี่คือสคริปต์สั้น ๆ ที่ใช้สำหรับคุณ อีกครั้งเพียงคัดลอก / วางที่พรอมต์เทอร์มินัล
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
เห็นได้ชัดว่าถ้าคุณลงเอยด้วยคีย์อื่นที่ไม่ใช่0x700000064
คุณจำเป็นต้องเปลี่ยนมันในสคริปต์หรือในไฟล์"$HOME"/bin/userkeymapping
มันจบลงด้วยการสร้างถ้าคุณวิ่งไปด้านบนแล้ว