Memperbarui pemetaan kunci pengubah melalui alat perintah default

16

Saya mencoba untuk mengotomatiskan pengaturan awal macbook saya, yang mencakup menginstal perangkat lunak dan mengubah konfigurasi OS X untuk kebutuhan saya.

Saya telah mencoba memperbarui kunci pengubah dengan default, kodenya adalah sebagai berikut:

# 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; } )'

Masalahnya tampaknya bahwa bahkan jika pola diubah Preferensi Sistem tidak menangkap pembaruan, bahkan tidak me-restart komputer.

Apakah ada cara untuk melakukan operasi ini di Snow Leopard?

Terima kasih.

Robot
sumber
gunakan defaults -currentHost write -g key 'value'saja. Tapi tetap saja tidak berhasil.
Daniel Beck
1
Orang ini mencoba sesuatu yang serupa dan juga gagal. Apakah skrip AppleScript GUI menjadi opsi yang layak untuk Anda?
Daniel Beck

Jawaban:

13

Sangat penting bagi defaultsperintah untuk menggunakan "keyboard ID" yang benar dalam kunci, sepertinya:com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0

Misalnya keyboard internal untuk MacBook Air com.apple.keyboard.modifiermapping.1452-579-0saya gunakan:, sedangkan keyboard eksternal pada iMac saya gunakancom.apple.keyboard.modifiermapping.1118-219-0

Bagaimana cara mendapatkan "ID keyboard" yang benar? Di baris perintah Anda dapat menggunakan:

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

untuk mendapatkan daftar perangkat USB Anda dengan parameter yang relevan:

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

Dugaan saya adalah bahwa parameter ketiga (bagian "-0") adalah "penghitung", jika Anda memiliki lebih dari satu keyboard dengan tipe yang sama.

Jadi, untuk mematikan tombol CapsLock pada keyboard eksternal saya sekarang saya dapat menggunakan:

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>'

Dan, demi kelengkapan, berikut adalah daftar kode kunci yang mungkin digunakan ( dari Mac OS X Petunjuk ):

  • Tidak ada - –1
  • Caps Lock - 0
  • Shift (Kiri) - 1
  • Kontrol (Kiri) - 2
  • Opsi (Kiri) - 3
  • Command (Kiri) - 4
  • Papan tombol 0 - 5
  • Bantuan - 6
  • Shift (Kanan) - 9
  • Kontrol (Kanan) - 10
  • Opsi (Kanan) - 11
  • Command (Kanan) - 12

Pembaruan: terima kasih kepada Lauri Ranta di sini adalah perintah yang berfungsi untuk keyboard Bluetooth & USB:

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

yang memberi Anda output yang sedikit berbeda:

+-o IOHIDKeyboard  <class IOHIDKeyboard, id 0x100000489, registered, matched, active, busy 0 (0 ms), retain 8>
  |   "Product" = "Apple Wireless Keyboard"
  |   "VendorID" = 1452
  |   "ProductID" = 570
Orangenhain
sumber
Jangan tidak menggunakan versi pendek dari nilai default '{ HIDKeyboardModifierMappingDst = -1; HIDKeyboardModifierMappingSrc = 0; }'yang dapat Anda temukan di beberapa website, setidaknya untuk saya "-1" dan "0" nilai dict ini kemudian ditafsirkan sebagai string, tidak bilangan bulat. Itu mengarah ke keadaan aneh di mana Preferensi menunjukkan tombol pengubah yang diubah, tetapi keyboard tidak benar-benar berperilaku seperti itu.
Orangenhain
1
ioreg -n IOHIDKeyboard -rjuga akan menyertakan keyboard Bluetooth.
Lri
Saya melakukan ini tetapi tampaknya tidak berpengaruh. Apakah saya perlu memulai kembali sesuatu agar bisa berfungsi?
SimonW
1
@SimonW Saya mengalami hal yang sama. Saya menemukan bahwa hanya logout dan kembali lagi membuat pengaturan berlaku.
Ryan Long
Itu tidak menyenangkan :(
SimonW
2

Masalah yang saya alami adalah bahwa setiap kali saya mencolokkan keyboard, ia mendapatkan ID yang berbeda di ioreg. Yang perlu saya lakukan adalah menukar perintah dan kunci apel.

Saya memutuskan untuk menyelesaikan ini dalam kasus saya dengan "cara yang salah" menggunakan AppleScript dan System Preferences GUI. Ini hack yang jelek, tapi berhasil! Jarak tempuh Anda mungkin beragam.

--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
Eliot
sumber
1

Saya juga tidak bisa mendapatkan defaults write(atau memperbarui file .plist ) untuk mempengaruhi pengaturan HIDKeyboardModifierMappingSrc dan HIDKeyboardModifierMappingDst saya di bawah Snow Leopard .

Saya mencoba untuk "mengisi dulu" akun Guest saya untuk mendukung keyboard PS2-to-USB saya (yang ternyata memiliki Opsi dan Perintah yang ditukar.) Saran halaman lain untuk "keluar dan masuk kembali" tidak membantu; "Keluar" dari akun Tamu menghapus semua perubahan saya.

(Saya telah berhasil memperbarui file "com.apple.dock" dan "com.apple.menuextra.clock" masing-masing untuk menyesuaikan dock dan jam 24 jam, yang membuatnya semakin membuat frustasi karena Modifiers Keyboard menang '. t bekerja ...)

Saya sudah mencoba menggunakan "dtruss -asf" untuk membandingkan apa yang dilakukan "System Preferences.app" (yang tampaknya berfungsi) dengan apa yang "default" lakukan. Terdekat yang bisa saya pikirkan, saya melihat pesan di sepanjang baris:

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

Jika ada yang menemukan solusi yang bekerja di bawah Snow Leopard, saya akan senang mendengarnya ...

Dabe
sumber
0
  • Sudahkah Anda menjalankan diffuntuk memverifikasi bahwa Anda membuat file ini persis seperti UI?
  • Jalankan fs_usageatau lsofuntuk mencari tahu apa lagi yang sedang dilakukan ketika Anda menggunakan UI.

sumber
fs_usagetidak menunjukkan sesuatu yang menarik AFAICT, dan saya memverifikasi (dengan perintah saya yang dimodifikasi dalam komentar untuk pertanyaan) bahwa hasilnya muncul seperti yang diharapkan.
Daniel Beck