Mavericks: ¿Cómo AGREGAR una fuente de entrada a través de plists/defaults?

Estoy tratando de automatizar mi configuración de OS X, pero estoy atascado tratando de agregar mediante programación una nueva fuente de entrada o diseño de teclado.

Por lo general, uso dos diseños: EE. UU. normal e internacional de EE. UU., por lo que lo que estoy tratando de hacer es simplemente agregar el diseño internacional de EE. UU.

Esto es lo que noté hasta ahora. Cuando agrego manualmente el diseño, veo que esta entrada se agrega a mi AppleEnabledInputSourcesclave en el com.apple.HIToolboxplist:

--- a/def0.txt
+++ b/def1.txt
@@ -17,6 +17,11 @@
                 {
             "Bundle ID" = "com.apple.PressAndHold";
             InputSourceKind = "Non Keyboard Input Method";
+        },
+                {
+            InputSourceKind = "Keyboard Layout";
+            "KeyboardLayout ID" = 15000;
+            "KeyboardLayout Name" = "USInternational-PC";
         }
     );
     AppleInputSourceHistory =     (

Obtuve esta salida haciendo defaults read com.apple.HIToolbox. Puedo confirmar la misma adición abriendo directamente ~/Library/Preferences/com.apple.HIToolbox.plist.

Así que decidí que probablemente todo lo que tenía que hacer era agregar la misma entrada y todo funcionaría. Así que revertí la adición manual (y confirmé que la entrada del plist había desaparecido) y ahora probé:

$ defaults write com.apple.HIToolbox AppleEnabledInputSources -array-add '{InputSourceKind="Keyboard Layout"; "KeyboardLayout Name"="USInternational-PC"; "KeyboardLayout ID"=15000;}'

Confirmo nuevamente a través de defaults readdiferencias que agrega la misma entrada al plist, ¡pero no funciona!

Intenté matar cfprefsde SystemUIServerincluso reiniciar, pero ninguno de estos parece funcionar.

¿Alguien tiene idea de lo que podría estar pasando aquí?

Respuestas (1)

Resulta que el formato que usé para la AppleEnabledInputSourcesentrada fue malo porque considera todo como tipo string, ¡pero KeyboardLayout IDdebe ser de tipo integer!

Entonces, la forma correcta de hacer esto sería a través de XML:

defaults write com.apple.HIToolbox AppleEnabledInputSources -array-add '<dict><key>InputSourceKind</key><string>Keyboard Layout</string><key>KeyboardLayout ID</key><integer>15000</integer><key>KeyboardLayout Name</key><string>USInternational-PC</string></dict>'

Después de ejecutar ese comando y cerrar sesión/iniciar sesión, parece que todo funciona bien.