[HN Gopher] macOS CLI tool to configure multi-display resolution...
       ___________________________________________________________________
        
       macOS CLI tool to configure multi-display resolutions and
       arrangements
        
       Author : dwardu
       Score  : 155 points
       Date   : 2023-01-23 09:49 UTC (13 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | mnemnc wrote:
       | Not calling it displaycer is a missed opportunity.
        
         | jakehilborn wrote:
         | Trust me, I considered it lol.
        
       | deanc wrote:
       | This hasn't been updated in a while. What I really want from this
       | kind of tool is the ability to take a snapshot of my ALL display
       | settings, and just click something on my desktop or bind a
       | keyboard shortcut, or run a command which will restore it -
       | exactly how it should be. This would include, exact screen
       | positioning, refresh rate, resolutions etc.
       | 
       | I don't know what triggers it, but MacOS is really bad at
       | changing these settings if you use multiple displays through the
       | week (e.g. different coworking spaces).
        
         | artificialLimbs wrote:
         | The closest I've found to doing this is Mosaic. I paid for it
         | because it was so useful. You can bind keyboard shortcuts and
         | make any selected window snap to a particular screen and size.
         | With the introduction of Ventura's Stage Manager (which is a
         | poorly disguised Task Bar that should be at the bottom of the
         | screen occupying all the unused real estate next to/around the
         | dock), I can use Mosaic to snap my windows to the fullest size
         | possible while still being able to see Stage Manager and this
         | gives me a window management experience on Mac that is almost
         | as good as Windows.
        
           | deanc wrote:
           | This is not an issue of windows. This is an issue of display
           | settings.
        
         | cyberge99 wrote:
         | There's a tool called "Later" that does this:
         | 
         | https://getlater.app/
        
           | deanc wrote:
           | This is apps and windows. I'm talking about actual display
           | settings which don't reliably persist across situations.
        
         | joshstrange wrote:
         | It might not have been updated but it works perfectly. Also it
         | does everything you just asked for except invocation (you have
         | to setup the keybind yourself, for myself I have an Alfred
         | workflow I run to do it).
         | 
         | Here is an example of a displayplacer command (it will generate
         | this for you based on your current config, you just need to
         | save and re-run it to get back to that state):
         | /opt/homebrew/bin/displayplacer
         | "id:6696B81B-DF77-45C3-9D39-AFA151E17417 res:2560x1440 hz:74
         | color_depth:8 scaling:off origin:(0,0) degree:0"
         | "id:353C959C-561C-48BA-B804-84C448FAF99F res:1440x2560 hz:75
         | color_depth:8 scaling:off origin:(-1440,-444) degree:90"
         | "id:3892CD52-313D-4B1B-9743-DB3165484F16 res:1920x1080 hz:60
         | color_depth:8 scaling:off origin:(307,-1080) degree:0"
         | "id:EB4F0496-96F8-4DA9-B14A-6023FE90C3B1 res:1440x2560 hz:75
         | color_depth:8 scaling:off origin:(2560,-499) degree:270"
        
       | xvilka wrote:
       | It reminds of seemingly abandoned "mas"[1] tool that allows using
       | command line to install and update applications without launching
       | AppStore.
       | 
       | [1] https://github.com/mas-cli/mas
        
       | seatbelts wrote:
       | I was stoked to see this, unfortunately, this has gone 4 years
       | without a release (last released in 2019)
       | 
       | The issue log has several issues where Ventura users mention it
       | not working at all, on M1 architectures. Can anyone on an M1 or
       | M2 confirm this works for them? I'm still on Intel.
        
         | jakehilborn wrote:
         | I placed on order for an M2 MacBook for my wife last week. I'm
         | planning on adding native support within a few months of the
         | laptop arriving.
        
         | fruit2020 wrote:
         | Latest code is from 6 months ago. You can probably build it
         | yourself
        
         | jacobwg wrote:
         | The version installable with Homebrew is working for me on
         | Ventura / M1.
         | 
         | I have an occasional issue where one of my external displays
         | switches from 60 Hz to 40 Hz, and I use displayplacer to toggle
         | the refresh rate to reset the monitor back to 60:
         | https://github.com/jacobwgillespie/dotfiles/blob/main/bin/fi...
        
       | asmor wrote:
       | I have a setup where I share a screen between two computers (a
       | macOS productivity machine and a Windows gaming laptop / x86 VM
       | lab). I did look at a lot of tools to be able to disable one of
       | the screens in macOS so I wouldn't need to fiddle with cables,
       | and I remember that this one didn't work.
       | 
       | I use mirror-displays[1] (alongside Bunch, which also turns on
       | VBAN Talkie for audio) now. Mirroring a screen is the only way to
       | approximate disabled screens.
       | 
       | [1]: https://github.com/fcanas/mirror-displays
        
         | dylan604 wrote:
         | if you have multiple cables attached to the monitor, isn't it
         | easier to use the monitor's input selection buttons to do this?
         | with the monitors i have, when i manually switch inputs, it
         | signals to the other computer the monitor is no longer
         | available and my mac auto switches like was not plugged in.
         | when i switch back to the mac's input for the monitor, the mac
         | auto recognizes it is available and reconfigures the layout.
         | all as i was expecting it to do
        
       | umberthreat34g wrote:
       | The problem that I have with my M1 is that I have 2 HP monitors
       | with USB-C connectors and when I plug the USB/C Thunderbolt cable
       | in to the monitor, often its not recognized and I often need to
       | power off the machine, the monitor and or switch the ports in
       | some combination, I really wish I could just have a manual probe
       | I could run reliably to tell macOS,the monitor that they are
       | connected. Any ideas?
        
         | jakehilborn wrote:
         | As far as I understand, there is a low level race condition
         | here. The order that the monitors come alive and initialize
         | with the OS is non deterministic. This can cause the left
         | monitor and the right monitor, for example, to swap IDs.
        
       | anthonyaykut wrote:
       | I use Display Maid, and it is pretty OK for my simple needs:
       | https://funk-isoft.com/display-maid.html
        
         | therealmarv wrote:
         | is not this for window locations? It seems it's not for monitor
         | config backup and restore.
        
       | ricardobeat wrote:
       | I really liked the display settings built-in to MacOS, very
       | straightforward.
       | 
       | Unfortunately, with Ventura, they now hid the arrangement in a
       | separate options window that takes extra clicks to reach. A step
       | backwards :/
        
         | donutdan4114 wrote:
         | I noticed this as well. Now if i have to rearrange i try to
         | remember to open spotlight (CMD+Space) and type "arrange"..
         | will take you straight to the option.
        
           | alin23 wrote:
           | Whoa, never thought to try Spotlight for this, thanks for the
           | hint! I was mostly using Option+BrightnessUp then clicking on
           | Arrange.
        
         | wpm wrote:
         | Settings in Ventura are a step back. Just...the whole thing.
         | It's gracious to call it an amateur effort.
        
           | wlesieutre wrote:
           | I think the justification was that the old System Preferences
           | window size was constraining what they could fit.
           | 
           | Unfortunately the new replacement allows them to not think
           | very hard about how it's designed, just dump some everything
           | in a list.
        
           | artificialLimbs wrote:
           | Terrible design. This is not a phone, Apple. It is a
           | computer.
        
             | robertoandred wrote:
             | It was the old design that was an iOS-like grid of icons,
             | not the new one.
        
               | dylan604 wrote:
               | now, it is like the iOS settings menu of infinite scroll.
        
       | squidofbits wrote:
       | Missed opportunity to call it displaycer
        
       | MattIPv4 wrote:
       | The one feature I really want for window management on macOS is
       | the ability to split fullscreen applications horizontally, for my
       | vertical monitor. macOS lets you split a fullscreen app
       | vertically so you can have two on the same screen, but when a
       | monitor is oriented vertically you can still only split the
       | screen vertically, not horizontally. Sigh.
        
         | umberthreat34g wrote:
         | Check out, https://rectangleapp.com/ this might be what you are
         | looking for.
        
           | hugey010 wrote:
           | Rectangle is amazing and I highly recommend it, but it's a
           | window manager and not a display manager.
        
             | _joel wrote:
             | Another window manager https://ianyh.com/amethyst/
        
               | reddit_clone wrote:
               | I have tried Amythyst.
               | 
               | Yabai, didn't try since it wants to disable system
               | integrity protection. Not sure if will work in locked
               | down corporate machines.
               | 
               | Now back to Rectangle and arranging the windows myself in
               | multiple desktops.
        
         | yrcyrc wrote:
         | I think spectacle app can help.
         | https://github.com/eczarny/spectacle
        
           | jorge-d wrote:
           | +1 been using Spectacle for years and it work perfectly.
           | 
           | However I just saw that the project is no longer maintained
           | as of... two days ago ! I guess I'll have to find an
           | alternative down the road.
        
             | Aaron2222 wrote:
             | Echoing what umberthreat34g said, check out Rectangle
             | (https://github.com/rxhanson/Rectangle).
        
         | ricardobeat wrote:
         | Isn't this possible with the new iOS-like split view in
         | Ventura? Sadly not supported by many apps yet (eg VSCode).
        
         | ggsp wrote:
         | Yet another option: https://github.com/koekeishiya/yabai
        
           | athorax wrote:
           | I will always +1 for yabai, closest thing to i3wm I have
           | found on macos
        
           | woodlander87 wrote:
           | I will also +1 this as an i3wm user. I do use displayplacer
           | and yabai together though. I have two identical external
           | monitors that don't behave well with MacOS. Apparently the
           | monitor's unique id's are not unique in MacOS. This causes
           | MacOS to get them mixed up any time I disconnect from them. I
           | have a keyboard shortcut that uses displayplacer to toggle
           | between the two monitor valid configurations.
        
       | alin23 wrote:
       | I recently launched some macOS Shortcuts in Lunar
       | (https://lunar.fyi/#shortcuts) that can arrange monitors in pre-
       | defined layouts like:                   2 Screens Vertically #
       | 2 Screens Horizontally [?][?]         4 Screens in a 3-above-1
       | configuration [?]#[?]         3 Screens in a 2-above-1
       | configuration _         3 Screens Horizontally [?]#[?]
       | 
       | It's not the same as DisplayPlacer but for a lot of people this
       | could be enough. They are free and can be used without a Lunar
       | Pro license.
       | 
       | For those having trouble with monitors being swapped around by
       | the OS, there's also a _Swap screen positions_ action in
       | Shortcuts that you can bind to a hotkey to quickly fix this. It
       | even swaps rotations, which is especially useful for those using
       | portrait monitors (one at 90deg and one at 270deg).
        
         | bygoneera wrote:
         | Currently using displayplacer with BTT to make keyboard
         | shortcuts. When moving to different hoteling desks, sometimes
         | the laptop is on the left of the additional monitor and other
         | times on the right. Now I have two keybinds that orient my
         | layout. I've used Lunar specifically for the dim below 0
         | functionality, (thanks for the ongoing development), I'll have
         | to try the new shortcuts to see if they can replace
         | displayplacer.
        
         | deanc wrote:
         | Lunar is awesome. Just FYI there is a link in the following
         | text which doesn't work, so i can't actually see an examples.
         | 
         | > Check out the "Shortcuts" page to find some useful pre-made
         | shortcuts that you can add with a click.
         | 
         | Is it possible to snapshot exact screen positioning using
         | shortcuts? I'd like to take a snapshot of all my settings
         | (orientation, refresh rate, hdr settings, and _exact_ screen
         | positioning) and restore using a shortcut when ever it changes.
        
           | alin23 wrote:
           | Thanks! That "Shortcuts" page is still WIP, I hoped to launch
           | it the same day I released the update but life happened.
           | 
           | No, Lunar doesn't have that snapshot functionality because
           | it's really hard to make it work for every possible setup.
           | UUIDs can change between connections and the user can be left
           | with an unusable snapshot. Or, because of how the HDMI/DP
           | connection was negotiated, some display modes might not be
           | available until a disconnect/reconnect cyle.
           | 
           | And it's impossible to detect the problem and convey it to
           | the user when it happens, it mostly looks like an app bug no
           | matter what I try.
           | 
           | But I am planning to add it in the future, at least in a
           | rudimentary form.
        
       | Syzygies wrote:
       | I had a rather expensive monitor that would sometimes refuse to
       | wake up. I ended up scripting an Alfred keystroke to use
       | AppleScript and System Preferences to toggle the resolution,
       | which would wake up the screen. This would be easier, as I could
       | simply SSH in from another machine.
        
       | joshstrange wrote:
       | displayplacer is an awesome tool that I've mentioned on HN a
       | number of times before. I have my displayplacer command setup to
       | be run by Alfred so that when I connect my monitors I can just
       | invoke Alfred, type "disp", and hit enter.
       | 
       | The next step would be to have it auto-run when monitors were
       | attached but this works well enough for me. displayplacer for
       | monitor alignment, phoenix for window management, and my own
       | hacked together mousejump for jumping over the monitor gaps make
       | for an awesome experience.
       | 
       | [0] https://github.com/kasper/phoenix
       | 
       | [1] https://github.com/joshstrange/mousejump
        
       | parasti wrote:
       | Great timing. Today I discovered that the iMac 24" screen can't
       | be rotated. I have it on a VESA mount, so I can rotate it
       | physically, but screen rotation settings are inaccessible (even
       | with the Option key) via system settings. When I attempt rotation
       | via displayplacer (tool in OP), it just complains that it "could
       | not find res". There's a surprising lack of good search results
       | on this. Seems to be related to the iMac overheating, but that's
       | information coming from a random forum post that I found, not
       | from Apple.
       | 
       | Edit: found Display Rotation Menu via DisplayPlacer Github
       | issues, which is so far the only tool that worked for me.
        
         | alin23 wrote:
         | I published a CLI for doing rotation for any display here:
         | https://github.com/alin23/mac-utils/blob/main/bin/RotateDisp...
         | 
         | Source code in the same repo: https://github.com/alin23/mac-
         | utils/blob/main/RotateDisplay....
         | 
         | As long as the system reports `true` for
         | `canChangeOrientation`, then the CLI should work.
         | 
         | Lunar (https://lunar.fyi/) can also do that and provides some
         | useful hotkeys if you happen to rotate displays often:
         | https://files.alinpanaitiu.com/2106f2eac02df0c3eec379ef19965...
        
           | aikinai wrote:
           | Do any of these methods work to rotate a Sidecar display?
           | Right now I'm using BetterDisplay to creat a dummy and then
           | rotate and stream that dummy to the Sidecar display, but it's
           | a bit unwieldy and sometimes unreliable (due to an Apple bug
           | apparently).
        
             | alin23 wrote:
             | Unfortunately not, the system reports false for
             | canChangeOrientation on a Sidecar display:
             | mac-utils  ./bin/RotateDisplay sidecar 0         ID  UUID
             | Can Change Orientation  Orientation Name         1
             | 37D8832A-2D66-02CA-B9F7-8F30A301B230    true
             | 0deg          Built-in Liquid Retina XDR Display         6
             | BF8D0007-9573-49E5-8130-75991ECB2F15    false
             | 0deg          Sidecar         4
             | FB46E28E-5B98-475A-A610-C15237238C8D    true
             | 0deg          LG Ultra HD              The display does not
             | support changing orientation: Sidecar [ID: 6]
        
               | aikinai wrote:
               | I see... Thanks for confirming!
        
       | Analemma_ wrote:
       | Does this somehow make settings more persistent than the System
       | Pref^H^H^H^H Settings panel? Ventura has this infuriating bug
       | where every single time it goes to sleep it forgets everything
       | about the monitors I have plugged into my Thunderbolt dock -
       | resolution, arrangement, refresh rate, everything. It is driving
       | me bonkers.
        
         | jakehilborn wrote:
         | displayplacer lets you specify all those attributes you
         | mentioned as shell command so you can fix everything with one
         | "click".
        
       | derhuerst wrote:
       | I have used cscreen [1][2] for a while to switch resolutions
       | beyond what macOS offers via its GUI. You can install it via
       | `brew install cscreen`.
       | 
       | It seems like displayplacer is the spiritual and de facto
       | successor to screen. [3]
       | 
       | [1] https://www.pyehouse.com/cscreen/#comments [2]
       | https://apple.stackexchange.com/a/73696 [3]
       | https://apple.stackexchange.com/a/173875
        
       | bobberkarl wrote:
       | Is there one for windows?
        
       | jamespo wrote:
       | Related to this does anyone know a way to turn off displays in
       | MacOS? I have 2 screens connected to an M1 Mac Mini.
        
         | jakehilborn wrote:
         | The latest code on the master branch of displayplacer supports
         | this. Clone the repo and run `make` to build it. Run
         | `displayplacer "id:34686E82-0CED-DF86-AFC7-AA1A8EB5CFC0
         | res:1440x2560 enabled:false"` with your screen ID and it will
         | set the screen to all black plus remove the screen from the
         | view of the OS.
        
         | alin23 wrote:
         | Lunar's BlackOut feature can do that:
         | https://lunar.fyi/pro#blackout
         | 
         | The feature is especially useful if you want to turn them off
         | in software and keep them still connected to the Mac so that
         | you can turn them on at a later time using a hotkey for
         | example.
         | 
         | If you simply want to turn them off completely, just like you
         | would press the physical power button of the monitor, then
         | Lunar can do that by sending a DDC toggle power command, but
         | there are some caveats to be aware of:                   works
         | only if the monitor can be controlled through DDC (most
         | monitors work)         can't be used to power on the monitor
         | when a monitor is turned off or in standby, it does not accept
         | any commands from a connected device
         | 
         | I recently wrote a deep dive into how I tried to find a better
         | way to turn off these screens using private macOS APIs:
         | https://alinpanaitiu.com/blog/turn-off-macbook-display-clams...
        
       | matt_daemon wrote:
       | Would love if these tools also had the ability to save
       | application window settings too.
        
         | shireboy wrote:
         | This is what I'm looking for too. I have three places I plug in
         | displays: home office, work office, no displays (coffee shop).
         | I have specific windows I want in specific places when plugged
         | into external displays at home or work. Browser, Remote Desktop
         | tool, chat client, etc. Every time I come back from the coffee
         | shop, I have to manually re-arrange my windows. First world
         | problem I know but every time I think "it should be smart
         | enough to land these windows in this spot"
         | 
         | Similar with code editors: it should be smart enough to re-
         | arrange my docks based on screen size. When I have big screen,
         | expand side and bottom sub-windows. When I'm just on laptop
         | screen, auto hide them.
        
         | alin23 wrote:
         | Ivan Sapozhnik (https://twitter.com/iSapozhnik) is working on
         | adding this to his Lasso app (https://thelasso.app/). It's not
         | an easy problem to solve as there's no API that can just save
         | and restore windows, a lot of inventive solutions have been
         | tried and failed.
         | 
         | But I see Ivan very determined to solve this.
        
           | viraptor wrote:
           | Do you know of any specific writeups? I couldn't find any
           | obvious results, but I'm curious where the difficulties lay.
           | Tbh, I'd be happy with just "windows with this parent process
           | go here" list - I wonder how far off that is.
        
             | alin23 wrote:
             | I don't have any link on hand right now for a writeup, but
             | I've followed yabai's
             | (https://github.com/koekeishiya/yabai) development closely
             | ever since it was called kwm and saw the limitations of
             | macOS's public API to managing windows.
             | 
             | The _windows with this parent process go here_ thing can be
             | solved easily, and can even be done as a one-liner with
             | yabai. Example of moving all the windows of Sublime Text to
             | display 2:                   yabai -m query --windows | jq
             | '.[] | select(.app == "Sublime Text") | .id' | xargs -I
             | '{}' -- yabai -m window '{}' --display 2
             | 
             | It can even be automated by adding a rule in ~/.yabairc
             | (although that might be undesirable as it will always be
             | enforced even if you want to move the window manually):
             | yabai -m rule --add app="Sublime Text" label="sublime-
             | display-2" display=2
             | 
             | Yabai can also resize the window to whatever size you want,
             | or move it to a specific space, and it can even do that
             | based on the window title.
             | 
             | It has this much power because it uses macOS's private APIs
             | from SkyLight.framework (the macOS window and display
             | manager): https://github.com/koekeishiya/yabai/blob/master/
             | src/misc/ex...
        
         | artificialLimbs wrote:
         | Closest thing I've found for getting this done is Mosaic.
        
       | haliskerbas wrote:
       | I've used hammerspoon for part of this functionality. Anyone
       | else?
        
         | spudlyo wrote:
         | I use Hammerspoon for managing my windows, but never for
         | managing my displays. It shouldn't surprise me that it can do
         | it, I'll check it out.
        
       | bryanrasmussen wrote:
       | I really think this needs some screenshots.
        
         | tobr wrote:
         | Would you even see what it does in a screenshot? I think you
         | would need a photo.
        
           | bryanrasmussen wrote:
           | well when saying screenshot I of course figured that the idea
           | of multiple screenshots, perhaps also with some explanatory
           | text, would be implied, but yeah sure some photos would also
           | be good.
        
       | Uupis wrote:
       | There was a two-three year period where macOS would incessantly
       | forget my display arrangement and orientation.
       | 
       | An Alfred action to run the displayplacer command and then after
       | a second to activate my 'default' Moom window layout made for a
       | great workaround.
        
         | m4tthumphrey wrote:
         | Can you elaborate? I have this problem every day.. macOS just
         | seems incapable of remembering my display arrangement.
        
           | Uupis wrote:
           | I never managed to _actually_ fix it. Maybe the links in the
           | sibling comment can be of help there. But I feel like it
           | became less of a nuisance after Monterey. Nowadays, it seems
           | to move my app windows between displays after sleep, but that
           | is resolved by applying the window layout snapshot from Moom.
           | 
           | My exact script seems to be gone -- goes to show that I've
           | not needed it for a while now -- but the gist of my
           | workaround was:
           | 
           | * I set up my display arrangement the way I wanted,
           | 
           | * followed the instructions in the displayplacer repo to work
           | out a command to reproduce the desired arrangement,
           | 
           | * put the displayplacer command and the AppleSript call to
           | Moom in the same shell script, with a short sleep between the
           | two,
           | 
           | * and created an Alfred action to make it a tiny bit more
           | convenient for myself.
           | 
           | The display arrangement would get out of sorts, but getting
           | it back to my liking was just an Alfred action away.
           | 
           | You don't have to use Alfred or Moom specifically, those are
           | just the convenience utilities I prefer.
        
           | lathiat wrote:
           | It is typically because you have more than one of the same
           | monitor with identical EDID information.
           | 
           | Documented and explained here:
           | https://spin.atomicobject.com/2018/08/24/macbook-pro-
           | externa...
           | 
           | Possible fix: https://gist.github.com/ejdyksen/8302862?permal
           | ink_comment_i...
        
             | rmckayfleming wrote:
             | I used to have two otherwise identical displays, but it
             | still does it for me now that all of my displays are
             | different. Notably, I think this stuff happens more when
             | you have 3+ monitors. I don't remember having as many
             | issues with just two displays.
        
       | looseyesterday wrote:
       | The description could be better. Would love this tool with a GUI
        
         | jakehilborn wrote:
         | I've seen a few comments mention the description now. Thank you
         | for the feedback. I wrote displayplacer because all the other
         | tools were GUIs and I needed something scriptable. Consider
         | using SwitchResX for a multi-display profile GUI tool.
        
         | bombolo wrote:
         | KDE has it.
        
       ___________________________________________________________________
       (page generated 2023-01-23 23:01 UTC)