refreshVP.sh 2.57 KB
Newer Older
David Beniamine's avatar
David Beniamine committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
#!/bin/bash

# Copyright (C) 2015  Beniamine, David <David.Beniamine@tetras-libre.fr>
# Author: Beniamine, David <David.Beniamine@tetras-libre.fr>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Get rights to access display
user=$(who | grep -v "root" | head -n 1 | cut -d ' ' -f 1)
if [ ! -z "$user" ]
then
	export DISPLAY=:0
	export XAUTHORITY="/home/$user/.Xauthority"
fi

# Default main screens (external VGA or internal screen)
MAIN_SCREENS="DP-3 VGA-1 LVDS-1 eDP1"

# auto detect main screen
for m in $MAIN_SCREENS
do
	if [ ! -z "$(xrandr | grep " connected" | grep $m)" ]
	then
		MAIN_SCREEN=$m
		break
	fi
done

if [ -z "$MAIN_SCREEN" ]
then
	# No main screen : use the first connected
	MAIN_SCREEN=$(xrandr | grep " connected" | head -n 1 | cut -d ' ' -f 1)
fi

screens=$(xrandr | grep " connected" | cut -f 1 -d ' ' \
    | sed -e 's/ /\n/g' | grep -v $MAIN_SCREEN)

# Auto detect best resolution
for m in $(xrandr | awk -v pattern="^$MAIN_SCREEN" '/^.* connected/{IN=0} $0 ~ pattern {IN=1} /^ /{if(IN==1){print $1}}')
do
	# echo "testing mode $m"
	for line in $(xrandr | awk -v pattern="^$MAIN_SCREEN" '/^.* connected/{IN=1} $0 ~ pattern {IN=0} {if(IN==1){print $1}}')
	do
		# echo "line $line"
		if [[ $line =~ [0-9]* ]]
		then
			# New mode
			if [ "$line" == "$m" ]
			then
				found=1
			fi
		else
			# New screen
David Beniamine's avatar
Fix  
David Beniamine committed
65
			if [ "$found" == 0 ]
David Beniamine's avatar
David Beniamine committed
66 67 68 69 70 71 72
			then
				break
			fi
			found=0
		fi
		# echo "Found ? $found"
	done
David Beniamine's avatar
Fix  
David Beniamine committed
73
	if [ "$found" == 1 ]
David Beniamine's avatar
David Beniamine committed
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
	then
		mode="--mode $m"
		break
	fi
done
# echo "mode $mode"

# Primary screen
cmd="xrandr --output $MAIN_SCREEN --auto $mode --rotate normal --primary"

# Add all connected as copy
prev_s=$MAIN_SCREEN
for s in $(echo -e $screens)
do
    cmd="$cmd --output $s --auto $mode --same-as $prev_s --rotate normal"
    prev_s="$s"
done

# Disable all disconnected screens
screens=$(xrandr | grep " disconnected" | cut -f 1 -d ' ' )
for s in $(echo -e $screens)
do
	cmd="$cmd --output $s --off"
done

# Debug
# date >> /var/log/vp.log
# echo $cmd >>  /var/log/vp.log
# echo $cmd

# Actually do stuff
$cmd