#!/bin/bash # configure the display names with "xrandr" LAPTOP=LVDS1 ANALOG=VGA1 DIGITAL=HDMI1 # You hay have to change ANALOG/DIGITAL in the outputs, especially for Workstation choices # The choices may be the same! PRESENTATION=$ANALOG WORKSTATION=$ANALOG #Helper functions when using lxpanel (Lubuntu / LXDE) function reset_lxpanel() { if lxpanel_running; then PROFILE=$( lxpanel_profile ) sed -i -e 's,edge=.*,edge=bottom,' -e "s,allign=.*,allign=left," -e "s,widthtype=.*,widthtype=percent," -e "s,width=.*,width=100," $HOME/.config/lxpanel/${PROFILE}/panels/panel fi } function side_lxpanel() { if lxpanel_running; then PROFILE=$( lxpanel_profile ) sleep 1 LAPTOPWIDTH=$( xrandr -q | grep $LAPTOP | cut -d" " -f3 | cut -dx -f1 ) sed -i -e 's,edge=.*,edge=bottom,' -e "s,allign=.*,allign=$1," -e "s,widthtype=.*,widthtype=pixel," -e "s,width=.*,width=$LAPTOPWIDTH," $HOME/.config/lxpanel/${PROFILE}/panels/panel echo "Warning: if LAPTOP has more pixels in the vertical direction, panel is invisible! change configuration of this script, and/or current setup ( lxpanelctl config )" fi } function restart_lxpanel() { if lxpanel_running; then LXCMD=$( ps -ocommand= --pid $( pgrep -u $USER -n lxpanel ) ) lxpanelctl restart sleep 2 lxpanel_running || { echo "lxpanel segfaulted. restarting..." nohup $LXCMD &> /dev/null & } fi } function lxpanel_running() { pgrep -u $USER -n lxpanel &> /dev/null } function lxpanel_profile() { ps -ocommand= --pid $( pgrep -u $USER -n lxpanel ) | sed 's/.*--profile \([^ ]\+\).*/\1/' } if [ -z "$1" ] then echo 'Choose display mode: 1) Laptop only 2) Presentation (2nd arg for gamma correction) 3) Workstation: 2nd screen on the right 4) Workstation: 2nd screen on the left 5) Workstation: external display only ' read -N 1 i echo "" else i=$1 fi if [ -z "$2" ] then g=1 else g=$2 fi oppos=left if [ "$2" = "left" ] then oppos=right fi case $i in 1) xrandr --output $LAPTOP --auto --gamma $g:$g:$g --output $PRESENTATION --off --output $WORKSTATION --off; reset_lxpanel; ;; 2) xrandr --output $LAPTOP --mode 1024x768 --pos 0x0 --output $PRESENTATION --mode 1024x768 --pos 0x0 --gamma $g:$g:$g; reset_lxpanel; ;; 3) xrandr --output $LAPTOP --auto --output $WORKSTATION --auto --right-of $LAPTOP; side_lxpanel right; ;; 4) xrandr --output $LAPTOP --auto --output $WORKSTATION --auto --left-of $LAPTOP; side_lxpanel left; ;; 5) xrandr --output $LAPTOP --off --output $WORKSTATION --auto; reset_lxpanel; ;; esac restart_lxpanel