Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Linux/UNIX Linuxverfechter finden hier Weggefährten.

Hilfe bei Bash Script Anpassung

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 ...

Antwort
Alt 30.09.08, 10:06   #1 (permalink)
Senior Member
 
Registriert seit: 26.03.06
Serow Leistung: 8086
Likes: 16
Standard Hilfe bei Bash Script Anpassung

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
Erstmal braucht aber nur folgender Teil ein wenig Hilfe:

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"
Und zwar ist das Problem, dass INTERNAL_STATE=(normal ist statt leer zu sein. Der Output von xrandr der ein leeres INTERNAL_STATE bringen sollte sieht so aus:

Zitat:
LVDS connected (normal left inverted right x axis y axis etc etc)
Ist das Ding verbunden sollte eher sowas hier da stehen:
Zitat:
LVDS connected 1024x768+1024+0 (normal left inverted right x axis y axis etc etc)
Hab leider wenig Plan von diesem grep/sed-Kram :S

cu
serow
Serow ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Operating Systems » Linux/UNIX » Hilfe bei Bash Script Anpassung
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ä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


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61