การอัพเดตการแม็พคีย์ตัวดัดแปลงผ่านเครื่องมือคำสั่งค่าดีฟอลต์


16

ฉันกำลังพยายามตั้งค่าเริ่มต้นอัตโนมัติของ macbook ซึ่งรวมถึงการติดตั้งซอฟต์แวร์และเปลี่ยนการกำหนดค่า OS X ตามความต้องการของฉัน

ฉันพยายามอัปเดตปุ่มตัวดัดแปลงด้วยค่าเริ่มต้นรหัสมีดังนี้:

# The apple keyboard id (1452-567-0) should probably be modified in case you use other different model 
COMPUTER_UUID=`ioreg -rd1 -c IOPlatformExpertDevice | grep -E '(UUID)' | awk '{print $3}' | tr -d \"`
defaults write ~/Library/Preferences/ByHost/.GlobalPreferences.$COMPUTER_UUID com.apple.keyboard.modifiermapping.1452-567-0 '( { HIDKeyboardModifierMappingDst = 2;   HIDKeyboardModifierMappingSrc = 0; } )'

ปัญหาดูเหมือนว่าแม้ว่ารูปแบบที่มีการเปลี่ยนแปลงการตั้งค่าระบบไม่ได้จับการปรับปรุงไม่ได้รีสตาร์ทเครื่องคอมพิวเตอร์

มีวิธีการดำเนินการนี้ใน Snow Leopard หรือไม่?

ขอบคุณ


ใช้defaults -currentHost write -g key 'value'แทน ยังคงไม่ทำงานแม้ว่า
Daniel Beck

1
ผู้ชายคนนี้ลองทำสิ่งที่คล้ายกันและล้มเหลว การเขียนสคริปต์ AppleScript GUI เป็นตัวเลือกที่เหมาะสมกับคุณหรือไม่?
Daniel Beck

คำตอบ:


13

เป็นสิ่งสำคัญสำหรับdefaultsคำสั่งที่จะใช้ "keyboard ID" ที่ถูกต้องในคีย์ดูเหมือนว่า:com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0

ตัวอย่างเช่นแป้นพิมพ์ภายในสำหรับ MacBook Air ของฉันใช้: com.apple.keyboard.modifiermapping.1452-579-0ในขณะที่แป้นพิมพ์ภายนอกใน iMac ของฉันใช้com.apple.keyboard.modifiermapping.1118-219-0

วิธีรับ "รหัสแป้นพิมพ์" ที่ถูกต้อง บนบรรทัดคำสั่งคุณสามารถใช้:

ioreg -p IOUSB -c IOUSBDevice | grep -e class -e idVendor -e idProduct

เพื่อรับรายการอุปกรณ์ USB ของคุณพร้อมพารามิเตอร์ที่เกี่ยวข้อง:

  [...]
  +-o Natural® Ergonomic Keyboard 4000@fa140000  <class IOUSBDevice, id 0x100000452, registered, matched, active, busy 0 (115 ms), retain 12>
        "idProduct" = 219
        "idVendor" = 1118

ฉันเดาว่าพารามิเตอร์ที่สาม (ส่วน "-0") เป็น "ตัวนับ" ในกรณีที่คุณมีแป้นพิมพ์ประเภทเดียวกันมากกว่าหนึ่งแป้น

ดังนั้นเพื่อปิดปุ่ม CapsLock บนแป้นพิมพ์ภายนอกฉันสามารถใช้:

defaults -currentHost write -g com.apple.keyboard.modifiermapping.1118-219-0 -array-add '<dict><key>HIDKeyboardModifierMappingDst</key><integer>-1</integer><key>HIDKeyboardModifierMappingSrc</key><integer>0</integer></dict>'

และเพื่อประโยชน์ของความสมบูรณ์นี่คือรายการรหัสกุญแจที่เป็นไปได้ที่จะใช้ ( จาก Mac OS X คำแนะนำ ):

  • ไม่มี - –1
  • Caps Lock - 0
  • Shift (ซ้าย) - 1
  • ควบคุม (ซ้าย) - 2
  • ตัวเลือก (ซ้าย) - 3
  • คำสั่ง (ซ้าย) - 4
  • ปุ่มกด 0 - 5
  • ช่วยเหลือ - 6
  • Shift (ขวา) - 9
  • ควบคุม (ขวา) - 10
  • ตัวเลือก (ขวา) - 11
  • คำสั่ง (ขวา) - 12

อัปเดต:ขอบคุณ Lauri Ranta นี่คือคำสั่งที่ใช้งานได้กับแป้นพิมพ์ Bluetooth & USB:

ioreg -n IOHIDKeyboard -r | grep -e 'class IOHIDKeyboard' -e VendorID\" -e Product

ซึ่งให้ผลลัพธ์ที่แตกต่างกันเล็กน้อย:

+-o IOHIDKeyboard  <class IOHIDKeyboard, id 0x100000489, registered, matched, active, busy 0 (0 ms), retain 8>
  |   "Product" = "Apple Wireless Keyboard"
  |   "VendorID" = 1452
  |   "ProductID" = 570

ไม่ได้ใช้รุ่นสั้นของมูลค่าค่าเริ่มต้น'{ HIDKeyboardModifierMappingDst = -1; HIDKeyboardModifierMappingSrc = 0; }'ที่คุณสามารถหาในบางเว็บไซต์อย่างน้อยสำหรับฉัน "-1" และ "0" ในค่า Dict ที่มีการตีความแล้วเป็นสตริงไม่จำนวนเต็ม สิ่งนี้นำไปสู่สภาวะแปลก ๆ ที่การตั้งค่าแสดงปุ่มตัวปรับเปลี่ยนที่เปลี่ยนแปลง แต่แป้นพิมพ์ไม่ได้ทำงานอย่างนั้น
Orangenhain

