Flip-Screen mit Tastaturkürzeln

Wie kann ich eine Tastenkombination erstellen, die meinen Bildschirm auf den Kopf stellt?

Ich weiß, wie man diese Einstellung in den Systemeinstellungen aktiviert, aber ich möchte sie an eine Verknüpfung binden können.

Ist es möglich, mit derselben Tastenkombination die Anzeige wieder auf die normale Ausrichtung zurückzusetzen?

Geben Sie hier die Bildbeschreibung ein

Nur zu Ihrer Information, ich habe ein macOS 10.13.3-System aufgebaut und den Beispiel -AppleScript- Code getestet und er funktioniert wie er auf meinem System ist. Sie können meine aktualisierte Antwort erneut lesen und sehen, ob Sie sie auf Ihrem System zum Laufen bringen können. Wenn dies zufällig nicht der Fall ist, müssen Sie einen Screenshot von Systemeinstellungen> Anzeigen> Anzeige hinzufügen, damit ich zumindest sehen kann, was der Unterschied zwischen Ihrem System und meinem ist.
Nun, es ist ziemlich offensichtlich, warum das Skript für Sie nicht funktioniert, da es keine Popup-Schaltfläche "Rotation:" auf der Registerkarte "Anzeige" gibt, die in dem Bild angezeigt wird, das Sie gerade dem OP hinzugefügt haben. Gemäß dem von Ihnen hinzugefügten Bild ist das Drehen des Displays also keine verfügbare Option für Sie! Wenn Sie jedoch die Möglichkeit haben, das Display zu drehen, müssen Sie die Einzelheiten Ihrer Hardwarekonfiguration hinzufügen und angeben, wie Sie das Display tatsächlich drehen. Andernfalls gibt es nicht genügend Informationen, um eine alternative Antwort zu geben, die ich habe, die standardmäßig in macOS für mich funktioniert, wie ich gesagt habe.
@ user3439894 Ich kann cmd+alt auf die Anzeigeoption klicken und es zeigt mir Rotationsoptionen
Ich dachte, das sei für alle normal, ich habe noch nie davon gehört, dass es jemandem gezeigt wurde, ohne dass cmd alt geklickt wurde
Nun, für mich wird es automatisch angezeigt, wahrscheinlich weil ich ein Thunderbolt-Display verwende. Lassen Sie mich einige Tests durchführen und ich melde mich bei Ihnen.
Okay, ich habe mir meinen 10.13.3-Build noch einmal angesehen, und da die Rotation: Popup-Schaltfläche standardmäßig auf meinem System angezeigt wird und nicht auf Ihrem, müssen Sie den in meiner Antwort bereitgestellten Beispiel - AppleScript- Code ändern , um ihn an Ihren anzupassen Szenario. Dies bedeutet, dass die Tastenanschläge gesendet werden müssen, die erforderlich sind, um die Rotation: Popup-Schaltfläche vor anzuzeigen tell pop up button "Rotation:" ..., und dies erfordert möglicherweise auch die Anzeige der Benutzeroberfläche , sodass möglicherweise ein activate Befehl nach dem reveal Befehl hinzugefügt werden muss . Dies kann auch die Verwendung eines Dienstprogramms eines Drittanbieters erfordern, wenn native Aktionen fehlschlagen.
Da ich Ihr Szenario zum jetzigen Zeitpunkt nicht replizieren kann, fürchte ich, das ist alles, was ich im Moment anbieten kann. Ich werde morgen einen sauberen Build machen und sehen, ob es dann einen Unterschied auf meinem System gibt, aber ich bin nicht hoffnungsvoll. Versuchen Sie es mit key code 58 using command downand may be a delay 0.25after und fügen Sie dies vor dem tell pop up button "Rotation:" ...Befehl hinzu.

Antworten (6)

Ich habe ein Programm namens displayplacer geschrieben , das dies über einen Terminalbefehl einfach macht. Sie können dies mit einem Programm wie BetterTouchTool oder vielleicht Automator an eine Tastenkombination binden. Funktioniert mit allen macOS-Versionen über 10.6.

Beispiel um 180 zu drehen:displayplacer 'id:123467890 res:1920x1200 scaling:off origin:(0,0) degree:180'

