jakehilborn / displayplacer

macOS command line utility to configure multi-display resolutions and arrangements. Essentially XRandR for macOS.
MIT License
3.74k stars 134 forks source link

Display list not working on Mac M1 #92

Open FrankAllotta opened 2 years ago

FrankAllotta commented 2 years ago

After installing package, when I run a 'display list' on a Mac M1 while connected via vnc, I receive the following error message. Does this require that Rosetta 2 be installed?

% displayplacer list zsh: bad CPU type in executable: displayplacer

ideologysec commented 2 years ago

Appears to.

On an M1:

~❯ file $(which displayplacer)
/opt/homebrew/bin/displayplacer: Mach-O 64-bit executable x86_64
Danurigom commented 2 years ago

It can be run over Rosetta 2 but not display more that 2 resolutions below of 1024 pixels... Can someone try other solutions or a workaround? Thx!

raywang commented 2 years ago

It can be run over Rosetta 2 but not display more that 2 resolutions below of 1024 pixels... Can someone try other solutions or a workaround? Thx!

+1

mikesmithgh commented 2 years ago

Same for me. It required Rosetta to be installed.

gingerbeardman commented 1 year ago

You can build M1 version:

  1. download zip of this repo https://github.com/jakehilborn/displayplacer/archive/refs/heads/master.zip
  2. cd displayplacer-master
  3. make
  4. ignore the warning

BUT, it's still broken with a different error

(ipc/send) invalid destination port, code: 0x10000003

It seems Apple has truly discontinued some technology that this and other similar apps rely on.

mgumz commented 1 year ago

@FrankAllotta displayplacer works fine on my M1-Pro. See https://github.com/jakehilborn/displayplacer/issues/103#issuecomment-1304456912

which "package" did you use to install displayplacer?

FrankAllotta commented 1 year ago

I ended up downloading and the building from source. It works. But I'm trying to connect to an Mac EC2 instance. It says it can't find the resolution. Is there a way to add that resolution to the supported list?

ec2-user@ip-XXXXXX displayplacer-master % ./displayplacer list Persistent screen id: 8FD8600C-3A09-493E-9D8F-208ABA440F7F Contextual screen id: 1 Type: 24 inch external screen Resolution: 1024x768 Hertz: 60 Color Depth: 8 Scaling: off Origin: (0,0) - main display Rotation: 0 Enabled: true Resolutions for rotation 0: mode 0: res:800x600 hz:60 color_depth:8 scaling:on mode 1: res:800x600 hz:60 color_depth:8 mode 2: res:960x720 hz:60 color_depth:8 scaling:on mode 3: res:1024x768 hz:60 color_depth:8 <-- current mode mode 4: res:1024x768 hz:60 color_depth:8 scaling:on mode 5: res:400x300 hz:60 color_depth:8 scaling:on mode 6: res:512x384 hz:60 color_depth:8 scaling:on mode 7: res:512x384 hz:60 color_depth:8 mode 8: res:640x480 hz:60 color_depth:8 scaling:on mode 9: res:640x480 hz:60 color_depth:8 mode 10: res:640x480 hz:60 color_depth:8 mode 11: res:640x480 hz:60 color_depth:8 mode 12: res:672x504 hz:60 color_depth:8 scaling:on mode 13: res:720x480 hz:60 color_depth:8 mode 14: res:720x480 hz:60 color_depth:8

ec2-user@ip-XXXXXX displayplacer-master % echo $RES 1680x1050 ec2-user@ip-XXXXXX displayplacer-master % ./displayplacer "id:8FD8600C-3A09-493E-9D8F-208ABA440F7F res:${RES} scaling:off origin:(0,0) degree:0" Screen ID 8FD8600C-3A09-493E-9D8F-208ABA440F7F: could not find res:1680x1050 scaling:off

jakehilborn commented 1 year ago

@FrankAllotta @ideologysec @Danurigom @raywang @mikesmithgh @gingerbeardman Proper M1/M2 builds are fixed in release v1.3.0. I've updated the homebrew install to stop installing x86_64 binaries on peoples' Apple silicon machines.

Could you try it out and let me know if it works for you?

raywang commented 1 year ago

Hi @jakehilborn

