Pytanie:
Zmień układ wyświetlania w systemie OS X / macOS programowo
iconoclast
2016-08-15 19:47:35 UTC
view on stackexchange narkive permalink

Od czasu do czasu muszę przesuwać swój ekran (fizycznie 1 ), a to wymaga również zmiany układu wyświetlania w Preferencjach systemowych.Ręczne robienie tego przez cały czas to ból szyi.Czy można to zrobić programowo?


1 Pracuję po jednej stronie stołu, gdy pracuję w pojedynkę, ale kiedy chcę sparować z kimś, przewracam się na drugą stronę stołu, ponieważ na sekundę jest więcej nieużywanego miejscaosoba.Odwrócenie wyświetlacza w drugą stronę stołu oznacza, że wyświetlacz przechodzi z prawej strony laptopa do lewej, ponieważ laptop stoi na stojaku w każdą stronę.
Tylko uwaga ... zmodyfikowałem kod, ponieważ nie było potrzeby powtarzania tego, co wcześniej zrobiłem w `if normalOrentation ...` _statement_.To wystarczyło, aby zakryć informacje dotyczące _toggle flag_.Zreplikowany _kod_ został przeniesiony i umieszczony pod nim.
Sześć odpowiedzi:
#1
+14
Jake Hilborn
2018-03-31 20:49:37 UTC
view on stackexchange narkive permalink

Przepraszamy za spóźnioną odpowiedź.Możesz użyć displayplacer, aby ustawić profile dla obu swoich aranżacji.Zapisz profile w skrypcie lub użyj czegoś takiego jak BetterTouchTool jako skrótu klawiszowego do zmiany układu monitora.

https://github.com/jakehilborn/displayplacer

Nie ma powodu, by przepraszać za udzielenie odpowiedzi po długim czasie.Ani ja, ani nikt inny nie ma prawa _ oczekiwać_ Twojej odpowiedzi.Twoja odpowiedź jest równie przydatna dla każdego, kto szuka rozwiązania tego problemu.Doceniam twoją pracę - i twoją odpowiedź - i planuję uczynić ją częścią mojej konfiguracji.Dzięki!
#2
+8
user3439894
2016-08-16 23:50:52 UTC
view on stackexchange narkive permalink

Poniższe informacje pokazują, jak używać hsscreens i AppleScript, aby programowo przełączać te dwa ustawienia, korzystając z mojego MacBooka Pro, który zwykle znajduje się po lewej stronie mojego wyświetlacza Thunderbolt, oraz mojego wyświetlacza Thunderbolt. jest obecnie zaaranżowana. Efektem końcowym jest aplikacja AppleScript, która po uruchomieniu po prostu przełącza się między tymi dwoma układami. Tę aplikację można uruchomić na wszystkie normalne sposoby, w jakie można uruchomić każdą inną aplikację.

Na poniższym obrazku widać normalne i odwrócone rozmieszczenie ekranów i paska menu, pokazujące różnice między moim MacBookiem Pro a wyświetlaczem Thunderbolt.

Screen Arrangements

Ta aplikacja AppleScript, wraz z binarnym plikiem wykonywalnym hsscreens , programowo przełącza między dwoma układami pokazanymi na powyższym obrazku, przesuwając wyświetlacz MacBooka Pro w prawo lub w lewo od wyświetlacza Thunderbolt, zachowując Pasek menu na wyświetlaczu MacBooka Pro.

Aby to zakodować , musiałem określić, jakie jest obecne ustawienie , a następnie odpowiednio postępować. Aby to zrobić, dwukrotnie użyłem hmscreens -info w terminalu, raz w każdym układzie .

Patrząc na otrzymane informacje, zobaczyłem informację, dla której mogłem grep ustawić flagę , z którą chcesz się przełączać.


Wyjście hmscreens -info w normalnym układzie ekranów:

  $ hmscreens -info
