Modifica la disposizione del display in OS X a livello di programmazione

3

Periodicamente devo spostare il mio display (fisicamente 1 ) e ciò richiede anche la riorganizzazione del mio Preferenze di Sistema. Fare questo sempre tutto il tempo è un dolore al collo. C'è un modo per farlo a livello di programmazione?

1 Lavoro su un lato di un tavolo quando lavoro da solo, ma quando voglio accoppiare qualcuno sfoglia l'altro lato del tavolo perché ha più spazio inutilizzato disponibile per un secondo persona. Sfogliando lo schermo in modo da trovarsi di fronte all'altro lato del tavolo, il display passa dall'essere a destra del mio portatile a quello a sinistra, dal momento che il laptop si ferma su entrambi i lati.     
posta iconoclast 15.08.2016 - 16:47
fonte

4 risposte

7

Ci scusiamo per la risposta tardiva. Puoi usare displayplacer per impostare i profili per entrambi i tuoi arrangiamenti. Salva i profili in uno script o usa qualcosa come BetterTouchTool per un tasto di scelta rapida per modificare il layout del monitor.

link

    
risposta data 31.03.2018 - 17:49
fonte
5

Usando il mio MacBook Pro, che normalmente si trova a sinistra del mio display Thunderbolt, e il mio display Thunderbolt, quanto segue mostrerà come usare hsscreens e AppleScript per alternare le due disposizioni a livello di codice in base a come è attualmente organizzato. Il risultato finale è un'applicazione AppleScript che, quando viene eseguita, alterna semplicemente avanti e indietro tra i due arrangiamenti. Questa app può essere eseguita in tutti i modi normali in cui è possibile eseguire qualsiasi altra applicazione.

Nell'immagine sottostante, puoi vedere le disposizioni normale e capovolte delle barre dei display e dei menu che mostrano le relazioni di differenza tra il mio MacBook Pro e il display Thunderbolt.

QuestaapplicazioneAppleScript,insiemealfileeseguibilebinariohsscreens,commutaalivellodiprogrammazionetraleduedisposizionimostratenell'immaginesopra,spostandoloschermodiMacBookProadestraoasinistradeldisplayThunderboltmantenendolabarradeimenusulMacBookPro'sDisplay.

Percodice,avevobisognodideterminarequalefosseladisposizionecorrenteequindiagirediconseguenza.Perfarequestohousatohmscreens-infoinunterminaleduevolte,unavoltamentreinogniaccordo.

Guardandoleinformazioniemessehovistoun'informazionechepotevogrepper,perimpostareunflagdaattivare.

Outputdihmscreens-infoinunadisposizionenormaledeidisplay:

$ 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 $

Output di hmscreens -info in un arrangiamento capovolto dei display:

$ 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

$

Se era ovvio, per me, avevo bisogno di usare le informazioni da Global Position: per determinare quale fosse la disposizione corrente dei Display. Ho visto immediatamente -2560 come univoco tra l'output e un modo per determinare la disposizione corrente . Se ho grep ed per -2560 e l'ho trovato, mi trovavo nella disposizione capovolto , non nella disposizione normale . Quindi questo è quello che ho usato per determinare la disposizione corrente e quindi passare tra i due arrangiamenti . (Nota: -2560 non era l'unica cosa unica, è solo ciò su cui mi sono concentrato inizialmente e ho sentito un modo semplice per analizzare le informazioni per impostare un toggle flag con.)

Salva il codice AppleScript sotto come un'applicazione e posiziona una copia del file eseguibile binario hmscreens all'interno della cartella <appname>.app/Contents/Resources . In questo modo l'app, ad es. /Applications/Toggle Displays Arrangements.app è autonomo e non dipende da una posizione esterna del file eseguibile binario hmscreens .

Ovviamente dovrai determinare cosa fare a grep o usare un metodo diverso per impostare il toggle flag e modificare il codice di seguito di conseguenza per suite tua particolare bisogni (se diverso da questo caso d'uso o da un caso d'uso diverso).

Codice AppleScript :

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

L'immagine sottostante mostra l'evidenziazione sintattica del codice di AppleScript.

    
risposta data 16.08.2016 - 20:50
fonte
1

Ho usato gli esempi sopra per creare un semplice script 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

Ha funzionato come un campione ... Posso fare clic su un'icona e le mie schermate si allineano proprio come voglio.

Buon divertimento! E -

    
risposta data 18.10.2018 - 18:32
fonte
0

Questo non è AppleScript, ma qui c'è una libreria python che si interfaccia con i binding PyObjC che fornisce un controllo approfondito delle impostazioni del display di Mac chiamato "Display Manager". Abbiamo aggiornato Display Manager, che è una libreria Python open source che può modificare manualmente o automaticamente una singola o una flotta di impostazioni di visualizzazione di Mac. Gestisce a livello di programmazione i display Mac, tra cui risoluzione del display, frequenza di aggiornamento, rotazione, luminosità, mirroring dello schermo e underscan HDMI. Il suo scopo principale è quello di consentire agli amministratori di sistema e agli sviluppatori di configurare automaticamente un numero qualsiasi di schermi Mac, utilizzando gli script della riga di comando e la libreria Python di Display Manager. Può essere facilmente integrato in Jamf Pro, Outset o Munki o altri sistemi di gestione client.

Usiamo Display Manager nel nostro ambiente per molteplici casi d'uso come sui nostri sistemi di visualizzazione digitale per ruotare il display di 90 gradi e impostare esattamente il underscan HDMI, su podi per il mirroring video e consentire all'istruttore di attivare o disattivare rapidamente il mirroring, impostare risoluzione predefinita e amp; luminosità su sistemi condivisi come i laboratori degli studenti o il personale / i sistemi di facoltà e ripristinare l'impostazione predefinita a volte come accesso utente / disconnessione o su richiesta, ecc.

Se sei interessato a rivedere il codice o provarlo, consulta il seguente repository GitHub ...

link

Fateci sapere se avete domande, problemi o richieste di funzionalità.

    
risposta data 17.08.2018 - 20:47
fonte

Leggi altre domande sui tag