Değiştirici anahtar eşlemelerini varsayılan komut aracıyla güncelleme


16

Yazılım yüklemeyi ve OS X yapılandırmasını gereksinimlerime değiştirmeyi içeren macbook'umun inital kurulumunu otomatikleştirmeye çalışıyorum.

Değiştirici anahtarları varsayılanlarla güncellemeye çalıştım, kod aşağıdaki gibidir:

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

Sorun, desen değiştirilse bile Sistem Tercihleri'nin bilgisayarı yeniden başlatmayacak şekilde güncelleştirmeyi yakalamaması gibi görünüyor.

Bu işlemi Snow Leopard'da gerçekleştirmenin bir yolu var mı?

Teşekkürler.


kullanın defaults -currentHost write -g key 'value'. Yine de çalışmıyor.
Daniel Beck

1
Bu adam benzer bir şey deniyor ve başarısız oldu. AppleScript GUI komut dosyaları sizin için uygun bir seçenek olabilir mi?
Daniel Beck

Yanıtlar:


13

defaultsKomutun tuşta doğru "klavye kimliğini" kullanması önemlidir , öyle görünüyor:com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0

Örneğin, MacBook Air'imin dahili klavyesi şunu kullanıyor: com.apple.keyboard.modifiermapping.1452-579-0iMac'imdeki harici klavye isecom.apple.keyboard.modifiermapping.1118-219-0

Doğru "klavye kimliği" nasıl alınır? Komut satırında şunları kullanabilirsiniz:

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

ilgili parametrelerle USB cihazlarınızın bir listesini almak için:

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

Benim tahminim, aynı türden birden fazla klavyeniz olması durumunda üçüncü parametrenin ("-0" kısmı) "sayaç" olmasıdır.

Bu nedenle, harici klavyemdeki CapsLock tuşunu kapatmak için artık şunları kullanabilirim:

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

Ve tamlık uğruna, kullanabileceğiniz olası anahtar kodlarının bir listesi ( Mac OS X İpuçları'ndan ):

  • Yok - –1
  • Büyük Harf Kilidi - 0
  • Üst Karakter (Sol) - 1
  • Kontrol (Sol) - 2
  • Seçenek (Sol) - 3
  • Komut (Sol) - 4
  • Tuş takımı 0-5
  • Yardım - 6
  • ÜstKrkt (Sağ) - 9
  • Kontrol (Sağ) - 10
  • Seçenek (Sağ) - 11
  • Komut (Sağ) - 12

Güncelleme: Lauri Ranta sayesinde Bluetooth ve USB klavyelerde çalışan bir komut:

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

Bu size biraz farklı çıktılar verir:

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

Do not varsayılan değerin daha kısa sürümünü kullanmak '{ HIDKeyboardModifierMappingDst = -1; HIDKeyboardModifierMappingSrc = 0; }'benim için en azından "-1" ve Dict değerlerine "0" ise dizeleri, değil tamsayılar olarak yorumlanır, bazı web sitelerinde bulabilir. Bu, Tercihlerin değiştirilen değiştirici tuşlarını gösterdiği garip bir duruma yol açar, ancak klavye aslında bu şekilde davranmaz.
Orangenhain

1
ioreg -n IOHIDKeyboard -rBluetooth klavyeleri de içerir.
Lri

Bunu yaptım ama bir etkisi yok gibi görünüyor. Çalışması için bir şeyi yeniden başlatmam gerekir mi?
SimonW

1
@SimonW Ben de aynı şeyi yaşadım. Sadece oturumu kapatıp tekrar açmanın ayarın etkili olmasını sağladım.
Ryan Long

Bu eğlenceli değil :(
SimonW

2

Yaşadığım sorun, klavyemi her taktığımda ioreg'de farklı bir kimlik alması. Tek yapmam gereken komutu ve elma tuşlarını değiştirmek.

AppleScript ve Sistem Tercihleri ​​GUI'sini kullanarak bunu benim durumumda "yanlış yol" olarak çözmeye karar verdim. Bu çirkin bir hack, ama işe yarıyor! Kilometreniz değişebilir.

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

Ben de Snow Leopard altında HIDKeyboardModifierMappingSrc ve HIDKeyboardModifierMappingDst ayarlarımı defaults writeetkilemek için (veya .plist dosyalarını güncelleme) yapamadım .

PS2-USB klavyemi desteklemek için Misafir hesabımı "önceden doldurmaya" çalışıyorum (görünüşe göre Seçenek ve Komut değiştirildi.) Diğer sayfaların "oturumu kapatıp tekrar oturum aç" önerileri yardım etmiyor; Konuk hesabındaki "çıkış" tüm değişiklikleri siler.

(Ben var başarıyla Klavye Düzenleyicileri 'kazandığını daha da sinir bozucu hale getiren sırasıyla yuvası ve 24 saatlik gösterimi özelleştirmek için benim "com.apple.dock" ve "com.apple.menuextra.clock" Plist dosyaları güncelleştirilmiş çalışmıyor ...)

Ben "drtuss -asf" kullanarak "Sistem Tercihleri.app" ne yapıyor (görünüşe göre çalışır) ne "varsayılan" ne yapıyor karşılaştırmak için kullanarak denedim. En yakın anlayabiliyorum, aşağıdaki satırlarda mesajlar görüyorum:

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

Kar Leoparı altında çalışan bir çözüm bulan biri varsa, bunu duymaktan mutluluk duyarım ...


0
  • Çalıştırmak mı difftam olarak UI olduğu gibi bu dosyayı oluştururken doğrulamak için?
  • Run fs_usageveya lsofsiz UI kullandığınızda yapılıyor başka ne öğrenmek.

fs_usageilginç bir AFAICT göstermez ve sonucun beklendiği gibi göründüğünü (soruya yapılan yorumda değiştirilmiş komutumla) doğruladım.
Daniel Beck
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.