Atajo de teclado voltear pantalla

¿Cómo puedo crear un método abreviado de teclado que voltea mi pantalla al revés?

Sé cómo habilitar esta configuración en las Preferencias del sistema, pero quiero poder vincularla a un acceso directo.

¿Es posible hacer que el mismo método abreviado de teclado revierta la pantalla a su orientación normal?

ingrese la descripción de la imagen aquí

Solo para su información, construí un sistema macOS 10.13.3 y probé el código AppleScript de ejemplo y funciona tal como está en mi sistema. Puede volver a leer mi respuesta actualizada y ver si puede hacer que funcione en su sistema. Si por casualidad no es así, debe agregar una captura de pantalla de Preferencias del sistema> Pantallas> Pantalla para que al menos pueda ver cuál es la diferencia entre su sistema y el mío.
Bueno, es bastante obvio por qué el script no funciona para usted, ya que no hay un botón emergente "Rotación:" en la pestaña Pantalla que se muestra en la imagen que acaba de agregar al OP. Entonces, de acuerdo con la imagen que agregó, ¡girar la pantalla no es una opción disponible para usted! Dicho esto, si tiene la capacidad de rotar la pantalla, deberá agregar los detalles de su configuración de hardware y cómo está girando realmente la pantalla. De lo contrario, no hay suficiente información para proporcionar una respuesta alternativa a la que tengo, que funciona de forma predeterminada en macOS para mí, como he dicho.
@ user3439894 Puedo cmd+alt hacer clic en la opción de visualización y me muestra las opciones de rotación
Pensé que era normal para todos, nunca escuché que a nadie se le mostrara sin hacer clic en cmd alt
Bueno, para mí se muestra automáticamente, probablemente porque estoy usando una pantalla Thunderbolt. Déjame hacer algunas pruebas y me pondré en contacto contigo.
De acuerdo, miré mi compilación 10.13.3 nuevamente y debido a que el botón emergente Rotación: se muestra de manera predeterminada en mi sistema, y ​​no en el suyo, deberá modificar el código AppleScript de ejemplo proporcionado en mi respuesta para acomodar su guión. Esto significa enviar las pulsaciones de teclas necesarias para exponer la Rotación: botón emergente antes y esto también puede requerir exponer la interfaz de usuario , por lo que es posible que se deba agregar un comando después del comando . Esto también podría requerir el uso de una utilidad de terceros si fallan las acciones nativas. tell pop up button "Rotation:" ...activate reveal
Dado que, en este momento, no puedo replicar su escenario, me temo que eso es todo lo que puedo ofrecer en este momento. Haré una compilación limpia mañana y veré si hay alguna diferencia en mi sistema, sin embargo, no tengo esperanzas. Intente usar key code 58 using command downy puede ser un delay 0.25después y agregue esto antes del tell pop up button "Rotation:" ...comando.

Respuestas (6)

Escribí un programa llamado displayplacer que hace que esto sea fácil de hacer a través de un comando de terminal. Puede vincular esto a un atajo de teclado con un programa como BetterTouchTool o tal vez Automator. Funciona con todas las versiones de macOS por encima de 10.6.

Ejemplo para voltear 180:displayplacer 'id:123467890 res:1920x1200 scaling:off origin:(0,0) degree:180'

Ejemplo para voltear 0:displayplacer 'id:123467890 res:1920x1200 scaling:off origin:(0,0) degree:0'

para que idsirve
Cada pantalla tiene una identificación única. Por ejemplo, si tiene 2 monitores, especificará que uno se gira y el otro no. Tenga en cuenta que displayplacer actualmente no funciona bien cuando especifica los cambios por menos de todos los monitores conectados. Lo mejoraré pronto. Recomiendo descargar el último binario de displayplacer del repositorio (no de la pestaña de lanzamientos) y ejecutar displayplacer list. En la parte inferior de la salida, verá su "perfil" actual, que representa cómo están dispuestos actualmente sus monitores. Edita esto a tu gusto.
¡Me alegra saber que mi respuesta ayudó! Al ver esta página, ahora es la primera respuesta que se muestra.
Esta es una increíble pieza de software que puede almacenar una configuración completamente especificada en una invocación de línea de comando. Sugiere útilmente el comando para replicar la configuración actual (use displayplayer list). Me tuviste en "Essentially XRandR para macOS". :-)

Lo siguiente se probó en macOS Sierra 10.12.5 y macOS High Sierra 10.13.3 y funciona sin problemas en mi sistema.

Usando el código AppleScript de ejemplo , de mi respuesta original, guardado como una aplicación AppleScript llamada Flip Display 180 ° y agregado a Preferencias del sistema > Seguridad y privacidad > Privacidad > Accesibilidad , para permitir que procese el código , luego usé un Automator flujo de trabajo de servicio , también llamado Flip Display 180° , para abrir la aplicación AppleScript del mismo nombre, mientras asigna el siguiente método abreviado de teclado : ⇧⌃⌘R

  • Tenga en cuenta que el atajo de teclado ⇧⌃⌘F , que funcionaba en OS X 10.8.5 , estaba en conflicto con un atajo de teclado predeterminado del sistema en macOS 10.12.5 , macOS 10.13.3 y por qué lo cambié. Es posible que deba usar un método abreviado de teclado diferente y, como de costumbre, debe elegir uno que aún no esté asignado en ninguna aplicación que tenga el foco cuando se presiona para activar este flujo de trabajo del servicio Automator .

  • También ejecuté el siguiente comando , en la Terminal , para no mostrar el Dock Tile para la aplicación AppleScript en el Dock :

      defaults write '/Applications/Flip Display 180°.app/Contents/Info.plist' LSUIElement -bool yes
    

