import disp from another project

This commit is contained in:
ville rantanen
2018-08-09 10:16:48 +03:00
parent c49ad39b5e
commit 4fd7599e3d

209
skel/disp
View File

@@ -1,79 +1,164 @@
#!/bin/bash
# configure the display names with "xrandr"
LAPTOP=LVDS1
ANALOG=VGA1
DIGITAL=HDMI1
[[ -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
# The choices may be the same!
PRESENTATION=$ANALOG
WORKSTATION=$ANALOG
# 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
'
#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
_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
}
function side_lxpanel() {
if lxpanel_running; then
PROFILE=$( lxpanel_profile )
sleep 1
LAPTOPWIDTH=$( xrandr -q | grep $WORKSTATION | 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 )"
_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
}
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
_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
}
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/'
}
[[ -f "$CONFIG" ]] && . "$CONFIG"
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
# 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 ""
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; ;;
all) _allon; ;;
setup) _setup; ;;
0) arandr; ;;
1) _display_main; ;;
2) _display_presentation; ;;
3) _display_workstation; ;;
esac
restart_lxpanel