Frage:
Change display arrangement in OS X/macOS programmatically
iconoclast
2016-08-15 19:47:35 UTC
view on stackexchange narkive permalink

Ich muss meine Anzeige regelmäßig verschieben (physisch 1 sup>), und dies erfordert auch eine Neuanordnung meiner Anzeigeanordnung in den Systemeinstellungen.Dies die ganze Zeit manuell zu tun, ist ein Schmerz im Nacken.Gibt es eine Möglichkeit, dies programmgesteuert zu tun?


1 sup> Ich arbeite auf einer Seite eines Tisches, wenn ich alleine arbeite, aber wenn ich mit jemandem koppeln möchte, wechsle ich auf die andere Seite des Tisches, weil dort für eine Sekunde mehr ungenutzter Speicherplatz verfügbar istPerson.Wenn Sie das Display auf die andere Seite des Tisches drehen, bewegt sich das Display von rechts neben meinem Laptop nach links, da der Laptop in beide Richtungen auf einem Ständer steht.
Nur eine Anmerkung ... Ich habe den Code geändert, da es nicht erforderlich war, das zu replizieren, was ich zuvor in der Anweisung "if normalOrentation ..." getan habe.Das musste nur Informationen für das _toggle flag_ abdecken.Der replizierte _code_ wurde verschoben und darunter gesetzt.
Sechs antworten:
Jake Hilborn
2018-03-31 20:49:37 UTC
view on stackexchange narkive permalink

Entschuldigung für die späte Antwort.Mit dem Displayplacer können Sie Profile für beide Arrangements festlegen.Speichern Sie die Profile in einem Skript oder verwenden Sie BetterTouchTool als Hotkey, um Ihr Monitorlayout zu ändern.

https://github.com/jakehilborn/displayplacer

Es gibt keinen Grund, sich nach langer Zeit für die Antwort zu entschuldigen.Weder ich noch sonst jemand hat das Recht, Ihre Antwort zu erwarten.Ihre Antwort ist genauso nützlich für alle, die nach einer Lösung für dieses Problem suchen.Ich schätze Ihre Arbeit - und Ihre Antwort - und plane, sie zu einem Teil meines Setups zu machen.Vielen Dank!
user3439894
2016-08-16 23:50:52 UTC
view on stackexchange narkive permalink

Mit meinem MacBook Pro, das sich normalerweise links von meinem Thunderbolt-Display befindet, und meinem Thunderbolt-Display wird im Folgenden gezeigt, wie Sie mit hsscreens und AppleScript die beiden Anordnungen programmgesteuert umschalten, je nachdem, wie es ist derzeit arrangiert. Das Endergebnis ist eine AppleScript-Anwendung, die beim Ausführen einfach zwischen den beiden Anordnungen hin und her wechselt. Diese App kann auf alle normalen Arten ausgeführt werden, auf denen jede andere Anwendung ausgeführt werden kann.

In der Abbildung unten sehen Sie die normalen und gespiegelten Anordnungen der Anzeige- und Menüleiste, die die unterschiedlichen Beziehungen zwischen meinem MacBook Pro und Thunderbolt Display zeigen.

Screen Arrangements

Diese AppleScript-Anwendung wechselt zusammen mit der binären ausführbaren Datei hsscreens programmgesteuert zwischen den beiden im obigen Bild gezeigten Anordnungen und verschiebt das Display des MacBook Pro nach rechts oder links vom Thunderbolt-Display Menüleiste auf dem Display des MacBook Pro.

Um dies zu codieren , musste ich die aktuelle Anordnung ermitteln und dann entsprechend handeln. Zu diesem Zweck habe ich hmscreens -info zweimal in einem Terminal verwendet, einmal in jeder Anordnung .

Beim Betrachten der ausgegebenen Informationen sah ich eine Information, nach der ich grep suchen konnte, um ein -Flag zum Umschalten zu setzen.


Ausgabe von hmscreens -info in einer normalen Anordnung der Displays:

  $ hmscreens -info
Bildschirm-ID: 68822100
Größe: {1440, 900}
Globale Position: {{0, 0}, {1440, 900}}
Farbraum: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Auflösung (dpi): {144, 144}
Aktualisierungsrate: 0
Verwendet Quarz Extreme: JA

