#!/bin/bash [[ -z "$DISPLAY" ]] && export DISPLAY=:0 CONFIGFOLDER=$HOME/.config/q-tools-disp/ CONFIG=${CONFIGFOLDER}disp TEMPLATE='# configure the display names with "xrandr" MAIN=eDP-1 ANALOG=VGA-1 DIGITAL=DP-1 # You hay have to change ANALOG/DIGITAL in the outputs, # especially for Workstation choices # If you want a single display as your workstation setup, # leave WORKSTATIONRIGHT empty WORKSTATIONLEFT=$MAIN WORKSTATIONRIGHT=$DIGITAL ' _display_main() { [[ -f "$CONFIG" ]] || { echo "ERROR: You do not have configuration yet" _help } _isconnected "$MAIN" || { echo "Display MAIN=$MAIN is not connected, trying to turn all on. Please check your setup: $CONFIG" _allon } _xrandr --output "$MAIN" --auto --gamma $g:$g:$g xrandr | grep " connected" | awk '{ print $1 }' | grep -v "$MAIN" | while read display; do _xrandr --output $display --off done } _display_presentation() { _isconnected "$MAIN" || { echo "Display MAIN=$MAIN is not connected, trying to turn all on. Please check your setup: $CONFIG" _allon } xrandr | grep " connected" | awk '{ print $1 }' | while read display; do _xrandr --output $display --mode 1024x768 --pos 0x0 --gamma $g:$g:$g done } _display_workstation() { [[ -f "$CONFIG" ]] || { echo "ERROR: You do not have configuration yet" _help } if [ -z "$WORKSTATIONLEFT" ];then echo "WORKSTATIONLEFT not defined, turning everything on" _allon fi _isconnected "$WORKSTATIONLEFT" || { echo "WORKSTATIONLEFT=$WORKSTATIONLEFT is not connected, turning everything on" _allon } if [ -z "$WORKSTATIONRIGHT" ];then # Single display setup _xrandr --output "$WORKSTATIONLEFT" --auto --gamma $g:$g:$g xrandr | grep " connected" | awk '{ print $1 }' | grep -v "$WORKSTATIONLEFT" | while read display; do _xrandr --output $display --off done return fi # Two display setup _isconnected "$WORKSTATIONRIGHT" || { echo "WORKSTATIONRIGHT=$WORKSTATIONRIGHT is not connected, turning everything on" _allon } _xrandr --output "$WORKSTATIONLEFT" --auto --gamma $g:$g:$g --output "$WORKSTATIONRIGHT" --auto --gamma $g:$g:$g --right-of "$WORKSTATIONLEFT" xrandr | grep " connected" | awk '{ print $1 }' | grep -v "$WORKSTATIONLEFT" | grep -v "$WORKSTATIONRIGHT" | while read display; do _xrandr --output $display --off done } _isconnected() { xrandr | grep -q "${1} connected" } _allon() { xrandr | grep " connected" | awk '{ print $1 }' | while read display; do _xrandr --output $display --auto done exit } _setup() { # config mkdir -p "$CONFIGFOLDER" [[ -f "$CONFIG" ]] || { echo "$TEMPLATE" > "$CONFIG" FIRST=$( xrandr | grep connected | head -n1 | awk '{ print $1 }' ) sed -i 's,^MAIN=.*,MAIN='$FIRST',' "$CONFIG" } echo '# Current configuration:' echo $CONFIG echo ====================== cat "$CONFIG" echo ====================== . "$CONFIG" echo '# Displays at this computer:' xrandr | grep -e '.*connected' -e '.*\*' --color=always xdg-open "$CONFIG" echo "Add something to your LXPanel to create the configuration (launcher icon etc...)" exit } _xrandr() { echo xrandr "$@" xrandr "$@" } _help() { echo 'SBL-DISP Running without arguments shows display configuration choices help Get this help message setup Setup display names all Try to turn all displays on Following arguments require "setup" 0 Run "arandr" to setup manually 1 Main display only 2 Presentation: Main and external screen clones 3 Workstation: Run your workstation mode, setup in the configuration file Second argument to any previous sets the gamma correction value Configuration file: '$CONFIG' ' exit } [[ -f "$CONFIG" ]] && . "$CONFIG" # Sub functions exit on their own [[ "$1" = "help" ]] && _help [[ "$1" = "--help" ]] && _help [[ "$1" = "-h" ]] && _help g=1 [[ -z "$2" ]] || g=$2 i=$1 if [ -z "$1" ]; then echo "Currently connected displays:" xrandr | grep --color=always -e ".* connected" -e '.*\*' | awk '{ print $1,$2,$3} ' echo 'Menu choices: 0 Run "arandr" to setup manually 1 Main display only ('$MAIN') 2 Presentation: Main and all external screen clones (1024x768) 3 Workstation: Your personal configration ('$WORKSTATIONLEFT + $WORKSTATIONRIGHT', panel on '$PANEL') See further help by running with argument: -h ' read -N 1 i echo "" fi case $i in all) _allon; ;; setup) _setup; ;; 0) arandr; ;; 1) _display_main; ;; 2) _display_presentation; ;; 3) _display_workstation; ;; esac