Dicho esto, si la interfaz de usuario para pantallas en Preferencias del sistema en macOS High Sierra en su sistema es diferente por alguna razón no revelada, entonces el código AppleScript de ejemplo deberá modificarse para adaptarse a las diferencias entre lo que funciona en mi sistema y el suyo. Si necesita ser modificado, me imagino que no sería tan difícil de averiguar.


Las siguientes imágenes muestran los detalles relevantes:

Preferencias del sistema > Pantallas > Pantalla , como se muestra en mi sistema:

ingrese la descripción de la imagen aquí

Aplicación AppleScript , denominada Flip Display 180° :

ingrese la descripción de la imagen aquí

Flujo de trabajo de servicio de Automator , también llamado Flip Display 180° :

Código:open -a 'Flip Display 180°'

ingrese la descripción de la imagen aquí

Preferencias del sistema > Seguridad y privacidad > Privacidad > Accesibilidad :

ingrese la descripción de la imagen aquí

Preferencias del sistema > Teclado > Accesos directos > Servicios > General > Voltear pantalla 180°

ingrese la descripción de la imagen aquí


Por el momento, dejo mi respuesta original en la parte inferior de esta respuesta, ya que funciona como se indica en OS X 10.8.6 y puede ser beneficioso para otros usuarios.

Respuesta original:

Sé que está usando macOS High Sierra y tal vez pueda usar lo que funciona para mí en OS X 10.8.6 .

El siguiente código AppleScript de ejemplo utilizado en una acción Ejecutar AppleScript en un flujo de trabajo de servicio de Automator gira la pantalla 180° cuando presiono: ⇧⌃⌘F

if running of application "System Preferences" then
    quit application "System Preferences"
    delay 1
end if

tell application "System Preferences"
    reveal anchor "displaysDisplayTab" of pane id "com.apple.preference.displays"
    delay 1
    tell application "System Events"
        tell pop up button "Rotation:" of tab group 1 of window 1 of application process "System Preferences"
            if (value) contains "Standard" then
                click
                click menu item "180°" of menu 1
                my clickConfirmButton()
            else
                click
                click menu item "Standard" of menu 1
            end if
        end tell
    end tell
    quit
end tell

on clickConfirmButton()
    set wasClicked to false
    repeat until wasClicked
        delay 0.5
        tell application "System Events"
            try
                click button "Confirm" of sheet 1 of window 1 of application process "System Preferences"
                set wasClicked to true
            end try
        end tell
    end repeat
end clickConfirmButton
  • Tenga en cuenta que es posible que sea necesario ajustar el valor de los delay comandos para su sistema y que se necesiten o no delay comandos adicionales. Ajuste los valores de y o agregue/elimine los delay comandos según corresponda.

Nota: El código AppleScript de ejemplo es solo eso y no emplea ningún otro manejo de errores además de lo que se muestra y está destinado solo a mostrar una de las muchas formas de realizar una tarea. La responsabilidad siempre recae sobre el Usuario para agregar/usar el manejo de errores apropiado según sea necesario/deseable.


Flujo de trabajo del servicio de Automator :

ingrese la descripción de la imagen aquí

Su secuencia de comandos aún no funciona para mí, "Eventos del sistema recibió un error: no se puede obtener el botón emergente \"Rotación:\" del grupo de pestañas 1 de la ventana 1 del proceso de aplicación \"Preferencias del sistema\"."
¡Gracias, el guión funciona de maravilla! Lo pegué en Better Touch Tool para activarlo con un gesto del trackpad.

Este script ha sido probado en macos 10.14 para usuarios chinos .

Si está utilizando otro idioma, modifique el nombre del botón a su idioma.

En script "LG Ultra HD"significa el nombre de su monitor, esto es útil si tiene más de 2 monitores, de lo contrario, puede reemplazar (first window whose name is "LG Ultra HD")porwindow 1

if running of application "System Preferences" then
    quit application "System Preferences"
    delay 1
end if

tell application "System Preferences"
    reveal anchor "displaysDisplayTab" of pane id "com.apple.preference.displays"
    delay 1
    tell application "System Events"
        tell pop up button "旋转:" of tab group 1 of (first window whose name is "LG Ultra HD") of application process "System Preferences"
            if (value) contains "标准" then
                click
                click menu item "270°" of menu 1
                my clickConfirmButton()
            else
                click
                click menu item "标准" of menu 1
            end if
        end tell
    end tell
    quit
end tell

