Изменить порядок отображения macOS через командную строку / applescript?

У меня есть 3 настройки дисплея в следующем порядке (слева направо):

  • MB Pro Retina 15 дюймов / внутренний
  • Lenovo 23 дюйма / внешний
  • Lenovo 23 дюйма / внешний

Версия macOS: 10.13.6

Скорее всего при перезагрузке порядок пропал и мне нужно сбросить через System Preferences -> Display -> Arrangement

Есть ли способ изменить расположение через командную строку или applescript?

Я считаю, что это можно сделать с помощью AppleScriptObjC / JXA, но поскольку у меня только один дисплей, у меня нет средств для тестирования.

CJK 19.11.2018 10:51

Это обнадеживает ... apple.stackexchange.com/q/249447

Mark Setchell 19.11.2018 14:24
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
529
1

Ответы 1

Я устал от той же проблемы и мне удалось уменьшить displayPlacer, упомянутый в ссылке Марка Сетчелла, чтобы исправить эту конкретную проблему:

#include <IOKit/graphics/IOGraphicsLib.h>
#include <ApplicationServices/ApplicationServices.h>
#include <unistd.h>
#include <math.h>
#include <stdio.h>

int main(int argc, const char * argv[]) {

    CGDirectDisplayID screenList[3];
    CGDirectDisplayID external1;
    CGDirectDisplayID external2;
    CGGetOnlineDisplayList(INT_MAX, screenList, NULL);

    if (CGDisplayIsMain(screenList[0])){
        external1 = screenList[1];
        external2 = screenList[2];
    }else if (CGDisplayIsMain(screenList[1])){
        external1 = screenList[0];
        external2 = screenList[2];
    }else{
        external1 = screenList[1];
        external2 = screenList[2];
    }


    CGDisplayConfigRef configRef;
    CGBeginDisplayConfiguration(&configRef);

    CGConfigureDisplayOrigin(configRef, external1, CGDisplayBounds(external2).origin.x, CGDisplayBounds(external2).origin.y);
    CGConfigureDisplayOrigin(configRef, external2, CGDisplayBounds(external1).origin.x, CGDisplayBounds(external1).origin.y);
    
    CGCompleteDisplayConfiguration(configRef, kCGConfigurePermanently);
}

Мой C был ржавым, может быть, не очень чистым ... Он просто находит 2 внешних экрана и меняет их положение. Если вы переключаетесь между двумя настройками, будет не очень сложно сделать заранее сконфигурированные несколько позиций. Он находится на C, но выполняет свою работу.

Другие вопросы по теме