Mise à jour des correspondances de touches de modification via l'outil de commande par défaut

15

J'essaie d'automatiser la configuration initiale de mon macbook, ce qui inclut l'installation de logiciels et la modification de la configuration 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 que même si le motif est modifié, les préférences système ne détectent pas la mise à jour, pas même le redémarrage de l'ordinateur.

Est-il possible d'effectuer cette opération dans Snow Leopard?

Merci.

Le robot
la source
utiliser à la defaults -currentHost write -g key 'value'place. Cela ne fonctionne toujours pas.
Daniel Beck
1
Ce gars tente quelque chose de similaire et a également échoué. Le script d'interface graphique AppleScript serait-il une option viable pour vous?
Daniel Beck

Réponses:

11

Il est important que la defaultscommande utilise le "numéro d'identification du clavier" correct dans la touche, cela semble être:com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0

Par exemple, le clavier interne de mon MacBook Air utilise:, com.apple.keyboard.modifiermapping.1452-579-0tandis que le clavier externe de mon iMac utilisecom.apple.keyboard.modifiermapping.1118-219-0

Comment obtenir le bon "ID de clavier"? Sur la 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 appropriés:

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

Je suppose que le troisième paramètre (la partie "-0") est un "compteur", dans le cas où vous avez 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 de clé possibles à utiliser (à partir des astuces Mac OS X ):

  • Aucun - -1
  • Caps Lock - 0
  • Maj (à gauche) - 1
  • Contrôle (gauche) - 2
  • Option (gauche) - 3
  • Commande (gauche) - 4
  • Clavier 0 - 5
  • Aide - 6
  • Maj (à droite) - 9
  • Contrôle (droite) - 10
  • Option (droite) - 11
  • Commande (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 vous donne une sortie légèrement différente:

+-o IOHIDKeyboard  <class IOHIDKeyboard, id 0x100000489, registered, matched, active, busy 0 (0 ms), retain 8>
  |   "Product" = "Apple Wireless Keyboard"
  |   "VendorID" = 1452
  |   "ProductID" = 570
Orangenhain
la source
N'utilisez pas la version abrégée de la valeur par défaut '{ HIDKeyboardModifierMappingDst = -1; HIDKeyboardModifierMappingSrc = 0; }'que vous pouvez trouver sur certains sites Web. Du moins pour moi, les valeurs "-1" et "0" des valeurs dict sont ensuite interprétées comme des chaînes et non comme des entiers. Cela conduit à un état étrange où Préférences affiche les touches de modification modifiées, mais le clavier ne se comporte pas de cette manière.
Orangenhain
1
ioreg -n IOHIDKeyboard -rinclurait également les claviers Bluetooth.
Lri
Je l'ai fait mais cela ne semble pas avoir d'effet. Dois-je redémarrer quelque chose pour que cela fonctionne?
SimonW
1
@ SimonW j'ai vécu la même chose. J'ai constaté que le fait de se déconnecter puis de revenir en arrière rend le réglage effectif.
Ryan Long
Ce n'est pas amusant :(
SimonW
1

Moi aussi, je n'ai pas pu obtenir defaults write(ou mettre à jour les fichiers .plist) d'affecter mes paramètres HIDKeyboardModifierMappingSrc et HIDKeyboardModifierMappingDst sous Snow Leopard .

J'essaie de "pré-renseigner" mon compte Invité pour qu'il prenne en charge mon clavier PS2-à-USB (apparemment, les options et les commandes ont été permutées.) Les suggestions d'autres pages pour "se déconnecter et se reconnecter" ne permettent pas de résoudre le problème. La "déconnexion" du compte Invité supprime toutes mes modifications.

(Je l' ai correctement mis à jour mon « com.apple.dock » et les fichiers plist « de com.apple.menuextra.clock » pour personnaliser le dock et l'horloge de 24 heures, respectivement, ce qui rend encore plus frustrant que le clavier Modificateurs gagné » t travail ...)

J'ai essayé d'utiliser "dtruss -asf" pour comparer ce que "System Preferences.app" est en train de faire (ce qui fonctionne apparemment) avec ce que "par défaut" fait. Le plus près que je peux comprendre, je vois des messages dans les lignes de:

   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 trouve une solution qui fonctionne sous Snow Leopard, je serais heureux de l'entendre ...

Dabe
la source
1

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

J'ai décidé de résoudre ce problème de la "mauvaise manière" à l'aide de AppleScript et de l'interface graphique des préférences système. C'est un bidule laid, mais ça marche! Votre kilométrage 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
Eliot
la source
0
  • Avez-vous essayé diffde vérifier que vous créez ce fichier exactement comme le ferait l'interface utilisateur?
  • Exécuter fs_usageou lsofpour savoir ce qui est fait quand vous utilisez l'interface utilisateur.

la source
fs_usagene montre rien d’AFAICT intéressant, et j’ai vérifié (avec ma commande modifiée dans le commentaire de la question) que le résultat apparaît comme on pourrait s’y attendre.
Daniel Beck