on clickConfirmButton()
    set wasClicked to false
    set i to 10
    repeat until wasClicked or i ≤ 0
        delay 0.5
        tell application "System Events"
            try
                click button "确认" of sheet 1 of (first window whose name is "LG Ultra HD") of application process "System Preferences"
                set wasClicked to true
            end try
        end tell
        set i to i - 1
    end repeat
end clickConfirmButton
¿Podría darnos una pista de lo que significan esos botones en inglés? (Puede crear una cuenta adicional en su Mac, seleccionar inglés como idioma principal y verificar cuál es el texto del botón en inglés). Sería mucho más útil su respuesta.
"旋转" significa "Rotación" "标准" significa "Estándar" "确认" significa "Confirmar"

Tomé la solución de user3439894 y la modifiqué para que funcione con el mismo error que encontró theonlygusti porque también me estaba encontrando con ese problema.

El siguiente script es un truco masivo, pero la idea general es que a veces la pestaña de rotación es la ventana 1 y a veces es la ventana 2. Para resolver esto, utilicé un bloque try catch que solo probará el primero y si falla, también lo hará. prueba con el segundo. Siéntase libre de mejorar este script, pero solo quería algo que funcione.

if running of application "System Preferences" then
    quit application "System Preferences"
    delay 1
end if

tell application "System Preferences"
    reveal anchor "displaysDisplayTab" of pane id "com.apple.preference.displays"
    delay 1
    tell application "System Events"
        try
            tell pop up button "Rotation:" of tab group 1 of window 2 of application process "System Preferences"
                if (value) contains "Standard" then
                    click
                    click menu item "270°" of menu 1
                    my clickConfirmButton()
                else
                    click
                    click menu item "Standard" of menu 1
                end if
            end tell
        on error errMsg
            tell pop up button "Rotation:" of tab group 1 of window 1 of application process "System Preferences"
                if (value) contains "Standard" then
                    click
                    click menu item "270°" of menu 1
                    my clickConfirmButton()
                else
                    click
                    click menu item "Standard" of menu 1
                end if
            end tell
        end try
    end tell
    quit
end tell

on clickConfirmButton()
    set wasClicked to false
    repeat until wasClicked
        delay 0.5
        tell application "System Events"
            try
                click button "Confirm" of sheet 1 of window 1 of application process "System Preferences"
                set wasClicked to true
            end try
        end tell
    end repeat
end clickConfirmButton

Saludos por hacer el 99% del trabajo user3439894

Probado en macOS 11.3 Big Sur.

Basado en la solución de @Vxider, con elementos de menú traducidos al inglés.

Deberá cambiar ambas apariciones de "LG HDR 4K"para que coincidan con el nombre de su monitor, como se presenta en la ventana de Preferencias del sistema:

ingrese la descripción de la imagen aquí

if running of application "System Preferences" then
  quit application "System Preferences"
  delay 1
end if

tell application "System Preferences"
  reveal anchor "displaysDisplayTab" of pane id "com.apple.preference.displays"
  delay 1
  tell application "System Events"
    tell pop up button "Rotation:" of tab group 1 of (first window whose name is "LG HDR 4K") of application process "System Preferences"
      if (value) contains "Standard" then
        click
        click menu item "90°" of menu 1
        my clickConfirmButton()
      else
        click
        click menu item "Standard" of menu 1
      end if
    end tell
  end tell
  quit
end tell

on clickConfirmButton()
  set wasClicked to false
  set i to 10
  repeat until wasClicked or i ≤ 0
    delay 0.5
    tell application "System Events"
      try
        click button "Confirm" of sheet 1 of (first window whose name is "LG HDR 4K") of application process "System Preferences"
        set wasClicked to true
      end try
    end tell
    set i to i - 1
  end repeat
end clickConfirmButton

Basándome en soluciones anteriores, adapté el script a macOS Monterey. Funciona bien con mi macOS 12.3.1. Disfrútala.

if running of application "System Preferences" then
    quit application "System Preferences"
    delay 1
end if

tell application "System Preferences"
    activate
    reveal anchor "displaysDisplayTab" of pane id "com.apple.preference.displays"
    delay 1
    (*set current pane to pane id "com.apple.preference.displays"*)
    delay 1
    tell application "System Events"
        tell pop up button "Rotation:" of group 1 of window 1 of application process "System Preferences"
            if (value) contains "90°" then
                delay 1
                click
                click menu item "Standard" of menu 1
                delay 3
                display notification "Rotated to Landscape mode"
                
                (*my clickConfirmButton()*)
            else
                delay 1
                click
                click menu item "90°" of menu 1
                delay 5
                display notification "Rotated to Portrait mode"
                my clickConfirmButton()
                delay 2
            end if
        end tell
    end tell
    quit application "System Preferences"
end tell


on clickConfirmButton()
    set wasClicked to false
    set i to 10
    repeat until wasClicked or i ≤ 0
        delay 0.5
        tell application "System Events"
            try
                click button "Confirm" of sheet 1 of (first window whose name is "Displays") of application process "System Preferences"
                set wasClicked to true
            end try
        end tell
        set i to i - 1
    end repeat
end clickConfirmButton