Skip to content

Instantly share code, notes, and snippets.

@pavelzw
Forked from amanusk/display.sh
Last active September 23, 2021 11:34
Show Gist options
  • Save pavelzw/655c42b41f15fccc43842c20a38b9e94 to your computer and use it in GitHub Desktop.
Save pavelzw/655c42b41f15fccc43842c20a38b9e94 to your computer and use it in GitHub Desktop.
Easily change between laptop and external displays in i3 + dmenu
#!/bin/bash
# This script is intended to make switching between laptop and external displays easier when using i3+dmenu.
# To run this script, map it to some shortcut in your i3 config, e.g.:
# bindsym $mod+p exec --no-startup-id $config/display.sh
# IMPORTANT: run chmod +x on the script to make it executable
# The result is 4 options appearing in dmenu from which you can choose
# This is your default laptop screen, detect by running `xrandr`
INTERNAL_OUTPUT="eDP-1"
# This is used to determine which external display you have connected
# This may vary between OS. e.g VGA1 instead of VGA-1
if [ `xrandr | grep '^VGA-1' | grep -c ' connected '` -eq 1 ]; then
EXTERNAL_OUTPUT="VGA-1"
elif [ `xrandr | grep '^DVI-1' | grep -c ' connected '` -eq 1 ]; then
EXTERNAL_OUTPUT="DVI-1"
elif [ `xrandr | grep '^HDMI-1' | grep -c ' connected '` -eq 1 ]; then
EXTERNAL_OUTPUT="HDMI-1"
elif [ `xrandr | grep '^HDMI-2' | grep -c ' connected '` -eq 1 ]; then
EXTERNAL_OUTPUT="HDMI-2"
elif [ `xrandr | grep '^HDMI-3' | grep -c ' connected '` -eq 1 ]; then
EXTERNAL_OUTPUT="HDMI-3"
elif [ `xrandr | grep '^DP-1' | grep -c ' connected '` -eq 1 ]; then
EXTERNAL_OUTPUT="DP-1"
elif [ `xrandr | grep '^DP-2' | grep -c ' connected '` -eq 1 ]; then
EXTERNAL_OUTPUT="DP-2"
elif [ `xrandr | grep '^DP-3' | grep -c ' connected '` -eq 1 ]; then
EXTERNAL_OUTPUT="DP-3"
else
# you need a notification manager like dunst in order for `notify-send` to work
notify-send "No external display available."
exit 1
fi
# choices will be displayed in dmenu
choices="laptop\ndual\nexternal\nclone"
# Your choice in dmenu will determine what xrandr command to run
chosen=$(echo -e $choices | dmenu -i)
# xrander will run and turn on the display you want, if you have an option for 3 displays, this will need some modifications
case "$chosen" in
external) xrandr --output $INTERNAL_OUTPUT --off --output $EXTERNAL_OUTPUT --auto --primary ;;
laptop) xrandr --output $INTERNAL_OUTPUT --auto --primary --output $EXTERNAL_OUTPUT --off ;;
clone) xrandr --output $INTERNAL_OUTPUT --auto --output $EXTERNAL_OUTPUT --auto --same-as $INTERNAL_OUTPUT ;;
dual) xrandr --output $INTERNAL_OUTPUT --auto --output $EXTERNAL_OUTPUT --auto --right-of $INTERNAL_OUTPUT --primary ;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment