4 votes

Y a-t-il un moyen de contrôler la position relative des moniteurs doubles depuis le terminal?

J'ai une configuration étrange pour mon bureau à domicile qui me permet de passer d'un bureau debout à un bureau assis. Le seul problème est que lorsque je change de position, le moniteur externe de mon ordinateur portable change de côté. (Quand je suis debout, il est sur la gauche de mon ordinateur portable, quand je suis assis, il est sur la droite). Pour le moment, chaque fois que je passe de la position assise à debout, ou vice versa, je dois aller dans Préférences Système -> Affichage -> Agencement et les réorganiser. Ce que j'aimerais, c'est un genre de commande terminal qui déplace le 2e moniteur par rapport au premier. Peu importe la longueur de la commande car je peux simplement lui donner un alias.

4voto

Stan Hutcheon Points 984

J'ai écrit un petit programme C pour accomplir cela, car cela ne peut être fait de manière efficace autrement.

Vous aurez besoin de Xcode installé pour le compiler.

https://github.com/stnvh/cgorigin


#import 
#import 

#define MAX_DISPLAYS 10

static CGDisplayCount dispCount = MAX_DISPLAYS;
static CGDirectDisplayID dispOnline[MAX_DISPLAYS];

int main(int argc, const char * argv[]) {
    CGDisplayCount dispOnlineCount;
    CGDisplayErr errActive = CGGetOnlineDisplayList(dispCount, dispOnline, &dispOnlineCount);

    CGDisplayConfigRef configRef;
    CGError err = CGBeginDisplayConfiguration(&configRef);

    if(!argv[1]) {
        printf("usage: [-l | --list] [[-o | --origin] x y index] \n");
        return 1;
    }

    for(int i = 0; i < dispOnlineCount; i++) {
        if(dispOnline[i]) {
            int dispWidth = CGDisplayPixelsWide(dispOnline[i]);
            int dispHeight = CGDisplayPixelsHigh(dispOnline[i]);
            CGPoint dispOrigin = CGDisplayBounds(dispOnline[i]).origin;

            if(strcmp(argv[1], "--list") == 0 || strcmp(argv[1], "-l") == 0) {
                printf("display %d: %dx%d %ldx%ld\n", i, dispWidth, dispHeight, (long)dispOrigin.x, (long)dispOrigin.y);
            }

            if(strcmp(argv[1], "--origin") == 0 || strcmp(argv[1], "-o") == 0) {
                int posX = dispOrigin.x;
                int posY = dispOrigin.y;
                int dispInd = 1;

                if(argv[2]) {
                    posX = strtol(argv[2], NULL, 0);
                }
                if(argv[3]) {
                    posY = strtol(argv[3], NULL, 0);
                }
                if(argv[4]) {
                    long _dispInd = strtol(argv[4], NULL, 0);

                    if(_dispInd < dispOnlineCount) {
                        dispInd = _dispInd;
                    }
                }

                if(dispInd == i) {
                    err = CGConfigureDisplayOrigin(configRef, dispOnline[i], posX, posY);
                }
            }
        }
    }

    err = CGCompleteDisplayConfiguration(configRef, kCGConfigurePermanently);
    if(err != 0) NSLog(@"Error with applying configuration: %d\n", err);

    return 1;
} 

Enregistrez dans un fichier appelé main.m, puis exécutez :

clang -Wall -framework Foundation -framework ApplicationServices main.m -o cgorigin

Exemple (de Github) :

en supposant que nous avons deux moniteurs connectés, tous deux à 1920x1080

cgorigin --origin -1920 0 # positionne le deuxième moniteur à gauche de l'affichage principal

cgorigin --origin 0 0 # positionne le deuxième moniteur à droite de l'affichage principal

cgorigin --origin -1920 1080 0 # positionne le premier moniteur en dessous du deuxième affichage

0voto

Jake Hilborn Points 1086

J'ai écrit un outil terminal gratuit appelé displayplacer qui vous permet de décrire votre mise en page et de réappliquer cette même mise en page. Cela vous permettra de configurer des profils pour modifier la résolution, la rotation et le positionnement de vos moniteurs.

Par exemple, voici mon profil de configuration à 4 moniteurs. J'ai lié cette commande à un raccourci clavier en utilisant BetterTouchTool. displayplacer "id:A46D2F5E-487B-CC69-C588-ECFD519016E5 res:3840x2160 hz:60 color_depth:8 scaling:off origin:(0,0) degree:0" "id:F466F621-B5FA-04A0-0800-CFA6C258DECD res:1440x900 color_depth:4 scaling:on origin:(-1440,1437) degree:0" "id:4C405A05-8798-553B-3550-F93E7A7722BB res:1440x2560 color_depth:8 scaling:off origin:(3840,-363) degree:270" "id:18173D22-3EC6-E735-EEB4-B003BF681F30 res:1920x1200 color_depth:8 scaling:off origin:(960,-1200) degree:0"

Il est également disponible via Homebrew brew tap jakehilborn/jakehilborn && brew install displayplacer

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X