33 votos

Cambiar la disposición de la pantalla en OS X/MacOS mediante programación

Periódicamente tengo que mover mi pantalla (físicamente 1 ) y esto requiere también reorganizar la disposición de mi pantalla en las Preferencias del Sistema. Hacer esto manualmente todo el tiempo es un dolor de cabeza. ¿Hay alguna forma de hacerlo mediante programación?


1 Yo trabajo en un lado de la mesa cuando lo hago en solitario, pero cuando quiero emparejarme con alguien me vuelvo al otro lado de la mesa porque tiene más espacio sin utilizar para una segunda persona. Al girar la pantalla para que esté orientada hacia el otro lado de la mesa, la pantalla pasa de estar a la derecha de mi portátil a estar a la izquierda, ya que el portátil va en un soporte de cualquier manera.

34voto

Jake Hilborn Puntos 386

Perdona por la tardanza en la respuesta. Puedes usar displayplacer para establecer perfiles para tus dos arreglos. Guarda los perfiles en un script o utiliza algo como BetterTouchTool para que una tecla de acceso rápido cambie la disposición de tu monitor.

https://github.com/jakehilborn/displayplacer

17voto

Billy Puntos 81

He descubierto cómo automatizar el cambio de pantalla utilizando un atajo de teclado con displayplacer y funciona a las mil maravillas.

Configuré una macro usando Maestro del teclado para que la disposición del escritorio se realice automáticamente mediante un atajo de teclado.

Instrucciones para configurar el acceso directo del teclado

  1. Instalar displayplacer utilizando Homebrew
  2. Utilice Keyboard Maestro y cree una macro
  3. Añade la acción Execute Shell script para cada pantalla que tengas (yo tengo 3).
  4. Abra Preferencias del Sistema > Pantallas y cambie su disposición colocando la barra de menús a la derecha en 1 pantalla (dirección de derecha a izquierda)
  5. Abra su terminal y ejecute el programa displayplacer list comando
  6. Copiar la salida inferior, por ejemplo displayplacer "id:<screenId> res:<width>x<height> hz:<num> color_depth:<num> scaling:<on/off> origin:(<x>,<y>) degree:<0/90/180/270>"
  7. Pegue la salida en su macroacción.
  8. Repita los pasos 4-7 y deténgase después de haber hecho la pantalla principal en la que mantiene su barra de menú.
  9. Configure un atajo de teclado para su macro.
  10. Ejecute su macro con su nuevo acceso directo y vea cómo se produce la magia ante sus ojos.

Consejos útiles

  1. Si tiene un problema de funcionamiento displayplacer de Keyboard Maestro, es probable que estés usando un bash diferente en tu terminal/iTerm como oh-my-zsh cuando lo instalaste usando Homebrew. Si ese es el caso, sigue estas instrucciones de mi otro post para arreglar su displayplacer referencia binaria.

  2. Aquí hay un pantalla para ver mi configuración de Keyboard Maestro con displayplacer .

  3. Es posible que tenga que ejecutar su macro una segunda vez si accidentalmente golpea su acceso directo.

10voto

user3439894 Puntos 5883

Usando mi MacBook Pro, que normalmente se encuentra a la izquierda de mi Thunderbolt Display, y mi Thunderbolt Display, lo siguiente mostrará cómo usar hsscreens y AppleScript para alternar los dos arreglos de forma programada en función de la disposición actual. El resultado final es una aplicación AppleScript que, cuando se ejecuta, simplemente alterna entre las dos disposiciones. Esta aplicación se puede ejecutar de todas las formas normales en que se puede ejecutar cualquier otra aplicación.

En la imagen de abajo, se ve el normal y volteado arreglos de la barra de pantallas y menús mostrando las relaciones de diferencia entre mi MacBook Pro y la pantalla Thunderbolt.

Screen Arrangements

Esta aplicación AppleScript, junto con el hsscreens archivo ejecutable binario, cambia de forma programada entre las dos disposiciones mostradas en la imagen anterior, desplazando la pantalla del MacBook Pro a la derecha o a la izquierda de la pantalla Thunderbolt manteniendo la barra de menús en la pantalla del MacBook Pro.

A código esto, necesitaba determinar lo que el acuerdo actual era y luego actuar en consecuencia. Para ello he utilizado hmscreens -info en un Terminal dos veces, una mientras en cada acuerdo .

Mirando la información que sale vi un dato que podía grep ya que, para el conjunto a bandera para cambiar de posición.


Salida de hmscreens -info en un disposición normal de las pantallas:

$ hmscreens -info
Screen ID: 68822100
Size: {1440, 900}
Global Position: {{0, 0}, {1440, 900}}
Color Space: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Resolution(dpi): {144, 144}
Refresh Rate: 0
Uses Quartz Extreme: YES

Screen ID: 68695180
Size: {2560, 1440}
Global Position: {{1440, -540}, {4000, 900}}
Color Space: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Resolution(dpi): {72, 72}
Refresh Rate: 0
Uses Quartz Extreme: YES

$

Salida de hmscreens -info en un disposición invertida de las pantallas:

