i3 does not manage displays and I move my laptop around a lot. This little script fills a much needed gap in my tiling window manager setup.
How it works
When executed, it checks the available and connected display outputs and sets the optimal resolution for each (as determined by xrandr). It can then also reset the wallpaper. The script then waits for a signal to restart the procedure.
At the moment I have three outputs defined:
VGA1. For now, layout configuration is hard-coded. I am hoping to make this more dynamic.
When lid is open (
-l): LVDS (Primary) on left with HDMI or VGA on right.
My laptop can only handle two displays at a time, so if both HDMI and VGA are present, or...
When lid is closed: HDMI (Primary) on left with VGA on right.
If you prefer, you could of course use arandr to generate layout scripts and replace my xrandr lines with those.
How to use it
Usage: display-visor [-f] [-i] [-l [switch]] -f, --feh Run feh bg script. Executes ~/.fehbg upon completion. -i, --i3 Test for i3wm instance. For avoiding conflict with multiple environments. -l, --lid Check laptop lid status. Ignored/Assumed closed if not given. It is possible to specify switch. Defaults to 'LID0' If unsure, look under /proc/acpi/button/lid/... -v, --version Print version info.
Simply set the script to start upon login.
i3wm config example:
exec --no-startup-id display-visor -f -l
The script waits for a
RTMIN+5 real-time signal. This can be sent with pkill like so:
pkill -x -RTMIN+5 display-visor
Some default event signallers are included.
- udev - A hotplug rule for when cables are (dis)connected.
- acpid - A lid switch event action. Useful when
-largument is used. 
- systemd-sleep - A wake-up hook. 
- Arch Linux - Available on the AUR as
Or manually with:
$ sudo make (un)install
 Remember to restart
acpid service for this to take effect.
 Please see Issue #8
I shamelessly stole some base functionality from codingtony. Thank you, kind sir.