La secuencia de comandos para cambiar la configuración de la tecla de función de preferencia del sistema ya no funciona en Big Sur OS11

Tengo un script simple que he usado durante años para activar y desactivar la tecla de función (fn). La casilla de verificación se encuentra en Preferencias del sistema > Teclado > Pestaña de teclado > Tercera casilla de verificación hacia abajo. Desafortunadamente, con OS11 dejó de funcionar. Ahora modifiqué el script, pero genera un mensaje de error cada vez que lo ejecuto.

Soy un novato, por lo que puede haber una forma más elegante de hacer esto que el script a continuación: es simplemente lo que he estado usando.

tell application "System Preferences"
    reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
end tell
tell application "System Events"
    tell process "System Preferences"
        click checkbox "Use F1, F2, etc. keys as standard function keys" of tab group 1 of window 1
    end tell
end tell
quit application "System Preferences"

Este es el error de índice no válido que recibo:

No se puede obtener <> 1 o la ventana 1 de <> "Preferencias del sistema" de la aplicación "Eventos del sistema".  Índice no válido.

Extrañamente, la secuencia de comandos funciona cuando elimino la línea <quit application "system prefer"> y ejecuto la secuencia de comandos desde el Editor de secuencias de comandos con las Preferencias del sistema abiertas (para poder ver lo que sucede). Cuando cierro las Preferencias del sistema y vuelvo a agregar en la última línea, <salir de las "preferencias del sistema" de la aplicación>, este es el error que aparece en el Editor de secuencias de comandos:

error "Los eventos del sistema obtuvieron un error: no se puede obtener el grupo de pestañas 1 de la ventana 1 del proceso "Preferencias del sistema". Índice no válido". número -1719 del grupo de pestañas 1 de la ventana 1 del proceso "Preferencias del sistema"

¡Cualquier ayuda o consejo es muy apreciado!

Respuestas (3)

Dependiendo de su Mac, el nombre de la casilla de verificación puede ser diferente (no me funcionó en mi Macbook Air). Usé el índice en la solución sugerida, por lo que debería funcionar en todas las Mac hasta que Apple mueva la casilla de verificación en el panel.

También para su información, la solución dejó de funcionar debido a una condición de carrera. Podría agregar un retraso adicional en su solución inicial y habría funcionado.

Aquí hay un script con índice:

tell application "System Preferences"
    reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
end tell
tell application "System Events"
    tell process "System Preferences"
        repeat until checkbox 3 of tab group 1 of window 1 exists
            delay 0.1
        end repeat
        click checkbox 3 of tab group 1 of window 1
    end tell
end tell
quit application "System Preferences"

Este código de AppleScript me funciona en Big Sur.

tell application "System Preferences"
    reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
end tell
tell application "System Events"
    tell process "System Preferences"
        repeat until checkbox "Use F1, F2, etc. keys as standard function keys on external keyboards" of tab group 1 of window "Keyboard" exists
            delay 0.1
        end repeat
        click checkbox "Use F1, F2, etc. keys as standard function keys on external keyboards" of tab group 1 of window "Keyboard"
    end tell
end tell
quit application "System Preferences"

Si esa versión arroja errores... aquí hay una versión alternativa que también funciona para mí.

tell application "System Preferences"
    reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
end tell
tell application "System Events" to tell process "System Preferences"
    repeat until checkbox 3 of tab group 1 of window "Keyboard" exists
        delay 0.1
    end repeat
    click checkbox 3 of tab group 1 of window "Keyboard"
end tell
quit application "System Preferences"
Oh, veo el problema, la marca de verificación intenta colocarse antes de que la ventana esté completamente cargada. Sin embargo, cuando pruebo esta secuencia de comandos, parece colgar la secuencia de comandos (sin marcar la casilla) y tengo que forzar la salida. ¿Algún consejo?
Cambié "Usar las teclas F1, F2, etc. como teclas de función estándar en teclados externos" al número 3 en ambos lugares para que diga: 'casilla de verificación 3 del grupo de pestañas 1 de la ventana "Teclado"'. Por alguna razón, esto parece estar funcionando. Informaré una vez que haya jugado con él un poco más.
@Nandayo Si encontró que mi respuesta es la solución o que lo ayudó a encontrar la solución correcta, le agradecería que votara o aceptara mi publicación.

Tuve problemas similares con mi secuencia de comandos de resolución de pantalla de expansión/compresión y lo solucioné refactorizando para usar Tell directamente en los grupos de pestañas. Tal vez puedas probar:

tell application "System Preferences"
    reveal anchor "keyboardTab" of pane "com.apple.preference.keyboard"
end tell
tell application "System Events"
    tell process "System Preferences"
        tell tab group 1 of window "Keyboard"
            click checkbox "Use F1, F2, etc. keys as standard function keys"
        end tell
    end tell
end tell
quit application "System Preferences"

Como referencia, mi caso fue este script que funcionó antes de Big Sur

on run {input, parameters}
    
    activate application "System Preferences"
    tell application "System Events"
        tell process "System Preferences"
            click button "Displays" of scroll area 1 of window "System Preferences"
            delay 0.5
            
            click radio button "Scaled" of radio group 1 of tab group 1 of window "LG ULTRAWIDE"
            delay 0.5
            select row 4 of table 1 of scroll area 1 of tab group 1 of window "LG ULTRAWIDE"
            
        end tell
        delay 1
        quit application "System Preferences"
    end tell
    
    return input
end run

y los cambios que tuve que hacer para que funcionara después de Big Sur

on run {input, parameters}
    
    activate application "System Preferences"
    tell application "System Events"
        tell process "System Preferences"
            click button "Displays" of scroll area 1 of window "System Preferences"
            delay 0.5
            
            tell tab group 1 of window "LG ULTRAWIDE"
                click radio button "Scaled"
                delay 0.5
                select row 4 of table 1 of scroll area 1
            end tell
        end tell
        delay 1
        quit application "System Preferences"
    end tell
    
    return input
end run
¿Por qué y cómo funciona esto?