| Linux/UNIX Linuxverfechter finden hier Weggefährten. |
Diskussion: Hilfe bei Bash Script Anpassung im Forum Linux/UNIX, in der Kategorie Operating Systems; Anzeige Hi, ich bräuchte ein wenig Hilfe ein Bash Script zu debuggen und anzupassen. Es geht um ein Script, das ...
![]() |
| | #1 (permalink) | ||
| Senior Member Registriert seit: 26.03.06 ![]() Likes: 16 | Anzeige Hi, ich bräuchte ein wenig Hilfe ein Bash Script zu debuggen und anzupassen. Es geht um ein Script, das auf ein ACPI Event hin, die Video Modes durch-"toggle"-t. Also von INTERNAL_ONLY nach MIRROR nach EXTERNAL_ONLY nach BOTH und das Ganze mittels xrandr. Das Script stammt aus dem ThinkWiki hat aber einige Probleme so wie ich das sehe: Code: #!/bin/bash
# External output may be "VGA" or "VGA-0" or "DVI-0" or "TMDS-1"
EXTERNAL_OUTPUT="VGA"
INTERNAL_OUTPUT="LVDS"
EXTERNAL_LOCATION="left"
# Figure out which user and X11 display to work on
# TODO there has to be a better way to do this?
X_USER=$(w -h -s | grep ":[0-9]\W" | head -1 | awk '{print $1}')
export DISPLAY=$(w -h -s | grep ":[0-9]\W" | head -1 | awk '{print $3}')
# Switch to X user if necessary
if [ "$X_USER" != "$USER" ]; then
SU="su $X_USER -c"
else
SU="sh -c"
fi
case "$EXTERNAL_LOCATION" in
left|LEFT)
EXTERNAL_LOCATION="--left-of $INTERNAL_OUTPUT"
;;
right|RIGHT)
EXTERNAL_LOCATION="--right-of $INTERNAL_OUTPUT"
;;
top|TOP|above|ABOVE)
EXTERNAL_LOCATION="--above $INTERNAL_OUTPUT"
;;
bottom|BOTTOM|below|BELOW)
EXTERNAL_LOCATION="--below $INTERNAL_OUTPUT"
;;
*)
EXTERNAL_LOCATION="--left-of $INTERNAL_OUTPUT"
;;
esac
# Figure out current state
INTERNAL_STATE=$($SU xrandr | grep ^$INTERNAL_OUTPUT | grep " con" | sed "s/.*connected//" | sed "s/ //" | sed "s/ .*//g")
EXTERNAL_STATE=$($SU xrandr | grep ^$EXTERNAL_OUTPUT | grep " con" | sed "s/.*connected//" | sed "s/ //" | sed "s/ .*//g")
echo "INTERNAL_STATE=$INTERNAL_STATE"
echo "EXTERNAL_STATE=$EXTERNAL_STATE"
if [ -z "$INTERNAL_STATE" ]; then
STATE="external"
elif [ -z "$EXTERNAL_STATE" ]; then
STATE="internal"
else
INTERNAL_STATE=$(echo $INTERNAL_STATE | sed "s/[0-9]*x[0-9]*//")
EXTERNAL_STATE=$(echo $EXTERNAL_STATE | sed "s/[0-9]*x[0-9]*//")
if [ "$INTERNAL_STATE" = "$EXTERNAL_STATE" ]; then
STATE="mirror"
else
STATE="both"
fi
fi
function screen_external(){
$SU "xrandr --output $INTERNAL_OUTPUT --off"
$SU "xrandr --output $EXTERNAL_OUTPUT --mode 1024x768"
}
function screen_internal(){
$SU "xrandr --output $INTERNAL_OUTPUT --auto"
$SU "xrandr --output $EXTERNAL_OUTPUT --off"
}
function screen_mirror(){
$SU "xrandr --output $INTERNAL_OUTPUT --auto"
$SU "xrandr --output $EXTERNAL_OUTPUT --mode 1024x768 --same-as $INTERNAL_OUTPUT"
}
function screen_both(){
$SU "xrandr --output $INTERNAL_OUTPUT --auto"
$SU "xrandr --output $EXTERNAL_OUTPUT --mode 1024x768 $EXTERNAL_LOCATION"
}
function screen_toggle(){
case "$STATE" in
internal)
echo "Switching to Mirror"
screen_mirror
;;
mirror)
echo "Switching to External Only"
screen_external
;;
external)
echo "Switching to Both"
screen_both
;;
both)
echo "Switching to Internal Only"
screen_internal
;;
*)
echo "Switching to Internal as State could not be determined"
screen_internal
;;
esac
}
# What should we do?
DO="$1"
if [ -z "$DO" ]; then
if [ $(basename $0) = "thinkpad-fn-f7" ]; then
DO="toggle"
fi
fi
case "$DO" in
toggle)
echo "TOGGLE"
screen_toggle
;;
internal)
echo "INTERNAL"
screen_internal
;;
external)
echo "EXTERNAL"
screen_external
;;
mirror)
echo "MIRROR"
screen_mirror
;;
both)
echo "BOTH"
screen_both
;;
status)
echo "Current Fn-F7 state is: $STATE"
echo
echo "Attached monitors:"
$SU xrandr | grep "\Wconnected" | sed "s/^/ /"
;;
*)
echo "usage: $0 <command>" >&2
echo >&2
echo " commands:" >&2
echo " status" >&2
echo " internal" >&2
echo " external" >&2
echo " mirror" >&2
echo " both" >&2
echo " toggle" >&2
echo >&2
;;
esac Code: # Figure out current state INTERNAL_STATE=$($SU xrandr | grep ^$INTERNAL_OUTPUT | grep " con" | sed "s/.*connected//" | sed "s/ //" | sed "s/ .*//g") EXTERNAL_STATE=$($SU xrandr | grep ^$EXTERNAL_OUTPUT | grep " con" | sed "s/.*connected//" | sed "s/ //" | sed "s/ .*//g") echo "INTERNAL_STATE=$INTERNAL_STATE" echo "EXTERNAL_STATE=$EXTERNAL_STATE" Zitat:
Zitat:
cu serow | ||
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| /proc in BASH script bearbeiten | Serow | Linux/UNIX | 8 | 12.04.09 12:58 |
| [BASH] Im Script Benutzer wechseln | Eydeet | Code Kitchen | 4 | 08.04.08 17:37 |
| farbiger Akkustatus in Bash - Script | naked_chef | Linux/UNIX | 6 | 03.09.06 15:55 |
| hilfe zu einem script | j1gg4m4n | Code Kitchen | 8 | 06.02.06 11:14 |
| Script für FTP-User-Rechte-Anpassung *g* | dfi | Internet Allgemein | 0 | 06.08.05 20:29 |