7 ms·
Show HN: Change screen layout when connecting/disconnecting monitors
- paol 10y agoMay I ask what desktop environment you use, and what you usually use this for? I ask because a good DE should remember the settings pertaining to each monitor configuration (display positions of course, but also things like panels placed in secondary monitors). I've been using Plasma (KDE) for about a year and it handles this reasonably well.
- mbrock 10y agoLots of people don't use any "desktop environment." I just use ratpoison, for example.
- paol 10y agoWell, call it a "window manager" then, it still should handle this. But that's just my opinion of the responsibilities of WMs/DEs/whatever you call them, and I understand that some don't.
- creshal 10y agoNo, handling screen layout isn't the window manager's responsibility. That's what external tools like xrandr and its various GUIs are for.
- kingosticks 10y agoI agree that good software should do this but unfortunately multi-monitor configuration software isn't always very good. My Ubuntu 15.10 system with Unity desktop decides to move the taskbar/dock thing to the other monitor every time I turn the other monitor on in the morning. There is nothing in the Screen Display GUI that seems to allow me to stop this from happening. Out of frustration I've resorted to running the xrandr command a few times (once is sometimes not enough!) to fix it each time. This tool would at least automate the task for me and seems useful.
- tlackemann 10y agoMy laptop running i3 is often moved between a dock on my desk and used as a regular laptop, I have to say I've been looking to write something like this but it fell by the wayside. Very useful IMO
- cmiles74 10y agoGnome doesn't do this. Without fail, every time, it puts the dock on the wrong external display. Every. Time.
- bechampion 10y agofeel your frustration , I just never take mine of the dock cause i can't be arsed anymore.
- leppr 10y agoThis issue is the very reason I use KDE Plasma, I never came across another DE that handled multi-monitors correctly.
- jlpc 10y agoI use dwm on my laptop, and I have 2 external monitors. Every morning I had to make an xrandr call when I plugged them, and another one at the end of the day when I unplugged them to make my window manager aware of my screen layout. I was tired so I automated the thing.
- larkery 10y agoI have a little python script to do a similar thing: https://github.com/larkery/nix-session/blob/master/scripts/displays https://github.com/larkery/nix-session/blob/master/scripts/d... This remembers the randr state that's associated with plugged in displays by their EDID and the ACPI lid switch. When you change the randr state, it remembers it, and when you change what displays are connected or open the laptop lid, it loads a previously remembered state if there is one. The state saving and loading is done by arandr, which handles the resolution, position, and choice of primary output.
- betimsl 10y agoI used a bash script to do this, until I got a laptop that has only a mini-display port. Now I don't/can't connect to anything :(
- qwertymaster 10y agoWhy? you would've needed a cable anyway, so not owning the right one is no excuse, (m)DP can connect to pretty much anything using cheap _passive_ adapter cables.
- raphman_ 10y agoFor reference, there's also autorandr [1] and x-on-resize [2]. [1] https://github.com/wertarbyte/autorandr https://github.com/wertarbyte/autorandr [2] http://keithp.com/blogs/x-on-resize/ http://keithp.com/blogs/x-on-resize/
- qwertymaster 10y agoI am not sure if I just overlooked something, but autorandr doesn't seem to stay in the background and wait for a change but needs to be called manually, is that correct? While saving profiles can be useful if you do that a lot, that task is easily solved by writing the xrandr command used into a shellscript. x-on-resize looks like a good alternative to xoutputd though. It's probably worth to take a closer look at it and use the one whose code is simpler and easier to read.
- wlk 10y agoThis is a good documentation for autorandr: https://help.ubuntu.com/community/DynamicMultiMonitor https://help.ubuntu.com/community/DynamicMultiMonitor
- jlpc 10y agoThank you for those links, I actually tried to find something like this before implementing my own solution. I guess I didn't search enough.
- qwertymaster 10y agoThis is exactly what I needed, gonna put it in my window manager startup script. I already wrote a dock and undock script for my laptop a while ago, which I still had to run manually, so this is the perfect addition to that script. Though I had some problems compiling it. For others who want to try it: On some systems (gentoo here) flex replaces lex and you need to use -lfl to link it, even though lex seems to be ususally a symlink to flex, there is no symlink for the libraries. Also on some distributions yacc doesn't seem to come with liby anymore, just remove the -ly from cflags. TL;DR: Replace "LDADD+= -ll -ly -lX11 -lXrandr" with "LDADD+= -lfl -lX11 -lXrandr" to make it compile on Gentoo. Make sure yacc and flex are emerged.
- jlpc 10y agoThank you for your comment, I tested on Debian jessie, and OpenBSD only. I will try to make the build more compatible to other distro/OS.
- mikeokner 10y agoFor those on Mac, Slate will do the same thing: https://github.com/jigish/slate https://github.com/jigish/slate
- mwfunk 10y agoActually for those on the Mac, OS X will do the same thing. It tries to at least (not 100% reliable).
- mikeokner 10y ago"xoutputd is a daemon that monitors the connection state of outputs and then executes commands based on defined rules." I'm not aware of anything built in to OS X that allows you to execute scripts to perform custom actions when displays are connected/disconnected. OS X just tries to replicate the last layout you had. * Plugged into your desk monitor? You can have Slate hide Steam and put MacVim & iTerm side by side. * Plugged into your TV? You can have Slate run a script to make sure your Plex server is up and then full-screen your browser. * Etc.
- nasalgoat 10y agoSadly, Slate hasn't been updated in three years and recent El Capitan releases has broken it for certain applications, most importantly iTerm2.
- Carrok 10y agoI would recommend Hammerspoon for this type of automation. http://www.hammerspoon.org/ http://www.hammerspoon.org/
- andmarios 10y agoKDE does this automatically. I'd guess there is similar functionality for other DEs too.
- gtirloni 10y agoThe MATE DE seems to handle this pretty well too.
- shenal 10y agoAs an i3wm user I couldn't be happier
- jlpc 10y agoI'm glad it is useful for someone else.
- shenal 10y agoAs an i3wm user I couldn't be happier
- daveloyall 10y agohttps://en.wikipedia.org/wiki/Udev https://en.wikipedia.org/wiki/Udev
- jlpc 10y agoI wonder why I didn't think about it when looking for a solution at my problem.
- rndstr 10y agoHere is my script that supports scaling up if your main monitor is hidpi while the external one is not: https://github.com/rndstr/dotfiles/blob/master/bin/monitor-hotplug https://github.com/rndstr/dotfiles/blob/master/bin/monitor-h...