Bildschirm-ID: 68695180
Größe: {2560, 1440}
Globale Position: {{1440, -540}, {4000, 900}}
Farbraum: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Auflösung (dpi): {72, 72}
Aktualisierungsrate: 0
Verwendet Quarz Extreme: JA

$
 

Ausgabe von hmscreens -info in einer gespiegelten Anordnung der Displays:

  $ hmscreens -info
Bildschirm-ID: 68822100
Größe: {1440, 900}
Globale Position: {{0, 0}, {1440, 900}}
Farbraum: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Auflösung (dpi): {144, 144}
Aktualisierungsrate: 0
Verwendet Quarz Extreme: JA

Bildschirm-ID: 68695180
Größe: {2560, 1440}
Globale Position: {{-2560, -540}, {0, 900}}
Farbraum: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Auflösung (dpi): {72, 72}
Aktualisierungsrate: 0
Verwendet Quarz Extreme: JA

$
 

Wenn es für mich offensichtlich war, musste ich Informationen von Global Position: verwenden, um die aktuelle Anordnung der Displays zu bestimmen. Ich habe -2560 sofort als eindeutig zwischen der Ausgabe und einer Möglichkeit zur Bestimmung der aktuellen Anordnung gesehen. Wenn ich grep nach -2560 gesucht und gefunden habe, befand ich mich in der gespiegelten Anordnung , nicht in der normalen Anordnung . Dies ist also das, was ich verwendet habe, um die aktuelle Anordnung zu bestimmen und damit zwischen den beiden Anordnungen umzuschalten. (Hinweis: -2560 war nicht das einzige Einzigartige, sondern nur das, worauf ich mich zuerst konzentrierte und eine einfache Möglichkeit fand, die Informationen zu analysieren, um ein Umschaltflag zu setzen.)

Speichern Sie den folgenden AppleScript -Code als Anwendung und platzieren Sie eine Kopie der binären ausführbaren Datei hmscreens in der Datei <appname>.app/Contents/Resources Ordner. Auf diese Weise kann die App, z. / Applications / Toggle Displays Arrangements.app ist in sich geschlossen und hängt nicht von einem externen Speicherort der binären ausführbaren Datei hmscreens ab.

Natürlich müssen Sie festlegen, wofür grep verwendet werden soll, oder eine andere Methode verwenden, um das Umschaltflag zu setzen und den Code unten zu ändern entsprechend Ihren speziellen Anforderungen (falls anders als dieser Anwendungsfall oder ein anderer Anwendungsfall).

AppleScript Code :

  setze hms auf (Pfad zu mir als Text) & "Inhalt: Ressourcen: hmscreens"

setze screenIDs auf Absätze von (mache Shell-Skript zitierte Form des POSIX-Pfades von hms & "-screenIDs")
Wenn (Anzahl der Bildschirm-IDs) größer als 1 ist, dann

    setze normalOrentation auf "1"
    Versuchen
        setze normalOrentation, um das Shell-Skript in Anführungszeichen des POSIX-Pfads von hms & zu setzen.
    Ende versuchen
    Wenn normalOrentation "1" ist, dann
        setze OthersPosition auf "left"
    sonst
        setze otherPosition auf "rechts"
    ende wenn

    Setzen Sie secondScreen auf Punkt 1 der screenIDs
    Shell-Skript zitierte Form des POSIX-Pfads von hms & "-setMainID" & secondScreen & "-othersStartingPosition" & OthersPosition

sonst

    sagen Sie mir
        aktivieren Sie
        Anzeigedialog "Nur ein Bildschirm ist an Ihren Computer angeschlossen!" Tasten {"OK"} Standardtaste 1 mit Symbolnotiz
    Ende erzählen

ende wenn
 

Das folgende Bild zeigt die syntaktische Hervorhebung des AppleScript -Codes .

AppleScript Code