1
ioreg -n IOHIDKeyboard -rก็จะรวมถึงแป้นพิมพ์บลูทู ธ
Lri

ฉันทำสิ่งนี้ แต่ดูเหมือนจะไม่มีผลใด ๆ ฉันต้องรีสตาร์ทบางอย่างเพื่อให้ทำงานได้หรือไม่
SimonW

1
@SimonW ฉันมีประสบการณ์เดียวกัน ฉันพบว่าการออกจากระบบและกลับเข้ามาอีกครั้งทำให้การตั้งค่ามีผล
Ryan Long

มันไม่สนุก :(
SimonW

2

ปัญหาที่ฉันมีคือทุกครั้งที่ฉันเสียบแป้นพิมพ์ของฉันมันจะได้รับ ID ที่แตกต่างกันใน ioreg สิ่งที่ฉันต้องทำคือสลับคำสั่งและปุ่มแอปเปิ้ล

ฉันตัดสินใจที่จะแก้ปัญหานี้ในกรณีของฉัน "ผิดทาง" โดยใช้ AppleScript และ System Preferences GUI มันแฮ็คที่น่าเกลียด แต่มันใช้งานได้! ไมล์สะสมของคุณอาจแตกต่างกันไป

--The beginning of the name of the target keyboard (to type into the drop-down selection list)
set keyboardName to "natural"

--reboot system preferences to make GUI state more predictable
tell application "System Preferences"
    quit
    delay 1
    activate
    delay 1
    activate
end tell

tell application "System Events"

    --Bring up keyboard prefs
    key code 53 --escape
    keystroke "f" using command down
    delay 0.5
    key code 53 --escape
    keystroke "keyboard"
    delay 0.5
    key code 36 --return
    delay 1

    --Open modifier keys submenu
    repeat 4 times
        keystroke tab using shift down
        --delay 0.1
    end repeat
    --delay 0.1
    keystroke space
    delay 0.1

    --Select keyboard
    keystroke space
    keystroke keyboardName
    keystroke return
    delay 0.1

    --Select "option key" drop-down
    repeat 3 times
        keystroke tab
    end repeat

    delay 0.5

    --Open drop-down and go to top
    keystroke space
    delay 0.1
    repeat 4 times
        key code 126 --up arrow
    end repeat

    --Select "command" option
    repeat 3 times
        key code 125 --down arrow
    end repeat
    delay 0.1

    keystroke return

    -- Select "command key" drop-down
    keystroke tab
    delay 0.1

    --Open drop-down and go to top
    keystroke space
    delay 0.1
    repeat 4 times
        key code 126 --up arrow
    end repeat

    --Select "command" option
    repeat 2 times
        key code 125 --down arrow
    end repeat
    delay 0.1

    keystroke return
    delay 0.1

    --Commit changes! phew.
    keystroke return
end tell

1

ฉันเกินไปได้รับไม่สามารถที่จะได้รับdefaults write(หรือปรับปรุงไฟล์ .plist) ส่งผลกระทบต่อฉันHIDKeyboardModifierMappingSrcและHIDKeyboardModifierMappingDstการตั้งค่าภายใต้เสือดาวหิมะ

ฉันกำลังพยายาม "เติมข้อมูลล่วงหน้า" บัญชี Guest ของฉันเพื่อรองรับแป้นพิมพ์ PS2-to-USB ของฉัน (ซึ่งเห็นได้ชัดว่ามีการสลับ Option และ Command) คำแนะนำของหน้าอื่น ๆ ในการ "ออกจากระบบและเข้าสู่ระบบกลับ" ไม่ช่วย "การออกจากระบบ" ของบัญชี Guest ลบการเปลี่ยนแปลงทั้งหมดของฉัน

(ฉันได้อัปเดตไฟล์ plist "com.apple.dock" และ "com.apple.menuextra.clock" ของฉันเพื่อปรับแต่งท่าเทียบเรือและนาฬิกา 24 ชั่วโมงตามลำดับซึ่งทำให้รู้สึกหงุดหงิดยิ่งขึ้นที่ตัวดัดแปลงคีย์บอร์ดชนะ ' ไม่ทำงาน ... )

ฉันได้ลองใช้ "dtruss -asf" เพื่อเปรียบเทียบสิ่งที่ "System Preferences.app" กำลังทำอยู่ (ซึ่งใช้งานได้ดี) กับสิ่งที่ "ค่าเริ่มต้น" กำลังทำอยู่ ใกล้สุดฉันนึกภาพได้ฉันเห็นข้อความตามบรรทัด:

   Foundation`+[__NSOperationInternal _observeValueForKeyPath:ofObject:changeKind:oldValue:newValue:indexes:context:]+0x151
   Foundation`NSKeyValueNotifyObserver+0x81
   Foundation`NSKeyValueDidChange+0x1ca
   Foundation`-[NSObject(NSKeyValueObservingPrivate) _changeValueForKey:usingBlock:]+0x176

หากใครคิดวิธีการแก้ปัญหาที่ทำงานภายใต้ Snow Leopard ฉันยินดีที่จะได้ยินมัน ...


0
  • คุณรันdiffเพื่อยืนยันว่าคุณกำลังสร้างไฟล์นี้อย่างที่ UI ต้องการหรือไม่
  • เรียกใช้fs_usageหรือlsofเพื่อค้นหาสิ่งที่กำลังทำอยู่เมื่อคุณใช้ UI

fs_usageไม่แสดง AFAICT ที่น่าสนใจและฉันยืนยัน (ด้วยคำสั่งที่แก้ไขแล้วในความคิดเห็นต่อคำถาม) ว่าผลลัพธ์ปรากฏขึ้นตามที่คาดหวัง
Daniel Beck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.