Many thanks for the fix. displayplacer list can be functioning, but the resolution is still low (1024x768) that compared to x86 Mac instance

ec2-user@ip-172-31-25-165 ~ % displayplacer --version
displayplacer v1.3.0

Developer: Jake Hilborn
GitHub: https://github.com/jakehilborn/displayplacer
LinkedIn: https://www.linkedin.com/in/jakehilborn
Email: jakehilborn@gmail

ec2-user@ip-172-31-25-165 ~ % displayplacer list     
Persistent screen id: 3022D704-6A81-4B9D-AD98-2F3032886800
Contextual screen id: 1
Type: 24 inch external screen
Resolution: 1024x768
Hertz: 60
Color Depth: 8
Scaling: off
Origin: (0,0) - main display
Rotation: 0
Enabled: true
Resolutions for rotation 0:
  mode 0: res:800x600 hz:60 color_depth:8 scaling:on
  mode 1: res:800x600 hz:60 color_depth:8
  mode 2: res:960x720 hz:60 color_depth:8 scaling:on
  mode 3: res:1024x768 hz:60 color_depth:8 <-- current mode
  mode 4: res:1024x768 hz:60 color_depth:8 scaling:on
  mode 5: res:400x300 hz:60 color_depth:8 scaling:on
  mode 6: res:512x384 hz:60 color_depth:8 scaling:on
  mode 7: res:512x384 hz:60 color_depth:8
  mode 8: res:640x480 hz:60 color_depth:8 scaling:on
  mode 9: res:640x480 hz:60 color_depth:8
  mode 10: res:640x480 hz:60 color_depth:8
  mode 11: res:640x480 hz:60 color_depth:8
  mode 12: res:672x504 hz:60 color_depth:8 scaling:on
  mode 13: res:720x480 hz:60 color_depth:8
  mode 14: res:720x480 hz:60 color_depth:8

Execute the command below to set your screens to the current arrangement:

displayplacer "id:3022D704-6A81-4B9D-AD98-2F3032886800 res:1024x768 hz:60 color_depth:8 enabled:true scaling:off origin:(0,0) degree:0"
jakehilborn commented 1 year ago

@raywang Displayplacer can only choose from the resolution options provided by macOS. There are other tools out there for adding custom resolutions. One of them is SwitchResX.

raywang commented 1 year ago

Thanks a lot @jakehilborn, that makes sense to me

sean-scott-lr commented 1 year ago

Thanks a lot @jakehilborn, that makes sense to me

Dang, it actually wasnt clear to me that this tool didnt do this ( I kinda thought it was what it was for ). @raywang did you find something that would let you choose a higher res on an M1 mac from the command line? Or is the only option to buy a gui tool like switchresx?

jakehilborn commented 1 year ago

@sean-scott-lr Displayplacer lets you choose from the list of existing resolutions. The list that displayplacer shows is much larger than the built in macOS Settings, but is still limited by which resolutions are supported for your monitor. You can use SwitchResX to create new custom resolutions. Once those resolutions are created, they are available for displayplacer to choose from.

You can also follow guides like this to manually do what SwitchResX does to create custom resolutions.

raywang commented 1 year ago

Thanks a lot @jakehilborn, that makes sense to me

Dang, it actually wasnt clear to me that this tool didnt do this ( I kinda thought it was what it was for ). @raywang did you find something that would let you choose a higher res on an M1 mac from the command line? Or is the only option to buy a gui tool like switchresx?

Thanks for the reply, I use BetterDisplay to mirror a higher resolution, and that tools works on M1 Mac

raywang commented 1 year ago

@sean-scott-lr Displayplacer lets you choose from the list of existing resolutions. The list that displayplacer shows is much larger than the built in macOS Settings, but is still limited by which resolutions are supported for your monitor. You can use SwitchResX to create new custom resolutions. Once those resolutions are created, they are available for displayplacer to choose from.

You can also follow guides like this to manually do what SwitchResX does to create custom resolutions.

Thanks @jakehilborn for the guidance. In my case, I'm not running displayplacer on a local Mac, but a M1 Mac instance on AWS, so the highest resolution displayplacer can find is 1024x768. The only problem is displayplacer can find higher resolution on x86_64 Mac, but lower on M1 Mac