Ich bin derzeit nicht in der Lage, dies zum Laufen zu bringen.OS X beendet "hmsscreens" sofort, bevor es etwas tun kann: "[1] 9612 tötete hmscreens -info".Irgendwelche Ideen, wie man diese Situation behebt?
@iconoclast, Dies wurde vor zwei Jahren gepostet. Haben Sie es damals getestet und funktioniert? Oder machen Sie es nur zum ersten Mal?Haben Sie auch versucht, die Datei erneut herunterzuladen und eine neue Kopie zu erstellen?Haben Sie zwischen den Fehlern neu gestartet?Dies funktioniert immer noch für mich mit macOS High Sierra 10.13.5.Als ich dies ursprünglich gepostet habe, habe ich OS X Mountain Lion verwendet.
Ich glaube, es hat ursprünglich funktioniert, aber irgendwann aufgehört.
Es funktioniert immer noch.Kopieren Sie das Tool einfach in Ihren Anwendungsordner.Starten Sie es dann mit z.`/ Applications / hmscreens -info` von in Ihrer Kommandozeile
Billy
2020-01-20 22:32:06 UTC
view on stackexchange narkive permalink

Ich habe herausgefunden, wie das Umschalten der Anzeige mithilfe einer Tastenkombination mit displayplacer automatisiert werden kann, und es funktioniert wie ein Zauber!

Ich habe ein Makro mit Keyboard Maestro eingerichtet, um die Desktop-Anordnung mithilfe einer Tastenkombination automatisch zu wechseln.

Instructions zum Einrichten der Tastaturkürzel

  1. Installieren Sie displayplacer mit Homebrew
  2. Verwenden Sie Keyboard Maestro und erstellen Sie ein Makro
  3. Fügen Sie die Aktion "Shell-Skript ausführen" für jede Anzeige hinzu, die Sie haben (ich habe 3).
  4. Öffnen Sie die Systemeinstellungen> Zeigt Ihre Anordnung an und ändern Sie sie, indem Sie die Menüleiste um 1 Bildschirm nach rechts platzieren (Richtung von rechts nach links)
  5. Öffnen Sie Ihr Terminal und führen Sie den Befehl displayplacer list
  6. aus
  7. Kopieren Sie die untere Ausgabe, z. displayplacer "id: <screenId> res: <width>x<height> hz: <num> color_depth: <num> Skalierung: <on / off> Herkunft: (<x>, <y>) Grad: <0 / 90/180 / 270>"
  8. Fügen Sie die Ausgabe in Ihre Makroaktion ein.
  9. Wiederholen Sie die Schritte 4 bis 7 und halten Sie an, nachdem Sie den Hauptbildschirm ausgeführt haben. Lassen Sie die Menüleiste eingeschaltet
  10. Richten Sie eine Tastenkombination für Ihr Makro ein.
  11. Führen Sie Ihr Makro mit Ihrer neuen Verknüpfung aus und beobachten Sie die Magie direkt vor Ihren Augen.
  12. ol>

    Helpful Tips

    1. Wenn Sie ein Problem mit der Ausführung von displayplacer über Keyboard Maestro haben, verwenden Sie wahrscheinlich eine andere Bash in Ihrem Terminal / iTerm wie oh-my-zsh, als Sie es installiert haben mit Homebrew. Wenn dies der Fall ist, befolgen Sie diese Anweisungen in meinem anderen Beitrag, um Ihre binäre Referenz displayplacer zu korrigieren.

    2. Hier ist ein Screenshot, um mein funktionierendes Keyboard Maestro-Setup mit displayplacer anzuzeigen.

    3. Möglicherweise müssen Sie Ihr Makro ein zweites Mal ausführen, wenn Sie versehentlich auf die Verknüpfung klicken.

    4. ol>
user332214
2018-08-17 23:47:59 UTC
view on stackexchange narkive permalink

Dies ist kein AppleScript, aber hier ist eine Python-Bibliothek, die mit PyObjC-Bindungen verbunden ist und eine detaillierte Steuerung der Mac-Anzeigeeinstellungen namens "Display Manager" bietet. Wir haben den Display Manager aktualisiert, eine Open-Source-Python-Bibliothek, mit der eine Person oder eine Flotte von Mac-Anzeigeeinstellungen manuell oder automatisch geändert werden kann. Es verwaltet programmgesteuert Mac-Anzeigen, einschließlich Bildschirmauflösung, Bildwiederholfrequenz, Drehung, Helligkeit, Bildschirmspiegelung und HDMI-Unterscan. Der Hauptzweck besteht darin, Systemadministratoren und Entwicklern die automatische Konfiguration einer beliebigen Anzahl von Mac-Anzeigen mithilfe der Befehlszeilenskripte und der Python-Bibliothek von Display Manager zu ermöglichen. Es kann problemlos in Jamf Pro, Outset oder Munki oder andere Client-Management-Systeme integriert werden.