$ hmscreens -info
Screen ID: 68822100
Size: {1440, 900}
Global Position: {{0, 0}, {1440, 900}}
Color Space: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Resolution(dpi): {144, 144}
Refresh Rate: 0
Uses Quartz Extreme: YES

Screen ID: 68695180
Size: {2560, 1440}
Global Position: {{-2560, -540}, {0, 900}}
Color Space: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Resolution(dpi): {72, 72}
Refresh Rate: 0
Uses Quartz Extreme: YES

$

Si era obvio, para mí, que necesitaba usar información de Global Position: para determinar lo que el acuerdo actual de los Displays eran. Inmediatamente vi -2560 como única entre la salida y una forma de determinar la acuerdo actual . Si yo grep n para -2560 y lo encontré entonces estaba en el disposición invertida , no el disposición normal . Así que esto es lo que utilicé para determinar el acuerdo actual y así alternar entre los dos arreglos . (Nota: -2560 no era la única cosa única, sólo es en lo que me centré primero y sentí una manera fácil de analizar la información para establecer un Bandera de cambio con).

Guardar el AppleScript código a continuación como una solicitud y coloque una copia del hmscreens archivo binario ejecutable dentro del <appname>.app/Contents/Resources carpeta. De esta manera la aplicación, por ejemplo /Applications/Toggle Displays Arrangements.app es autónomo y no depende de una ubicación externa del hmscreens archivo binario ejecutable.

Obviamente, tendrá que determinar qué grep o utilizar un método diferente para establecer el Bandera de cambio y modificar el código a continuación para satisfacer sus necesidades particulares (si es otro caso de uso o un caso de uso diferente).

AppleScript código :

set hms to (path to me as text) & "Contents:Resources:hmscreens"

set screenIDs to paragraphs of (do shell script quoted form of POSIX path of hms & " -screenIDs")
if (count of screenIDs) is greater than 1 then

    set normalOrentation to "1"
    try
        set normalOrentation to do shell script quoted form of POSIX path of hms & " -info | grep '\\-2560'"
    end try
    if normalOrentation is "1" then
        set othersPosition to "left"
    else
        set othersPosition to "right"
    end if

    set secondScreen to item 1 of screenIDs
    do shell script quoted form of POSIX path of hms & " -setMainID " & secondScreen & " -othersStartingPosition " & othersPosition

else

    tell me
        activate
        display dialog "Only one screen is attached to your computer!" buttons {"OK"} default button 1 with icon note
    end tell

end if

La siguiente imagen muestra el resaltado sintáctico del AppleScript código .

AppleScript Code

4voto

user332214 Puntos 81

Esto no es AppleScript, pero aquí hay una biblioteca de Python que interactúa con los enlaces de PyObjC que proporciona un control en profundidad de la configuración de la pantalla de Mac llamada "Display Manager". Hemos actualizado Display Manager, que es una librería Python de código abierto que puede modificar la configuración de la pantalla de un Mac individualmente o de forma automática. Gestiona de forma programada las pantallas del Mac, incluyendo la resolución de la pantalla, la tasa de refresco, la rotación, el brillo, la duplicación de pantalla y el subescaneo HDMI. Su propósito principal es permitir a los administradores de sistemas y desarrolladores configurar automáticamente cualquier número de pantallas de Mac, mediante el uso de la línea de comandos scripts y la biblioteca Display Manager Python. Se puede integrar fácilmente en Jamf Pro, Outset o Munki u otros sistemas de gestión de clientes.

Utilizamos Display Manager en nuestro entorno para múltiples casos de uso, como en nuestros sistemas de pantalla digital para girar la pantalla 90 grados y establecer exactamente el subescaneo HDMI, en los podios para establecer la duplicación de vídeo y permitir al instructor activar o desactivar rápidamente la duplicación, establecer la resolución y el brillo por defecto en los sistemas compartidos como los laboratorios de los estudiantes o los sistemas del personal/facultad y restablecer el valor por defecto después de momentos como el inicio/cierre de sesión del usuario o bajo demanda, etc.

Si está interesado en revisar el código o probarlo, consulte el siguiente repositorio de GitHub...

https://github.com/univ-of-utah-marriott-library-apple/display_manager

Por favor, háganos saber si tiene una pregunta, problemas o tiene peticiones de características.

4voto

Earl Funderburk Puntos 21

Utilicé los ejemplos anteriores para crear un simple apple script "Swap Screens".

display dialog "Swap Screens?" buttons {"Cancel", "OK"} default button "OK" cancel button "Cancel" giving up after 15

set hms to "Applications:hmscreens"
set screenIDs to paragraphs of (do shell script quoted form of POSIX path of hms & " -screenIDs")
if (count of screenIDs) is greater than 1 then

    set firstScreen to item 1 of screenIDs

    set secondScreen to item 2 of screenIDs

    set othersPosition to "right"

    do shell script quoted form of POSIX path of hms & " -setMainID " & secondScreen & " -othersStartingPosition " & othersPosition

else

    display dialog "Only See One Screen"

end if

Ha funcionado como un campeón... Puedo hacer clic en un icono y mis pantallas se alinean como quiero.

¡Que lo disfrutes! E-

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X