Beispiel zum Umdrehen von 0:displayplacer 'id:123467890 res:1920x1200 scaling:off origin:(0,0) degree:0'

wofür id?
Jedes Display hat eine eindeutige ID. Wenn Sie beispielsweise 2 Monitore haben, geben Sie an, dass einer gedreht wird und der andere nicht. Beachten Sie, dass Displayplacer derzeit nicht gut funktioniert, wenn Sie die Änderungen für weniger als alle angeschlossenen Monitore angeben. Ich werde dies bald verbessern. Ich empfehle, die neueste Displayplacer-Binärdatei aus dem Repo (nicht der Registerkarte „Releases“) herunterzuladen und auszuführen displayplacer list. Am unteren Rand der Ausgabe sehen Sie Ihr aktuelles "Profil", das darstellt, wie Ihre Monitore derzeit angeordnet sind. Bearbeiten Sie dies nach Ihren Wünschen.
Freut mich zu hören, dass meine Antwort geholfen hat! Beim Aufrufen dieser Seite wird nun die erste Antwort angezeigt.
Dies ist eine großartige Software, die in der Lage ist, die vollständig angegebene Konfiguration in einem Befehlszeilenaufruf zu speichern. Es empfiehlt sich hilfreich, den Befehl zum Replizieren der aktuellen Einstellungen vorzuschlagen (verwenden Sie displayplayer list). Sie hatten mich bei „Im Wesentlichen XRandR für macOS“. :-)

Folgendes wurde unter macOS Sierra 10.12.5 und macOS High Sierra 10.13.3 getestet und funktioniert ohne Probleme auf meinem System.

Unter Verwendung des AppleScript- Beispielcodes aus meiner ursprünglichen Antwort, der als AppleScript- Anwendung mit dem Namen Flip Display 180° gespeichert und zu Systemeinstellungen > Sicherheit & Datenschutz > Datenschutz > Eingabehilfen hinzugefügt wurde , um den Code verarbeiten zu können , habe ich dann einen Automator verwendet Service-Workflow , auch Flip Display 180° genannt , um die gleichnamige AppleScript- Anwendung zu öffnen, während Sie die folgende Tastenkombination zuweisen : ⇧⌃⌘R

  • Beachten Sie, dass die Tastenkombination ⇧⌃⌘F , die unter OS X 10.8.5 funktionierte , mit einer Standardtastenkombination des Systems unter macOS 10.12.5 , macOS 10.13.3 in Konflikt stand und warum ich sie geändert habe. Möglicherweise müssen Sie eine andere Tastenkombination verwenden , und wie üblich müssen Sie eine auswählen, die noch keiner Anwendung zugewiesen ist, die den Fokus hat, wenn sie gedrückt wird, um diesen Automator- Dienst-Workflow zu aktivieren .

  • Ich habe auch den folgenden Befehl im Terminal ausgeführt , um die Dock-Kachel für die AppleScript- Anwendung nicht im Dock anzuzeigen :

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

Wenn sich die Benutzeroberfläche für Anzeigen in den Systemeinstellungen in macOS High Sierra auf Ihrem System aus unbekannten Gründen unterscheidet, muss der AppleScript- Beispielcode jedoch geändert werden, um die Unterschiede zwischen dem, was auf meinem und Ihrem System funktioniert, zu berücksichtigen. Wenn es geändert werden muss, würde ich mir vorstellen, dass es nicht so schwer wäre, es herauszufinden.


Die folgenden Bilder zeigen die relevanten Details:

System Preferences > Displays > Display , wie auf meinem System gezeigt:

Geben Sie hier die Bildbeschreibung ein

AppleScript -Anwendung namens Flip Display 180° :

Geben Sie hier die Bildbeschreibung ein

Automator- Service-Workflow , auch Flip Display 180° genannt :

Code:open -a 'Flip Display 180°'

Geben Sie hier die Bildbeschreibung ein

Systemeinstellungen > Sicherheit & Datenschutz > Datenschutz > Barrierefreiheit :

Geben Sie hier die Bildbeschreibung ein

Systemeinstellungen > Tastatur > Kurzbefehle > Dienste > Allgemein > Display um 180° drehen