Wir verwenden den Display Manager in unserer Umgebung für mehrere Anwendungsfälle wie bei unseren digitalen Anzeigesystemen, um das Display um 90 Grad zu drehen und den HDMI-Unterscan genau einzustellen. Auf Podien wird die Videospiegelung eingestellt und der Kursleiter kann die Spiegelung schnell ein- oder ausschalten Standardauflösung &-Helligkeit auf gemeinsam genutzten Systemen wie Studentenlabors oder Personal- / Fakultätssystemen und Zurücksetzen der Standardeinstellung nach Zeiten wie Benutzeranmeldung / -abmeldung oder bei Bedarf usw.

Wenn Sie den Code überprüfen oder ausprobieren möchten, lesen Sie das folgende GitHub-Repository ...

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

Bitte lassen Sie uns wissen, wenn Sie Fragen, Probleme oder Funktionsanfragen haben.

Das sieht interessant aus, ist aber möglicherweise übertrieben für das, was ich will.(Aber ich bin übrigens nicht der Abwärtswähler. Tatsächlich ... werde ich abstimmen, da es potenziell nützlich erscheint.) Danke, dass du es gepostet hast!
Sicher, np.Lassen Sie uns wissen, wenn Sie Fragen, Probleme oder Funktionswünsche haben.
Earl Funderburk
2018-10-18 21:32:53 UTC
view on stackexchange narkive permalink

Ich habe die obigen Beispiele verwendet, um ein einfaches Apple-Skript "Swap Screens" zu erstellen.

  Anzeigedialog "Bildschirme tauschen?"Tasten {"Abbrechen", "OK"} Standardschaltfläche "OK" Abbrechen Schaltfläche "Abbrechen", die nach 15 aufgibt

setze hms auf "Anwendungen: hmscreens"
setze screenIDs auf Absätze von (mache Shell-Skript zitierte Form des POSIX-Pfades von hms & "-screenIDs")
Wenn (Anzahl der Bildschirm-IDs) größer als 1 ist, dann

    Setzen Sie firstScreen auf Punkt 1 der screenIDs

    Setzen Sie secondScreen auf Punkt 2 der screenIDs

    setze otherPosition auf "rechts"

    Shell-Skript zitierte Form des POSIX-Pfads von hms & "-setMainID" & secondScreen & "-othersStartingPosition" & OthersPosition

sonst

    Anzeigedialog "Nur einen Bildschirm sehen"

ende wenn
 

Es hat wie ein Champion funktioniert ... Ich kann auf ein Symbol klicken und meine Bildschirme werden so ausgerichtet, wie ich es möchte.

Viel Spaß! E-

Michael Graham
2020-05-15 07:13:19 UTC
view on stackexchange narkive permalink

Sie können dies auch programmgesteuert mit Hammerspoon tun.Ich habe dies in meinem Hammerspoon-Init-Skript:

  - Swap, der der primäre Bildschirm ist: externer Monitor oder Laptop
hs.hotkey.bind ({"cmd", "alt", "ctrl", "shift"}, "f11", function ()
  - allScreens scheint die Bildschirme in der Reihenfolge primär und nicht primär zurückzugeben
  - Bei zwei Bildschirmen funktioniert dies immer auf dem nicht primären Bildschirm
  hs.screen.allScreens () [2]: setPrimary ()
Ende)
 
Die Austauschposition ist nicht gleichbedeutend mit dem primären Austausch.Vertauscht dies auch die physische Position der Monitore?
Nach meiner Erfahrung ändert es nichts an der physischen Position der Monitore.es ändert nur, welcher Bildschirm primär ist. (Ich verwende OSX 10.13.6 und Hammerspoon 0.9.78)


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...