Identyfikator ekranu: 68822100
Rozmiar: {1440, 900}
Pozycja globalna: {{0, 0}, {1440, 900}}
Przestrzeń kolorów: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Rozdzielczość (dpi): {144, 144}
Częstotliwość odświeżania: 0
Wykorzystuje Quartz Extreme: TAK

ID ekranu: 68695180
Rozmiar: {2560, 1440}
Pozycja globalna: {{1440, -540}, {4000, 900}}
Przestrzeń kolorów: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Rozdzielczość (dpi): {72, 72}
Częstotliwość odświeżania: 0
Wykorzystuje Quartz Extreme: TAK

$
 

Dane wyjściowe hmscreens -info w odwróconym układzie wyświetlaczy:

  $ hmscreens -info
Identyfikator ekranu: 68822100
Rozmiar: {1440, 900}
Pozycja globalna: {{0, 0}, {1440, 900}}
Przestrzeń kolorów: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Rozdzielczość (dpi): {144, 144}
Częstotliwość odświeżania: 0
Wykorzystuje Quartz Extreme: TAK

ID ekranu: 68695180
Rozmiar: {2560, 1440}
Pozycja globalna: {{-2560, -540}, {0, 900}}
Przestrzeń kolorów: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Rozdzielczość (dpi): {72, 72}
Częstotliwość odświeżania: 0
Wykorzystuje Quartz Extreme: TAK

$
 

