62 comments

[ 4.9 ms ] story [ 56.0 ms ] thread
Zero fiddling, but substantial financial outlay
Any somewhat-modern monitor with multiple outputs should be able to do this. DDC support has been around for a while
Isn’t the answer buy a kvm switch? If yes this could have been really short
(comment deleted)
I have a couple of Eizo EV3285, which have enough separate physical inputs for the 3 machines I use to drive them. Only real PITA is having to press the input selector on both. Must admit I wasn't even aware of DDC!
I did something similar last year with a monitor without built-in KVM but with good DCC support (Ultrasharp U3417W) and Synergy [0].

I use Synergy as part of my desk setup already, but needed a way to view the UI of a normally headless machine. The solution I built was a small shell script that terminated the active Synergy session and started a new one with a different config file (so keyboard/mouse input would map to the normally-headless machine), and fired off a DCC command to the monitor to change its input. The same script ran with a different argument would switch back to the normal display/control configuration. This solution worked pretty well until I was able to retire the headless machine early this year.

[0] https://symless.com/synergy

This is great. The Holy Grail of work/personal computing setups IMO. Too bad it’s so expensive.

I wish a KVM switch was a standard component of normal priced monitors these days. Especially one that also routed through all your peripherals, speakers, and everything.

I have a few boxes that I switch between, but for some software it's nicer that my "main machine" be on DVI, and everything else HDMI. I may have to look at some scripting option where if the keyboard / mouse disappear (KVM switched away) change the display to use the HDMI input.

I do worry that would just add more trouble / race conditions / issues around this stuff. I feel like nvidia + linux + monitors doing anything other than staying on + attached all the time causes some headaches.

It never occurred to me that you can send commands across DDC to your monitor. Binding that to a key on the keyboard in different OSs to trigger the monitor's built in KVM is a nice touch. I only change between my computers a couple times a day else I'd be setting this up this evening
If you turn one computer display off as in "xrandr --output DVI-D-0 --off", the monitor automatically selects some other computer to display.

Thus I have 2 computers and 3 displays, and I can do sentences like "displays 13", which uses only displays 1 and 3 and sends ssh-command "displays 2" to the other computer.

How do you change display-modes with ssh?

  os.system(f'ssh -Y {compu2} "DISPLAY=:0; display.py {modes};"')
What a great idea. It should be obvious and easy but DDC commands are hard to find and should be documented better.

I have a Dell U4323QE in the office and look forward to trying this out. I wondered if it was the same DDC commands so I googled a little and found this gist (concerning DDM):

https://gist.github.com/nebriv/cb934a3b702346c5988f2aba5ee39...

Which has the very useful comment:

https://gist.github.com/nebriv/cb934a3b702346c5988f2aba5ee39...

Which states:

#define LUMINANCE 0x10 #define CONTRAST 0x12 #define VOLUME 0x62 #define MUTE 0x8D #define PBP 0xE9 #define SWAP_USB 0xE7 #define SWAP_INPUT 0xE5 #define INPUT 0x60 #define SUB_INPUT 0xE8 #define INPUT_ALT 0xF4 // alternate address, used for LG exclusively? #define STANDBY 0xD6

I much prefer simple DDC commands over using something like Synergy or Barrier. I think it is a much cleaner solution.

Yeah, this all sounds good in theory, but there's a lot of edge cases. For example, for me switching between Mac and Linux what often happens is that Linux just for some reason the it turns off the monitor port and it's black until I reboot and there was no easy way to get it back. This is while using fancy Dell monitors built-in KVM. Ultimately, I have settled on remote desktops as a more viable and quicker option.
You can do this with even less fiddling just by getting a KVM that supports video. There are reasonably priced ones that can even do 4K 60Hz. This also means you don't have to deal with monitors that don't implement input switching via DDC/CI (thanks LG).
I use 2 computers without a KVM. My keyboard, mouse, and soundbar all support Bluetooth. All wired to the PC by default. When I switch to the Mac, I just flip each device to Bluetooth mode.
I gave up on a hardware solution to this and currently just use Screen Sharing to "remote" into my personal machine from my work machine, which I guess only works because they're both macs, although VNC probably solves this in a cross platform way. I have an Apple studio monitor so built-in KVM isn't possible, although maybe there's a jailbreak for it since it has its own processor and firmware? I still just vastly prefer the quality of Apple displays so I optimize for that first.

Also, OT but I have the same keyboard as OP and love it :) I want to hack a TouchID key from the Magic Keyboard I bought into the chassis. But it can't traverse the Screen Sharing hack, so I do still think about this from time to time.

I am just using RDP from one PC into another presently -- to solve this in a low complexity way. Tried a lot of approaches in the past -- none were reliable for me.
back in the '00s i used a hardware kvm that could be controlled by the keyboard with some weird key combo (~ ~ (1|2)? maybe?). these days i strongly prefer deskflow (oss version of synergy) for this sort of thing or just ordinary remote desktop for the secondary. (depends on the task, if you're just building for the secondary or reading email it doesn't really matter- but if you're developing interactive applications or you need to reboot a bunch or something, then having the physical hardware with a local head can help).
I didn't know that DDC was a thing! Super cool.
This is great, I have a monitor with built in KVM (CORSAIR XENEON 27QHD240 OLED)

m1ddc works fine on my Mac, but why isn't there a single multiplatform cli tool that can be ran on Mac/Linux/Windows?

I need a Windows one for this to be useful for me.

Just dropping a note to say I’ve had the same monitor for a year and I absolutely love it. I don’t care about this seamless switching — I just use HDMI1 for Xbox, HDMI2 for my computer, and then swap hobby/work when needed. It’s also good motivation to turn off the work laptop when I’m done with the day.

The monitor is fantastic though. I’ve had no issues yet, knock on wood.

I have my Windows gaming rig in a rack at home, and run Apollo [1] on it. Using that, I can game on any Apple TV (with an Xbox controller) or the MacBook (connected to a display/keyboard/mouse) anywhere in my home. With wired networking 60fps at 4K is no problem at all.

This would be easy to set up the other way around, too: having a gaming rig on your desk with Moonlight, and running Linux on another machine somewhere in the network with Apollo to host the development setup.

No KVM (or KVM-equipped monitor) or other special hardware needed.

1: https://github.com/ClassicOldSong/Apollo

With Windows and AutoHotkey and https://www.nirsoft.net/utils/control_my_monitor.html

You can add this .ahk script to run at startup:

    ^F4::
      Run C:\Users\YourNameHere\Documents\AutoHotkey\ControlMyMonitor /SwitchValue Primary 60 17 3
      Return
Where the file path is where you've put ControlMyMonitor.exe, "Primary" means the main Windows display, the "60" means input select, and the "17" and "3" are the values you observe in ControlMyMonitor when each display you want to switch between is enabled.

You can now press Ctrl+F4 to toggle inputs.

Thank you precisely what I was looking for on the Windows side