19 votes

Mise à jour du mappage des touches de modification par l'intermédiaire de l'outil de commande par défaut

J'essaie d'automatiser la configuration initiale de mon macbook, ce qui inclut l'installation de logiciels et la modification de la configuration d'OS X selon mes besoins.

J'ai essayé de mettre à jour les touches de modification avec les valeurs par défaut, le code est le suivant :

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

Le problème semble être que, même si le modèle est modifié, les Préférences Système ne prennent pas en compte la mise à jour, même en redémarrant l'ordinateur.

Existe-t-il un moyen d'effectuer cette opération dans Snow Leopard ?

Merci.

15voto

Ilmari Karonen Points 4681

C'est important pour le defaults pour utiliser le bon "ID clavier" dans la clé, il semble que ce soit : com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0

Par exemple le clavier interne de mon Macbook Air utilise : com.apple.keyboard.modifiermapping.1452-579-0 alors que le clavier externe de mon iMac utilise la fonction com.apple.keyboard.modifiermapping.1118-219-0

Comment obtenir le "keyboard ID" correct ? En ligne de commande, vous pouvez utiliser :

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

pour obtenir une liste de vos périphériques USB avec les paramètres correspondants :

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

Je pense que le troisième paramètre (la partie "-0") est un "compteur", au cas où vous auriez plus d'un clavier du même type.

Donc, pour désactiver la touche CapsLock sur mon clavier externe, je peux maintenant utiliser :

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

Et, par souci d'exhaustivité, voici une liste des codes clés possibles à utiliser ( de Mac OS X Hints ) :

  • Aucun - -1
  • Verrouillage des majuscules - 0
  • Déplacement (gauche) - 1
  • Contrôle (gauche) - 2
  • Option (gauche) - 3
  • Commandement (gauche) - 4
  • Clavier 0 - 5
  • Aide - 6
  • Shift (droite) - 9
  • Contrôle (droite) - 10
  • Option (droite) - 11
  • Commandement (droite) - 12

Mise à jour : Grâce à Lauri Ranta, voici une commande qui fonctionne pour les claviers Bluetooth et USB :

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

ce qui donne un résultat légèrement différent :

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

2voto

Eliot Points 121

Le problème que j'ai est qu'à chaque fois que je branche mon clavier, il reçoit un ID différent dans ioreg. Tout ce que j'ai à faire est d'intervertir les touches commande et Apple.

J'ai décidé de résoudre ce problème dans mon cas de la "mauvaise manière" en utilisant AppleScript et l'interface graphique des préférences système. C'est un bidouillage moche, mais ça marche ! Votre expérience peut varier.

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

1voto

Albert Points 1977

Moi aussi, j'ai été incapable d'obtenir defaults write (ou la mise à jour des fichiers .plist) pour affecter mes HIDKeyboardModifierMappingSrc y HIDKeyboardModifierMappingDst paramètres sous Snow Leopard .

J'essaie de "pré-remplir" mon compte d'invité pour prendre en charge mon clavier PS2-to-USB (qui a apparemment interverti Option et Commande). Les suggestions des autres pages de "se déconnecter et se reconnecter" n'aident pas ; la "déconnexion" du compte d'invité efface toutes mes modifications.

(I tienen J'ai réussi à mettre à jour mes fichiers plist "com.apple.dock" et "com.apple.menuextra.clock" pour personnaliser respectivement le dock et l'horloge de 24 heures, ce qui rend encore plus frustrant le fait que les Modificateurs de clavier ne fonctionnent pas...)

J'ai essayé d'utiliser "dtruss -asf" pour comparer ce que fait "System Preferences.app" (qui apparemment fonctionne) à ce que fait "defaults". Pour autant que je sache, je vois des messages du type :

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

Si quelqu'un a trouvé une solution qui fonctionne sous Snow Leopard, je serais heureux de l'entendre...

0voto

  • Avez-vous exécuté diff pour vérifier que vous créez ce fichier exactement comme le ferait l'interface utilisateur ?
  • Exécuter fs_usage o lsof pour savoir ce qui est fait d'autre lorsque vous utilisez l'interface utilisateur.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X