Aggiornamento dei mapping dei tasti modificatori tramite lo strumento di comando dei valori predefiniti

14

Sto provando ad automatizzare la configurazione iniziale del mio macbook, che include l'installazione di software e la modifica della configurazione di OS X per le mie esigenze.

Ho provato ad aggiornare i tasti modificatori con i valori predefiniti, il codice è il seguente:

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

Il problema sembra che anche se il pattern è cambiato, le Preferenze di Sistema non catturano l'aggiornamento, nemmeno il riavvio del computer.

C'è un modo per eseguire questa operazione in Snow Leopard?

Grazie.

    
posta The Robot 06.05.2011 - 19:31
fonte

4 risposte

11

È importante che il comando defaults utilizzi l'ID della tastiera corretto nella chiave, sembra essere: com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0

Ad esempio la tastiera interna per il mio MacBook Air utilizza: com.apple.keyboard.modifiermapping.1452-579-0 , mentre la tastiera esterna sul mio iMac utilizza com.apple.keyboard.modifiermapping.1118-219-0

Come ottenere l'ID della tastiera corretto? Sulla riga di comando puoi usare:

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

per ottenere un elenco dei tuoi dispositivi USB con i parametri rilevanti:

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

La mia ipotesi è che il terzo parametro (la parte "-0") sia un "contatore", nel caso in cui tu abbia più di una tastiera dello stesso tipo.

Quindi, per disattivare il tasto CapsLock sulla mia tastiera esterna ora posso usare:

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

E, per completezza, ecco un elenco di possibili codici chiave da utilizzare ( da Mac OS X Suggerimenti ):

  • Nessuno - -1
  • Bloc Maiusc - 0
  • Maiusc (a sinistra) - 1
  • Controllo (sinistra) - 2
  • Opzione (sinistra) - 3
  • Comando (sinistra) - 4
  • Tastierino 0 - 5
  • Guida - 6
  • Maiusc (destra) - 9
  • Controllo (a destra) - 10
  • Opzione (destra) - 11
  • Comando (destra) - 12

Aggiornamento: grazie a Lauri Ranta, ecco un comando che funziona per Bluetooth e amp; Tastiere USB:

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

che ti dà un output leggermente diverso:

+-o IOHIDKeyboard  <class IOHIDKeyboard, id 0x100000489, registered, matched, active, busy 0 (0 ms), retain 8>
  |   "Product" = "Apple Wireless Keyboard"
  |   "VendorID" = 1452
  |   "ProductID" = 570
    
risposta data 07.04.2013 - 20:33
fonte
1

Anche io non sono riuscito a ottenere defaults write (o aggiornare i file .plist) per influenzare le mie impostazioni HIDKeyboardModifierMappingSrc e HIDKeyboardModifierMappingDst in Snow Leopard .

Sto provando a "pre-compilare" il mio account Guest per supportare la mia tastiera PS2-to-USB (che apparentemente ha Option e Command scambiati). I suggerimenti di altre pagine su "disconnettiti e accedi di nuovo" don " t aiuto; "Disconnessione" dell'account Guest cancella tutte le mie modifiche.

(I hanno aggiornato con successo i file plist "com.apple.dock" e "com.apple.menuextra.clock" per personalizzare il dock e il clock a 24 ore, rispettivamente, che rende è ancora più frustrante che i Modificatori della tastiera non funzionino ...)

Ho provato a usare "dtruss -asf" per confrontare cosa sta facendo "System Preferences.app" (che apparentemente funziona) a ciò che "default" sta facendo. Più vicino riesco a capire, vedo messaggi lungo le linee di:

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

Se qualcuno ha trovato una soluzione che funziona con Snow Leopard, sarei felice di sentirlo ...

    
risposta data 01.06.2011 - 07:07
fonte
1

Il problema che sto avendo è che ogni volta che inserisco la tastiera, ottiene un ID diverso in ioreg. Tutto quello che devo fare è scambiare il comando e i tasti della mela.

Ho deciso di risolvere questo problema nel mio caso in "modo sbagliato" usando AppleScript e la GUI delle Preferenze di Sistema. È un brutto trucco, ma funziona! Il tuo chilometraggio può variare.

--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
    
risposta data 28.02.2014 - 00:35
fonte
0
  • Hai eseguito diff per verificare che stai creando questo file esattamente come farebbe l'interfaccia utente?
  • Esegui fs_usage o lsof per scoprire cos'altro viene fatto quando utilizzi l'interfaccia utente.
risposta data 07.05.2011 - 07:06
fonte

Leggi altre domande sui tag