Geben Sie hier die Bildbeschreibung ein


Vorerst belasse ich meine ursprüngliche Antwort im unteren Teil dieser Antwort, da sie wie unter OS X 10.8.6 angegeben funktioniert und für andere Benutzer von Vorteil sein kann.

Ursprüngliche Antwort:

Ich weiß, dass Sie macOS High Sierra verwenden , und vielleicht können Sie das verwenden, was für mich unter OS X 10.8.6 funktioniert .

Der folgende beispielhafte AppleScript- Code , der in einer Aktion „AppleScript ausführen“ in einem Automator- Dienst-Workflow verwendet wird, dreht die Anzeige um 180°, wenn ich drücke: ⇧⌃⌘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
  • Beachten Sie, dass der Wert der delay Befehle möglicherweise an Ihr System angepasst werden muss und dass möglicherweise zusätzliche delay Befehle erforderlich sind oder nicht. Passen Sie die Werte von an und fügen Sie die delay Befehle nach Bedarf hinzu/entfernen Sie sie.

Hinweis: Der beispielhafte AppleScript- Code ist genau das und verwendet keine andere Fehlerbehandlung als die gezeigte und soll nur eine von vielen Möglichkeiten zeigen, eine Aufgabe zu erledigen. Es liegt immer in der Verantwortung des Benutzers, eine geeignete Fehlerbehandlung nach Bedarf/Wunsch hinzuzufügen/zu verwenden .


Automator- Service-Workflow :

Geben Sie hier die Bildbeschreibung ein

Ihr Skript funktioniert immer noch nicht für mich, "System Events got an error: Can't get pop up button \"Rotation:\" of tab group 1 of window 1 of application process \"System Preferences\"."
Danke, das Skript funktioniert Wunder! Ich habe es in Better Touch Tool eingefügt, um es mit einer Trackpad-Geste auszulösen.

Dieses Skript wurde auf macos 10.14 für chinesische Benutzer getestet .

Wenn Sie eine andere Sprache verwenden, ändern Sie bitte den Schaltflächennamen in Ihre Sprache.

In script "LG Ultra HD"bedeutet der Name Ihres Monitors, dies ist nützlich, wenn Sie mehr als 2 Monitore haben, andernfalls können Sie (first window whose name is "LG Ultra HD")durch ersetzenwindow 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
Können Sie einen Hinweis geben, was diese Schaltflächen auf Englisch bedeuten? (Sie könnten ein zusätzliches Konto auf Ihrem Mac erstellen, Englisch als Hauptsprache auswählen und überprüfen, was der Schaltflächentext auf Englisch ist). Es würde Ihre Antwort viel nützlicher machen.
„旋转“ bedeutet „Rotation“ „标准“ bedeutet „Standard“ „确认“ bedeutet „Bestätigen“

Ich habe die Lösung von Benutzer 3439894 genommen und sie so modifiziert, dass sie an demselben Fehler arbeitet, den theonlygusti gefunden hat, weil ich auch auf dieses Problem gestoßen bin.

Das folgende Skript ist ein massiver Hack, aber die allgemeine Idee ist, dass der Rotations-Tab manchmal Fenster 1 und manchmal Fenster 2 ist. Um dies zu lösen, habe ich einen Try-Catch-Block verwendet, der nur den ersten versucht und bei Fehlern auch versuche es mit dem zweiten. Fühlen Sie sich frei, dieses Skript zu verbessern, aber ich wollte nur etwas, das funktioniert.

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

Prost, dass du 99 % der Arbeit erledigt hast, user3439894

Getestet auf macOS 11.3 Big Sur.

Basierend auf der Lösung von @Vxider, mit ins Englische übersetzten Menüpunkten.

Sie müssen beide Vorkommen von so ändern, "LG HDR 4K"dass sie mit dem Namen Ihres Monitors übereinstimmen, wie er im Fenster Systemeinstellungen angezeigt wird:

Geben Sie hier die Bildbeschreibung ein

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

Basierend auf früheren Lösungen habe ich das Skript an macOS Monterey angepasst. Es funktioniert gut mit meinem macOS 12.3.1. Genießen Sie es.

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