Cambiar la disposición de visualización en OS X mediante programación

3

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

1 Trabajo en un lado de una mesa cuando trabajo solo, pero cuando quiero emparejarme con alguien, paso al otro lado de la mesa porque tiene más espacio disponible por un segundo persona. Al voltear la pantalla para mirar hacia el otro lado de la mesa, significa que la pantalla pasa de estar a la derecha de mi computadora portátil a estar a la izquierda, ya que la computadora portátil se para en cualquier posición.     
pregunta iconoclast 15.08.2016 - 16:47

4 respuestas

7

Lo siento por la respuesta tardía. Puede usar displayplacer para establecer perfiles para ambos arreglos. Guarde los perfiles en un script o use algo como BetterTouchTool para una tecla de acceso rápido para cambiar el diseño de su monitor.

enlace

    
respondido por el Jake Hilborn 31.03.2018 - 17:49
5

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 programáticamente en función de cómo se organizan actualmente. 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, puedes ver los arreglos de normal y volteado de las pantallas y de la barra de menú que muestran las relaciones de diferencia entre mi MacBook Pro y Thunderbolt Display.

EstaaplicaciónAppleScript,juntoconelarchivoejecutablebinariohsscreens,alternaprogramáticamenteentrelosdosarreglosquesemuestranenlaimagendearriba,desplazandolapantalladelaMacBookProaladerechaolaizquierdadelapantallaThunderboltmanteniendolabarrademenúsenlaMacBookPro'sDisplay.

Paracodificaresto,necesitabadeterminarcuáleraelacuerdoactualyluegoactuarenconsecuencia.Parahaceresto,utilicéhmscreens-infoenunaTerminaldosveces,unavezencadaarreglo.

Mirandolainformaciónobtenida,viunainformaciónquepudegreppara,conelfindeestablecerunflagparaalternar.

Salidadehmscreens-infoenunadisposiciónnormaldelaspantallas:

$ 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 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í, necesitaba usar información de Global Position: para determinar cuál era la disposición actual de las pantallas. Inmediatamente vi a -2560 como único entre la salida y una forma de determinar la disposición actual . Si grep ed para -2560 y lo encontró, entonces estaba en el arreglo invertido , no en el arreglo normal . Así que esto es lo que utilicé para determinar la disposición actual y, por lo tanto, alternar entre las dos disposiciones . (Nota: -2560 no fue lo único, fue solo en lo que me enfocé primero y sentí una manera fácil de analizar la información para establecer un toggle flag con).

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

Obviamente, deberá determinar para qué grep o utilizar un método diferente para establecer el toggle flag y modificar el código a continuación para adaptarse a su particular necesidades (si no es este caso de uso o un caso de uso diferente).

AppleScript code :

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 imagen a continuación muestra el resaltado sintáctico del código de AppleScript.

    
respondido por el user3439894 16.08.2016 - 20:50
1

Utilicé los ejemplos anteriores para crear un simple script de Apple "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

Funcionó como un campeón ... Puedo hacer clic en un icono y mis pantallas se alinean como quiero que lo hagan.

¡Disfruta! E-

    
respondido por el Earl Funderburk 18.10.2018 - 18:32
0

Esto no es AppleScript, pero aquí hay una biblioteca de Python que se interconecta con los enlaces de PyObjC que proporciona un control profundo de la configuración de pantalla de Mac llamada "Administrador de pantalla". Hemos actualizado el Administrador de pantalla, que es una biblioteca de código abierto de python que puede modificar una configuración de pantalla de Mac de forma individual o automática de forma manual o automática. Administra de manera programática las pantallas de Mac, incluida la resolución de pantalla, la frecuencia de actualización, la rotación, el brillo, la duplicación de pantalla y la exploración insuficiente de HDMI. Su propósito principal es permitir que los administradores de sistemas y desarrolladores configuren automáticamente cualquier número de pantallas de Mac, mediante el uso de los scripts de línea de comandos y la biblioteca Display Manager de Python. Se puede integrar fácilmente en Jamf Pro, Outset o Munki u otros sistemas de administración de clientes.

Usamos el Administrador de pantalla en nuestro entorno para casos de uso múltiple, como en nuestros sistemas de pantalla digital, para rotar la pantalla 90 grados y configurar exactamente el subexcaneado de HDMI, en el podio para la reproducción de video y permitir que el instructor active o desactive el reflejo rápidamente. resolución predeterminada & brillo en sistemas compartidos como laboratorios de estudiantes o sistemas de personal / facultad y restablecer el valor predeterminado después de veces como inicio / cierre de sesión de usuario o bajo demanda, etc.

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

enlace

Háganos saber si tiene alguna pregunta, problema o si tiene solicitudes de funciones.

    
respondido por el user332214 17.08.2018 - 20:47

Lea otras preguntas en las etiquetas