import disp from another project
This commit is contained in:
205
skel/disp
205
skel/disp
@@ -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
|
||||
_isconnected "$WORKSTATIONLEFT" || {
|
||||
echo "WORKSTATIONLEFT=$WORKSTATIONLEFT is not connected, turning everything on"
|
||||
_allon
|
||||
}
|
||||
|
||||
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 )"
|
||||
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 &
|
||||
_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"
|
||||
}
|
||||
fi
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user