Jeśli było to dla mnie oczywiste, musiałem użyć informacji z Global Position: , aby określić bieżący układ wyświetlaczy. Od razu zauważyłem, że -2560 jest unikalnym elementem między wyjściem a sposobem określenia bieżącego układu . Jeśli grep ed dla -2560 i znalazłem to, to znajdowałem się w odwróconym układzie , a nie w normalnym układzie . Więc to jest to, czego użyłem do określenia aktualnego układu i przełączania się między tymi dwoma układami . (Uwaga: -2560 nie było jedyną unikalną rzeczą, po prostu na tym się skupiłem jako pierwszy i uznałem, że łatwy sposób na przeanalizowanie informacji, aby ustawić flagę przełączania .

Zapisz poniższy kod AppleScript jako aplikację i umieść kopię binarnego pliku wykonywalnego hmscreens w <appname>.app/Contents/Resources folder. W ten sposób aplikacja np. / Applications / Toggle Displays Arrangements.app jest samowystarczalny i niezależny od zewnętrznej lokalizacji binarnego pliku wykonywalnego hmscreens .

Oczywiście musisz określić, po co grep lub użyć innej metody, aby ustawić flagę przełączania i zmodyfikować kod poniżej odpowiednio do twoich szczególnych potrzeb (jeśli są inne niż ten przypadek użycia lub inny przypadek użycia).

Kod AppleScript :

  ustaw hms na (ścieżka do mnie jako tekst) & "Zawartość: Zasoby: hmscreens"

ustaw screenIDs na akapity (czy w skrypcie powłoki w formacie POSIX ścieżki hms & "-screenIDs")
jeśli (liczba screenIDs) jest większa niż 1 wtedy

    ustaw normalOrentation na "1"
    próbować
        ustaw normalOrentation, aby wykonywał skrypt powłoki w postaci cytowanej ścieżki POSIX hms & "-info | grep '\\ - 2560'"
    koniec próby
    jeśli normalOrentation ma wartość „1”, to
        ustaw othersPosition na „left”
    jeszcze
        ustaw othersPosition na „właściwą”
    koniec, jeśli

    ustaw secondScreen na element 1 z screenIDs
    do skryptu powłoki cytuje postać POSIX ścieżki hms & "-setMainID" & secondScreen & "-othersStartingPosition" & othersPosition

jeszcze

    Powiedz mi
        Aktywuj
        okno dialogowe wyświetlacza "Do komputera podłączony jest tylko jeden ekran!" buttons {"OK"} domyślny przycisk 1 z opisem ikony
    koniec powiedz

koniec, jeśli
 

Poniższy obrazek przedstawia podświetlanie składni kodu AppleScript.

AppleScript Code

Obecnie nie mogę uruchomić tego.OS X zabija `hmsscreens` natychmiast, zanim będzie mógł cokolwiek zrobić:` [1] 9612 zabiło hmscreens -info`.Jakieś pomysły, jak naprawić tę sytuację?
@iconoclast, To zostało opublikowane dwa lata temu, czy testowałeś to wtedy i działało, czy robisz to po raz pierwszy.Czy próbowałeś ponownie pobrać plik i użyć nowej kopii?Czy zrestartowałeś komputer między awariami?To nadal działa dla mnie z macOS High Sierra 10.13.5.Kiedy pierwotnie to opublikowałem, korzystałem z systemu OS X Mountain Lion.
Wydaje mi się, że początkowo działało, ale w pewnym momencie ustało.
Nadal działa.Po prostu skopiuj narzędzie do folderu aplikacji.Następnie uruchom go używając np.`/ Applications / hmscreens -info` z linii poleceń
#3
+8
Billy
2020-01-20 22:32:06 UTC
view on stackexchange narkive permalink

Dowiedziałem się, jak zautomatyzować przełączanie ekranu za pomocą skrótu klawiaturowego z displayplacer i działa to niesamowicie!

Konfiguruję makro za pomocą Keyboard Maestro, aby automatycznie zmieniać układ pulpitu za pomocą skrótu klawiaturowego.

Instrukcje dotyczące konfiguracji skrótu klawiaturowego

  1. Zainstaluj displayplacer za pomocą Homebrew
  2. Użyj Keyboard Maestro i utwórz makro
  3. Dodaj akcję Wykonaj skrypt powłoki dla każdego posiadanego ekranu (mam 3).
  4. Otwórz Preferencje systemowe> Wyświetla i zmienia układ, umieszczając pasek menu w prawo o 1 ekran (kierunek pisania od prawej do lewej)
  5. Otwórz terminal i uruchom polecenie displayplacer list
  6. Skopiuj dolne wyjście, np. displayplacer "ID: <screenId> Res: <width>x<height> Hz: <num> color_depth: <num> skalowanie pochodzenia <on / off>: (<x>, <y> stopień): <0 / 90/180 / 270>"
  7. Wklej dane wyjściowe do akcji makra.
  8. Powtórz kroki 4-7 i zatrzymaj się po przejściu do głównego ekranu, na którym nie masz włączonego paska menu.
  9. Skonfiguruj skrót klawiaturowy dla swojego makra.
  10. Uruchom makro za pomocą nowego skrótu i ​​patrz, jak magia dzieje się na Twoich oczach.

HPomocne wskazówki

  1. Jeśli masz problem z uruchomieniem displayplacer z Keyboard Maestro, prawdopodobnie używasz innego basha w swoim terminalu / iTermie, np. oh-my-zsh po zainstalowaniu używając Homebrew. W takim przypadku postępuj zgodnie z instrukcjami zawartymi w moim drugim poście, aby naprawić odniesienie binarne displayplacer .

  2. Oto zrzut ekranu przedstawiający moją działającą konfigurację Keyboard Maestro z displayplacer.

  3. Może być konieczne ponowne uruchomienie makra, jeśli przypadkowo naciśniesz skrót.

#4
+2
user332214
2018-08-17 23:47:59 UTC
view on stackexchange narkive permalink

To nie jest AppleScript, ale tutaj jest biblioteka Pythona, która łączy się z powiązaniami PyObjC i zapewnia dogłębną kontrolę ustawień wyświetlania Maca o nazwie „Menedżer wyświetlania”. Zaktualizowaliśmy Menedżera wyświetlania, który jest biblioteką Pythona o otwartym kodzie źródłowym, która może ręcznie lub automatycznie modyfikować pojedynczą osobę lub flotę ustawień wyświetlania Maca. Programowo zarządza wyświetlaczami Mac, w tym rozdzielczością wyświetlacza, częstotliwością odświeżania, obrotem, jasnością, dublowaniem ekranu i underscan HDMI. Jego głównym zamierzonym celem jest umożliwienie administratorom systemu i programistom automatycznej konfiguracji dowolnej liczby wyświetlaczy Mac za pomocą skryptów wiersza poleceń i biblioteki Display Manager Python. Można go łatwo zintegrować z Jamf Pro, Outset lub Munki lub innymi systemami zarządzania klientami.

Używamy Menedżera wyświetlania w naszym środowisku w wielu przypadkach użycia, takich jak nasze cyfrowe systemy wyświetlania, aby obrócić wyświetlacz o 90 stopni i dokładnie ustawić underscan HDMI, ustawić dublowanie wideo na podium i umożliwić instruktorowi szybkie włączanie lub wyłączanie dublowania, ustaw domyślna rozdzielczość Jasność & w systemach współdzielonych, takich jak laboratoria studenckie lub systemy personelu / wykładowców, a czasami resetowanie domyślnych, takich jak logowanie / wylogowanie użytkownika lub na żądanie itp.

Jeśli chcesz przejrzeć kod lub wypróbować go, zobacz następujące repozytorium GitHub ...

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

Daj nam znać, jeśli masz pytanie, problemy lub prośby o dodanie funkcji.

Wygląda to interesująco, ale prawdopodobnie przesada jak na to, czego chcę.(Ale nawiasem mówiąc, nie jestem zwolennikiem przegranej. Właściwie ... Mam zamiar zagłosować za, ponieważ wydaje się to _potencjalnie_ przydatne.) Dziękuję za opublikowanie!
Jasne, np.Daj znać, jeśli masz jakieś pytania, problemy lub prośby o funkcje.
#5
+2
Earl Funderburk
2018-10-18 21:32:53 UTC
view on stackexchange narkive permalink

Użyłem powyższych przykładów do stworzenia prostego skryptu Apple „Zamień ekrany”.

  wyświetla okno dialogowe „Zamienić ekrany?”przyciski {"Anuluj", "OK"} przycisk domyślny "OK" przycisk anuluj "Anuluj" rezygnacja po 15

ustaw hms na „Applications: hmscreens”
ustaw screenIDs na akapity (czy w skrypcie powłoki w formacie POSIX ścieżki hms & "-screenIDs")
jeśli (liczba screenIDs) jest większa niż 1 wtedy

    ustaw firstScreen na element 1 z screenIDs

    ustaw secondScreen na pozycję 2 z screenIDs

    ustaw othersPosition na „właściwą”

    do skryptu powłoki cytuje postać POSIX ścieżki hms & "-setMainID" & secondScreen & "-othersStartingPosition" & othersPosition

jeszcze

    wyświetl okno dialogowe „Tylko jeden ekran”

koniec, jeśli
 

Działało jak mistrz ... Mogę kliknąć jedną ikonę, a moje ekrany dopasują się tak, jak chcę.

Baw się! E-

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

Możesz również użyć Hammerspoon, aby zrobić to programowo.Mam to w swoim skrypcie startowym Hammerspoon:

  - zamień który jest głównym ekranem: zewnętrzny monitor lub laptop
hs.hotkey.bind ({"cmd", "alt", "ctrl", "shift"}, "f11", function ()
  - allScreens wydaje się zwracać ekrany w kolejności: pierwotna, nie podstawowa
  - więc z dwoma ekranami, to zawsze działa na innym niż podstawowy
  hs.screen.allScreens () [2]: setPrimary ()
koniec)
 
Zamiana pozycji to nie to samo, co zamiana, która jest podstawowa.Czy spowoduje to również zmianę fizycznej pozycji monitorów?
Z mojego doświadczenia wynika, że nie zmienia to fizycznej pozycji monitorów;zmienia tylko, który ekran jest główny. (Używam OSX 10.13.6 i Hammerspoon 0.9.78)


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...