Alternar "Usar todas las teclas F1, F2 como teclas estándar" a través de un script

Alterno la configuración "Usar todas las teclas F1, F2 como teclas estándar" con mucha frecuencia y me gustaría automatizarla a través de un script (o un atajo de teclado). ¿Es posible? He intentado buscar en Google los argumentos correctos defaults write ...pero sin éxito.

configuración fn


Actualización: terminé creando https://github.com/jkbrzt/macos-fn-toggle según las respuestas aquí.

Actualización II: ahora también hay, https://github.com/Pyroh/Fluor , una aplicación de barra de menú realmente agradable que le permite cambiar automáticamente el comportamiento de las teclas fn del teclado según la aplicación activa.

Respuestas (7)

tell application "System Preferences"
    reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
end tell
tell application "System Events" to tell process "System Preferences"
    click checkbox 1 of tab group 1 of window 1
end tell
quit application "System Preferences"

También podría usar defaults write -g com.apple.keyboard.fnState -bool true, pero no conozco ninguna forma de aplicar los cambios sin cerrar la sesión y volver a iniciarla.

Empaqué este script como una aplicación usando Automator para que pueda ejecutarse rápidamente desde Spotlight: github.com/jkbr/macos-fn-toggle
@jkbr Su aplicación en github es justo lo que estaba buscando. ¡Gracias!
También puede guardar un script como una aplicación desde AppleScript Editor. Simplemente pegue el script en AppleScript Editor, presione ⌘S y establezca el formato en la aplicación.
Como otra alternativa, en Automator cree un nuevo "servicio", agregue el comando Ejecutar Applescript y péguelo donde dice (* Su script va aquí *). Guarde, y luego el menú de servicios en todas las aplicaciones incluirá fn :)
En Mavericks aparece un error como: "No se permite el acceso de asistencia al Editor AppleScript". Por lo tanto, debe ir a "Seguridad y privacidad" en la pestaña Privacidad, seleccionar Accesibilidad y habilitar su aplicación para hacerlo. Deberá proporcionar la contraseña de administrador para abrir el candado.
Para referencia técnica: com.apple.keyboard.fnState se almacena en el archivo ~/Library/Preferences/.GlobalPreferences.plist

No sé sobre secuencias de comandos, pero con un poco de ingeniería inversa útil y búsqueda en Google, hice esto porque no me gustaban las cosas existentes de la GUI de AppleScript que existían:

https://github.com/nelsonjchen/fntoggle

Binario compilado (Tírelo a su RUTA o si no sabe qué es entonces /usr/local/bin/): https://github.com/nelsonjchen/fntoggle/releases

Llámelo desde cualquier lugar (ControlPlane, Automator, shetc.) ejecutando fntoggle ono fntoggle off.

Este script no requiere que se active la accesibilidad de la GUI. Tampoco requiere cerrar sesión y volver a iniciarla.

¿Esto todavía funciona en Sierra? No trabajo aquí.
@WarrenP Este problema puede ser esclarecedor. github.com/nelsonjchen/fntoggle/issues/4

Puede leer el estado actual con lo siguiente. (1 para teclas F, 0 para medios/brillo, etc.)

defaults read "Apple Global Domain" "com.apple.keyboard.fnState"

Puede escribirlo, sin embargo, no cambiará hasta que reinicie. (Intenté matar a Dock y Finder en su lugar, sin suerte)

defaults write "Apple Global Domain" "com.apple.keyboard.fnState" "1" ## F1 F2 etc
defaults write "Apple Global Domain" "com.apple.keyboard.fnState" "0" ## Brightness/Media

Sospecho que alguien con más conocimiento sobre lo que lee este archivo plist podría escribir un script para matar y reiniciar lo que sea que lea este plist, lo que debería hacer que reconozca el cambio.

Gracias, esa es la clave correcta. Sin embargo, cambiarlo directamente no parece cambiar el comportamiento.
no ayuda aunque se reinicia

En realidad, no tienes que ejecutar ninguna aplicación con Spotlight ni nada, la mejor manera, en mi opinión, es:

  1. Crear nuevo servicio en Automator
  2. Arrastrar: "Ejecutar secuencia de comandos de Apple
  3. En el "Servicio recibido seleccionado": elija ninguna entrada
  4. Pegue este código de esta otra respuesta :

    tell application "System Preferences"
    reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
    end tell
    tell application "System Events" to tell process "System Preferences"
    click checkbox 1 of tab group 1 of window 1
    end tell
    quit application "System Preferences" 
    
  5. Guardar como "tunombre"

  6. Abra Preferencias del sistema → Teclado → Accesos directos
  7. En el menú de la izquierda elige: "Servicios"
  8. A la derecha, desplácese hacia abajo hasta General y asigne a su servicio una tecla de acceso directo única, elijo cmd+shift+L

  9. ¡Eso es! No es muy rápido ni nada, pero no tienes que ejecutar ninguna aplicación o ir a Preferencias tú mismo.

Anexo: con EL Capitan, esto funciona solo cuando Automator está enfocado, de lo contrario (por ejemplo, si invoca el script a través de un atajo de teclado) obtendrá el mensaje "La acción "Ejecutar AppleScript" encontró un error".

Algunos AppleScript que podrían ayudar: Applescript para alternar las teclas F1-F11 como teclas de función - MacRumors Forums

¡Bienvenido a Ask Different! Ha publicado esto como una respuesta, que es solo para cosas que responden directamente a la pregunta formulada. Las respuestas en Ask Different deben ser algo más que un enlace. Está bien incluir un enlace, pero resúmalo o extráigalo en la respuesta. La idea es hacer que la respuesta sea independiente. Por favor, eche un vistazo a las preguntas frecuentes para obtener más información. Gracias.

He escrito una aplicación (gratuita) que hace justo lo que estás buscando. Puede descargarlo directamente desde http://www.techmasterdesign.com/fnswitch/

El código fuente está disponible aquí: http://www.techmasterdesign.com/forum/viewtopic.php?f=2&t=668

Tenga en cuenta que si desea promocionar o recomendar su propio producto/blog, existen algunas pautas para hacerlo. Seguirlos te ayudará a evitar dar la impresión de que estás enviando spam. ¿Podría editar para indicar explícitamente su afiliación? Gracias.
No estoy seguro de por qué el voto negativo si esta es una aplicación que aborda directamente el problema del OP. Una edición menor de la respuesta para indicar la afiliación definitivamente sería útil, pero no vale la pena rechazarla. +1 por lo que parece ser un buen código y contribución.
Solo hay un voto en esto, por lo que cualquiera puede borrar el -1 si cree que la respuesta es clara y útil. @Alano

Dadas todas las respuestas, apliqué la siguiente solución para Yosemite.

Usando Automator, creé una aplicación con el siguiente código:

tell application "System Preferences"
reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
end tell
tell application "System Events" to tell process "System Preferences"
click checkbox 1 of tab group 1 of window 1
end tell
quit application "System Preferences"

Guárdelo, agréguelo a Aplicaciones. Para evitar el "Editor de AppleScript no tiene acceso de asistencia permitido", vaya a Preferencias del sistema->Seguridad y privacidad->Toque de privacidad->Entrada de accesibilidad y agregue su aplicación.

Si, como yo, desea un atajo, entonces en Automator cree un nuevo Apple Script con Iniciar aplicación y seleccione su aplicación. Luego regrese a Preferencias del sistema->Teclado->Pestañas de acceso directo->Entrada de servicio y al final de la lista, asigne un acceso directo a su secuencia de comandos.