Aggiornamento delle mappature dei tasti modificatori tramite lo strumento di comando predefinito


16

Sto cercando di automatizzare la configurazione iniziale del mio macbook, che include l'installazione di software e la modifica della configurazione di OS X in base alle mie esigenze.

Ho provato ad aggiornare le chiavi del modificatore con le impostazioni predefinite, 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 modello viene modificato, le Preferenze di Sistema non catturano l'aggiornamento, nemmeno riavviando il computer.

Esiste un modo per eseguire questa operazione in Snow Leopard?

Grazie.


usa defaults -currentHost write -g key 'value'invece. Comunque non funziona comunque.
Daniel Beck,

1
Questo ragazzo tenta qualcosa di simile e anche fallito. Lo scripting della GUI di AppleScript sarebbe un'opzione praticabile per te?
Daniel Beck,

Risposte:


13

È importante che il defaultscomando utilizzi il "ID tastiera" corretto nel tasto, sembra essere:com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0

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

Come ottenere l '"ID 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 dispositivi USB con i parametri pertinenti:

  [...]
  +-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 ( dai suggerimenti di Mac OS X ):

  • Nessuno - –1
  • Blocco maiuscole - 0
  • Maiusc (sinistra) - 1
  • Controllo (sinistra) - 2
  • Opzione (sinistra) - 3
  • Comando (a sinistra) - 4
  • Tastiera 0 - 5
  • Aiuto - 6
  • Maiusc (destra) - 9
  • Controllo (a destra) - 10
  • Opzione (destra) - 11
  • Comando (a destra) - 12

Aggiornamento: grazie a Lauri Ranta ecco un comando che funziona per le tastiere Bluetooth e 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

Evitare Non utilizzare la versione più breve del valore di default '{ HIDKeyboardModifierMappingDst = -1; HIDKeyboardModifierMappingSrc = 0; }'che si possono trovare su alcuni siti web, almeno per me il "-1" e "0" nei valori del dict vengono poi interpretati come stringhe, non interi. Ciò porta a uno stato strano in cui Preferenze mostra i tasti modificatori modificati, ma la tastiera non si comporta in questo modo.
Orangenhain,

1
ioreg -n IOHIDKeyboard -rincluderebbe anche le tastiere Bluetooth.
Lri

L'ho fatto ma non sembra avere alcun effetto. Devo riavviare qualcosa affinché funzioni?
SimonW

1
@SimonW Ho provato lo stesso. Ho scoperto che semplicemente disconnettersi e riconnettersi rende effettive le impostazioni.
Ryan Long,

Non è divertente :(
SimonW,

2

Il problema che sto riscontrando è che ogni volta che collego la mia tastiera, ottiene un ID diverso in ioreg. Tutto quello che devo fare è scambiare il comando e i tasti apple.

Ho deciso di risolverlo nel mio caso nel "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

1

Anch'io non sono stato in grado di ottenere defaults write(o aggiornare i file .plist) per influenzare le mie impostazioni HIDKeyboardModifierMappingSrc e HIDKeyboardModifierMappingDst in Snow Leopard .

Sto cercando di "precompilare" il mio account Guest per supportare la mia tastiera da PS2 a USB (che a quanto pare ha scambiato Opzione e Comando.) I suggerimenti di altre pagine per "disconnettersi e riconnettersi" non aiutano; "disconnettersi" dall'account Guest cancella tutte le mie modifiche.

(I ho aggiornato con successo il mio file plist "com.apple.menuextra.clock" "com.apple.dock" e per personalizzare il dock e l'orologio di 24 ore, rispettivamente, che rende ancora più frustrante che i modificatori della tastiera vinto' t funziona ...)

Ho provato a usare "dtruss -asf" per confrontare ciò che sta facendo "Preferenze di Sistema" (che apparentemente funziona) con ciò che sta facendo "valori predefiniti". Più vicino riesco a capire, vedo messaggi lungo le righe 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 sotto Snow Leopard, sarei felice di sentirlo ...


0
  • Hai eseguito diffper verificare che stai creando questo file esattamente come farebbe l'interfaccia utente?
  • Esegui fs_usageo lsofper scoprire cos'altro viene fatto quando si utilizza l'interfaccia utente.

fs_usageAFAICT non mostra nulla di interessante e ho verificato (con il mio comando modificato nel commento alla domanda) che il risultato si presenta come ci si aspetterebbe.
Daniel Beck,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.