From e17c3d7ce93c20feeec71576e3bfe63e2d83edff Mon Sep 17 00:00:00 2001 From: "stefano.salvi" Date: Thu, 6 Nov 2025 15:30:59 +0000 Subject: [PATCH] three-screens Soluzione per tre schermi, come descritta nelle slide --- three-screens | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 three-screens diff --git a/three-screens b/three-screens new file mode 100644 index 0000000..29a8e6b --- /dev/null +++ b/three-screens @@ -0,0 +1,101 @@ +#!/bin/bash +function setClone { + PRIMARY=$1 + SECONDARY=$2 + while read -r l + do + if echo $l | grep -Eq "^[a-zA-Z]" + then + DEV=`echo $l | sed -e "s/ .*$//"` + MODELIST=`echo ${DEV} | sed -e "s/-/_/g"`_MODES + typeset -n CML=$MODELIST + elif echo $l | grep -q "^[0-9]" + then + MODE=`echo $l | sed -e "s/ .*$//"` + CML="${!MODELIST} $MODE" + fi + done + PRIMARY_LIST=`echo ${PRIMARY} | sed -e "s/-/_/g"`_MODES + SECONDARY_LIST=`echo ${SECONDARY} | sed -e "s/-/_/g"`_MODES + typeset -n PRIMARY_MODES=$PRIMARY_LIST + typeset -n SECONDARY_MODES=$SECONDARY_LIST + MODE="" + for pm in $PRIMARY_MODES + do + for sm in $SECONDARY_MODES + do + if [ $pm = $sm -a -z $MODE ] + then + MODE=$pm + fi + done + done + if [ -z "$MODE" ] + then + echo Nessun modo comune ERRORE! + exit 2 + else + echo $MODE + + xrandr --output $PRIMARY --mode $MODE + xrandr --output $SECONDARY --mode $MODE + xrandr --output $SECONDARY --same-as $PRIMARY + fi +} + +POSITION='right-of' +if [ -n "$1" ] +then + if [ $1 = '-l' ] + then + POSITION='left-of' + elif [ $1 = '-r' ] + then + POSITION='right-of' + elif [ $1 = '-u' ] + then + POSITION='above' + else + echo "-l Display piccolo a sinisitra" + echo "-r Display piccolo a destra" + echo "-l Display piccolo sopra" + exit 1 + fi +fi + + +PRIMARY=`xrandr | grep " connected" | grep primary | sed -e "s/ .*$//"` +# https://stackoverflow.com/questions/613572/capturing-multiple-line-output-into-a-bash-variable +declare R=($(xrandr | grep " connected" | grep -v primary | sed -e "s/[^ ]* c[^ ]* \([0-9]*\).*$/\1/")) + +if expr ${R[0]} \< ${R[1]} +then + SRES=${R[0]} +else + SRES=${R[1]} +fi + +echo risoluzion schermo piccolo $SRES + +SECONDARY=`xrandr | grep " connected" | grep -v primary | grep -v ${SRES}x | sed -e "s/ .*$//"` +TERTIARY=`xrandr | grep " connected" | grep -v primary | grep ${SRES}x | sed -e "s/ .*$//"` +if [ -z $SECONDARY ] +then + SECONDARY=`xrandr | grep " connected" | grep -v primary | grep ${SRES}x | grep -v $TERTIARY | sed -e "s/ .*$//"` +fi + +# SECONDARY=DP-1 +# TERTIARY=DP-2 + +echo Primary $PRIMARY +echo Secondary $SECONDARY +echo Tertiary $TERTIARY + +xrandr | setClone $PRIMARY $SECONDARY +xrandr --output $TERTIARY --$POSITION $PRIMARY + + +# echo "xrandr | setClone $PRIMARY $SECONDARY same-as" +# xrandr | setClone $SECONDARY $TERTIARY same-as +# echo "xrandr --output $TERTIARY --$POSITION $PRIMARY" +# xrandr --output $SECONDARY --$POSITION $PRIMARY