Files
q-tools/skel/disp
2020-06-11 09:06:44 +03:00

223 lines
6.3 KiB
Bash

#!/bin/bash
[[ -z "$DISPLAY" ]] && export DISPLAY=:0
CONFIGFOLDER=$HOME/.config/q-tools-disp/
CONFIG=${CONFIGFOLDER}disp.conf
ARANDR_FOLDER="$HOME/.screenlayout"
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
'
_allon() {
_list_connected | while read display; do
_xrandr --output $display --auto
done
exit
}
_cloneprimary() {
if [ -z "$PRIMARYRESOLUTION" ]; then
echo "Could not detect resolution"
exit
fi
_list_connected | while read display; do
_xrandr --output $display --mode "$PRIMARYRESOLUTION" --pos 0x0 --rotate normal
done
exit
}
_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
_list_all | 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
}
_list_connected | 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
_list_all | 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"
_list_all | grep -v "$WORKSTATIONLEFT" | grep -v "$WORKSTATIONRIGHT" | while read display; do
_xrandr --output $display --off
done
}
_isconnected() {
xrandr | grep -q "${1} connected"
}
_list_all() {
xrandr | grep -e " connected" -e " disconnected" | awk '{ print $1 }'
}
_list_connected() {
xrandr | grep -e " connected" | awk '{ print $1 }'
}
_setup() {
# config
mkdir -p "$CONFIGFOLDER"
[[ -f "$CONFIG" ]] || {
{
echo '#Displays seen by the system:'
xrandr | grep connected | awk '{ print "#"$1": "$2 }'
echo "$TEMPLATE"
} > "$CONFIG"
FIRST=$( _list_all | head -n1 )
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 "$@"
}
_list_arandr() {
[[ -d "$ARANDR_FOLDER" ]] || {
_arandr_empty
return
}
[[ $(ls -A "$ARANDR_FOLDER") ]] || {
_arandr_empty
return
}
ls -p1 "$ARANDR_FOLDER" | grep -v / | head -n 6 | awk '{printf(" %d %s\n", NR+3, $0) }'
}
_run_arandr_script() {
script_name=$( ls -p1 "$ARANDR_FOLDER" | grep -v / | awk 'NR=='$1'-3 {print $0}' )
[[ -f "$ARANDR_FOLDER/$script_name" ]] && {
echo Running script: $script_name
sh -x "$ARANDR_FOLDER/$script_name"
}
}
_arandr_empty() {
echo " [No arandr scripts]"
}
_help() {
echo 'DISPtool
Running without arguments shows display configuration choices
help Get this help message
setup Setup display names
all Try to turn all displays on
primary Clone primary display resolution to all other displays
Display configurations:
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'
Display settings saved with arandr are displayed last
'
_list_arandr
exit
}
[[ -f "$CONFIG" ]] && . "$CONFIG"
[[ -f "$CONFIG" ]] || CONFIGURED="(You do not have a configuration!)"
# Sub functions exit on their own
[[ "$1" = "help" ]] && _help
[[ "$1" = "--help" ]] && _help
[[ "$1" = "-h" ]] && _help
g=1
[[ -z "$2" ]] || g=$2
i=$1
PRIMARYRESOLUTION=$( xrandr | grep -w primary | grep -o '[0-9]\+x[0-9]\++[0-9]\++[0-9]\+' | grep -o '[0-9]\+x[0-9]\+' )
if [ -z "$1" ]; then
echo "Currently connected displays:"
xrandr | grep --color=always -e ".* connected" -e '.*\*' | awk '{ print $1,$2,$3} '
echo 'See further help by running with argument: -h
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')
a All displays on
p All displays on, with the resolution of primary display ('$PRIMARYRESOLUTION')
s Create and edit configuration '$CONFIGURED'
Settings by arandr:'
_list_arandr
read -N 1 i
echo ""
fi
case $i in
"a"*) _allon; ;;
"p"*) _cloneprimary; ;;
"s"*) _setup; ;;
0) ( arandr & ); ;;
1) _display_main; ;;
2) _display_presentation; ;;
3) _display_workstation; ;;
[4-9]) _run_arandr_script $i; ;;
esac