Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

02.05.2010, 17:16

[gelöst] AWK GREP und SED

Moin moin!

ich stecke schon wieder in einer Sackgasse.

Derzeit beschaeftige ich mich ein wenig mit der DualScreen Anzeige bzw Steuerung via CommandLine. Dazu habe ich ein kleines Script geschrieben, welches auch im Anhang zu finden ist.

Ziel soll es sein, dass ich dieses Script starte und ich die Moeglichkeit habe meinen Bildschirm dynamisch zu erweitern / clonen ... etc.

Da die Werte fuer LVDS (das ThinkPad LCD) sich nicht aendern, konnte ich das schon einarbeiten. (Und ich bin mir der Tatsache bewuszt, dass es mind. einen besseren weg dafuer gibt)

Aber spaetestens bei dem externen Monitor komme ich nicht weiter.

Die Ausgabe sieht bei mir wie folgt aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
> xrandr 
Screen 0: minimum 320 x 200, current 2048 x 768, maximum 2048 x 1024
VGA connected 1024x768+0+0 (normal left inverted right x axis y axis) 304mm x 228mm
   1024x768       75.0*+   74.9     75.1     70.1     60.0  
   832x624        74.6  
   800x600        75.0     74.9     60.3     56.2  
   640x480        75.0     74.8     66.7     60.0  
   720x400        70.1  
LVDS connected 1024x768+1024+0 (normal left inverted right x axis y axis) 286mm x 214mm
   1024x768       60.0*+   50.0  
   800x600        60.3  
   640x480        59.9  
TMDS-1 disconnected (normal left inverted right x axis y axis)
Theoretisch suche ich nur nach allen Zeilen, die zwischen "^VGA.*$" und "^LVDS.*$" stehen und mit "^\ " beginnen, damit ich die vom Monitor unterstuetzten Aufloesungen in das Script einbauen kann. - Was allerdings je nach Monitor eine unterschiedliche Anzahl an Zeilen hervorbringt. Und genau an dieser Stelle komme ich nicht dahin, wo ich hin will. Derzeit habe ich das "geloest" indem ich einer Variable fest den Wert "1024x768" zugewiesen habe.

Hat da vielleicht jemand eine Idee, wie ich das loesen koennte?
»BorneBjoern« hat folgende Datei angehängt:
  • video.sh (2,84 kB - 8 mal heruntergeladen - zuletzt: 03.02.2011, 14:27)
for Windows problems: reboot
for Linux problems: be root

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

2

02.05.2010, 22:42

RE: AWK GREP und SED

hallo,
ein ähnliches problem habe ich ebenfalls. ich benutze auf der arbeit meinen eepc (mit slax auf einer sd-karte) und wenn ich einen beamer anschliesse, muss ich ds X neu starten (ist doof), ich hatte aber rein zeitlich bis jetzt keine möglichkeit das zu ändern.

ok, vielleicht ist der zeitpunkt ja nun gekommen, denn das ma-abitur ist durch und etwas freiraum winkt.

was genau willst du erreichen?
soll das script die maximale auflösung des externen monitors ermitteln und diese dann konfigurieren?
wäre ja sinnvoll.
rein scriptmässig wäre das ein minimalr aufwand.
auf meinem eeepc müsste ich erst einmal testen, inwieweit xrandr funktioniert.
melde mich morgen wieder mit ergebnissen.

gruß
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

3

02.05.2010, 22:50

RE: AWK GREP und SED

so, der xrand - kram funktioniert mit der slax. ich schau mir das morgen mit beamer mal an und scripte ein wenig. wird auch langsam zeit, dass ich das bei mir einrichte :-)

und übrigens ist es seit langem mal wieder ein schönes und sinnvolles problem. hier ist es ja recht ruhig geworden, aber in vielen anderen foren sieht es ähnlich aus.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »linuxerr« (02.05.2010, 22:51)


4

02.05.2010, 23:58

RE: AWK GREP und SED

Hehe, schoen deine Antwort zu lesen.

Am Wetter kanns bisher nicht wirklich gelegen haben, dass hier so wenig los ist. Vielleicht ist ja das Linux 15.6 mittlerweile so gut geworden, sodass die Leude keine Probleme mehr damit haben. Meinst du, das sollte man sich mal genauer ansehen? ;)

Da ich das Ganze bereits auf einem Slack 12.2 soweit zum Laufen gebracht habe, haette es mich sehr gewundert, wenn du es bei Slax nicht hinekommen haettest.

Ich wollte eigentlich noch einen Schritt weitergehen und in meinem Script nicht nur dynamisch die maximale Aufloesung mitteilen, sondern alle Modi des externen Monitors auflisten lassen, sodass ich wann immer ich es moechte / brauche die Aufloesung aendern kann.

Bisher kann ich das allerdings nur fuer den ThinkLCD, da sich bei diesem Display die Anzahl der Optionen nich aendert. Wobei ich auch sagen musz, dass ich da ein wenig schummel, da es sich auch in diesem Fall nicht wirklich um eine dynamische generierung der moeglichen Optionen ist.

Richtig dynamisch waere:

- suche nach LVDS am Zeilenanfang,
- zeige nur alle direkt folgenden und mit (mind.) einem Leerzeichen beginennden Zeilen an, die sich vor der naechsten Zeile befinden, welche NICHT mit einem Leerzeichen beginnt
- zeige nur die erste spalte an
- bestimme die Anzahl der Moeglichen Optionen
- gibt alle Optionen durchnummeriert aus

Und dann das gleiche noch einmal fuer den externen Monitor (VGA).

Und eigentlich funktioniert das Script ja auch schon. Nur halt leider noch nicht komplet dynamisch fuer den externen Monitor. Was zur Folge hat, dass ich jedesmal, wenn ein anderer Monitor / Beamer angeschlossen wird, mein Script bearbeiten muss. Und wenn ich dann das Script so weit habe, dass es genau das tut, lege ich den Aufruf des Scriptes auf den Lenovo ShortCut: <FN>+<F7>. Aber auch dass ist fluxbox sei dank auch kein Problem. =D
for Windows problems: reboot
for Linux problems: be root

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BorneBjoern« (03.05.2010, 00:12)


linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

5

03.05.2010, 19:12

RE: AWK GREP und SED

so, ich habe jetzt mal eine scanfunktion gebaut, die die xrandr-ausgabe in einem array ablegt.
in dem array befindet sich jeweils eine kommentarzeile zum gefundenen modus (gerade indexnummer) und eine zeile mit den entsprechenden xrandr-optionen zum aufruf des modus (ungerade indexnummer).
ich habe in die optionen erst einmal das nötigste aufgenommen.
ich möchte das ganze dann mit dialog oder Xdialog zu einem kleinen menü machen.
schau es dir mal an und probier es mal bitteaus, ob es soweit funktioniert.

Quellcode

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
#!/bin/bash
SCREEN=();
SCREENNR="";
SCREENVAR="";
SCREENLEN=0;

function scan(){
 local DUMMY DEVICE;
 while read LINE
 do
  case "$LINE" in
   Screen\ *:\ *)
    DUMMY="${LINE#Screen\ }"
    SCREENNR="${DUMMY%%:*}"
    SCREEN[${SCREENNR}]="320x200"
    echo "Screenzeile ${SCREENNR}"
   ;;
   *\ connected\ *)
    DEVICE="${LINE%%\ connected*}"
    echo "${DEVICE} is on"
   ;;
   *\ disconnected\ *)
    DEVICE="${LINE%%\ disconnected*}"
    echo "${DEVICE} is off"
   ;;
   [0-9][0-9][0-9]*x[0-9][0-9][0-9]*)
    MODE="${LINE%%\ *}"
    SCREEN[${SCREENLEN}]=" SCREEN ${SCREENNR}\t DEVICE ${DEVICE}\t MODE ${MODE}"
    let "SCREENLEN= SCREENLEN + 1"
    SCREEN[${SCREENLEN}]=" --output ${DEVICE} --mode ${MODE} --screen ${SCREENNR}"
    let "SCREENLEN= SCREENLEN + 1"
    echo "ModeLine Mode=${MODE} (${LINE})"
   ;;
   *)
    #echo $LINE | od -c
    echo "Zeile $LINE unbekannt!"
   ;;
  esac

 done < <( xrandr )
}

scan
for X in $( seq 0 2 ${SCREENLEN} )
do
 echo -e "${SCREEN[$X]}"
done
»linuxerr« hat folgende Datei angehängt:
  • vi. (1 kB - 6 mal heruntergeladen - zuletzt: 03.02.2011, 14:27)
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »linuxerr« (03.05.2010, 20:34)


linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

6

03.05.2010, 20:36

RE: AWK GREP und SED

also jetzt bin ich schon einigermaßen zufrieden mit dem script:

Quellcode

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
#!/bin/bash
SCREEN=();
SCREENNR="";
SCREENVAR="";
SCREENLEN=0;

function scan(){
 local DUMMY DEVICE;
 while read LINE
 do
  case "$LINE" in
   Screen\ *:\ *)
    DUMMY="${LINE#Screen\ }"
    SCREENNR="${DUMMY%%:*}"
    SCREEN[${SCREENNR}]="320x200"
    echo "Screenzeile ${SCREENNR}"
   ;;
   *\ connected\ *)
    DEVICE="${LINE%%\ connected*}"
    echo "${DEVICE} is on"
   ;;
   *\ disconnected\ *)
    DEVICE="${LINE%%\ disconnected*}"
    echo "${DEVICE} is off"
   ;;
   [0-9][0-9][0-9]*x[0-9][0-9][0-9]*)
    MODE="${LINE%%\ *}"
    SCREEN[${SCREENLEN}]="SCREEN:${SCREENNR}_DEVICE:${DEVICE}_MODE:${MODE}"
    let "SCREENLEN= SCREENLEN + 1"
    SCREEN[${SCREENLEN}]=" --output ${DEVICE} --mode ${MODE} --screen ${SCREENNR}"
    let "SCREENLEN= SCREENLEN + 1"
    echo "ModeLine Mode=${MODE} (${LINE})"
   ;;
   *)
    #echo $LINE | od -c
    echo "Zeile $LINE unbekannt!"
   ;;
  esac

 done < <( xrandr )
}

scan
DSTRING=""
X=0
COUNT=0
for X in $( seq 0 2 $((SCREENLEN-1)) )
do
 DSTRING="${DSTRING} ${COUNT} ${SCREEN[$X]}"
 let "COUNT=COUNT + 1"
done
if RESULT="$( dialog --title Videomodi --menu TEST 20 70 15 ${DSTRING} 3>&1 1>&2 2>&3 3>&- )"; then
 echo $RESULT
 let "RESULT= RESULT + RESULT + 1"
 XRANDROPT="${SCREEN[$RESULT]}"
 xrandr ${XRANDROPT}
fi
»linuxerr« hat folgende Datei angehängt:
  • vi. (1,27 kB - 8 mal heruntergeladen - zuletzt: 03.02.2011, 14:27)
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

7

03.05.2010, 20:43

RE: AWK GREP und SED

so, jetzt werde ich noch eine markierung für den momentan aktiven modus einbauen, das ganze in eine schleife setzen, die mit cancel verlassen wird und dann muss ich noch einen screen1 konfigurieren, damit ich einen dualscreen habe, denn das große X-fenster bei der hohen auflösung ist auf dem kleinen internen monitor nicht so toll.
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

8

03.05.2010, 23:56

RE: AWK GREP und SED

hmm ich wollte nicht, dass jemand mir die Loesung auf einem Silbertablett serviert.

Daher werde ich noch ein paar Fragen stellen, um dein Script komplett zu verstehen und anschlieszend das meinige zu schreiben. *g

Auch auf die Gefahr hin, dass meine Fragen sich als zu elementar erweisen, ist stelle sie trotzdem:
Es sind hauptsaechlich Fragen zum Thema Variablen denn da hab ich noch ein wenig Nachholbedarf.

- hat die Variablendefinition SCREEN=() zur Folge?

- warum DUMMY="${LINE#Screen\ } Bezeichnet das die Zeile, die mit Screen beginnt? Wenn ja, warum # und nicht ^?

- die doppelten %% bei SCREENNR="${DUMMY%%:*}" Ich habe absolut keine Ahnung, aber ich vermute ein Array.

Aber, ich habe auch was verstanden, was ich schon laenger zu verstehen versucht habe. SCREEN[${SCREENLEN}] ergibt eine variable Variable, welche hochzaehlt.

Und den Rest versteh ich spaeter auch noch! =D

Okay, das war's fuer den Moment.

Danke dir fuer dein Script und die damit verbundenen Anstoesze.
for Windows problems: reboot
for Linux problems: be root

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

9

04.05.2010, 00:49

RE: AWK GREP und SED

Zitat

Original von BorneBjoern
hmm ich wollte nicht, dass jemand mir die Loesung auf einem Silbertablett serviert.

entschuldigung, aber ich habe, wie geschildert, das selbe problem, dass auf lösung wartet und deshalb habe ich meinen vorschlag hier gepostet.

Zitat

Auch auf die Gefahr hin, dass meine Fragen sich als zu elementar erweisen, ist stelle sie trotzdem:

ich habe hier auch schon fragen gestellt, die zb wohl für strcat elementar waren und die antwort hat mir immer geholfen.
nur darauf kommt es an.

Zitat

- hat die Variablendefinition SCREEN=() zur Folge?

die bash kann im gegensatz zb zur sh eindimensionale arrays mit ganzzahligem index verwalten. die sequenz SCREEN=() definiert ein array mit dem namen SCREEN, dass leer ist, also kein element enthält.

Zitat

- warum DUMMY="${LINE#Screen\ } Bezeichnet das die Zeile, die mit Screen beginnt? Wenn ja, warum # und nicht ^?

die sequenz ${LINE#Screen\n} ist eine parameterexpansion der bash. sie gibt den string aus der variable LINE zurück, aus dem der kleinstmögliche linksseitige teil, der mit dem pattern "Screen " übereinstimmt, entfernt wurde. das sind funktionen, die oftmals zb mit cut oä erledigt werden. die bash selbst kann das ebenfalls und es ist ressourcenschonender die bash dann auch zu verwenden, als ein externes kommando aufzurufen.

Zitat

- die doppelten %% bei SCREENNR="${DUMMY%%:*}" Ich habe absolut keine Ahnung, aber ich vermute ein Array.

nein, das ist ebenfalls eine parameterexpansoin der bash. sie gibt den string aus LINE zurück, aus dem der größtmögliche rechtsseitigen teil der mit ":*" übereinstimmt, entfernt wurde.

Zitat

Aber, ich habe auch was verstanden, was ich schon laenger zu verstehen versucht habe. SCREEN[${SCREENLEN}] ergibt eine variable Variable, welche hochzaehlt.

nein, mit hochzählen hat das nichts zu tun. hier wird ein arrayelement in dem array SCREEN angelegt. der index steht dabei in der variable SCREENLEN

schau mal zb hier http://www.schlaefendorf.de/linux/scripte.html, da habe ich ein paar wichtige sachen zur bash niedergeschrieben.
das hilft dir vielleicht beim verständnis.

Zitat

Danke dir fuer dein Script und die damit verbundenen Anstoesze.

bitte
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »linuxerr« (04.05.2010, 00:53)


linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

10

04.05.2010, 20:36

RE: AWK GREP und SED

so,
ich habe das script heute noch ein wenig angepasst.
der aktivierte modus wird angezeigt, das script erkennt, wenn kein X erreichbar ist, führt die abfrage in einer schleife aus und macht einen neuscan und
momentan bin ich recht zufrieden. ich habe es heute mit einem externen beamer und monitor, sowie mit einem remote-desktop (X -query host) ausprobiert und es funktioniert bis hierhin wunderbar.

Quellcode

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/bin/bash
SCREEN=();
SCREENLEN=0;

function scan(){
 local DUMMY DEVICE SCREENNR RETURN;
 RETURN=0
 SCREEN=()
 SCREENLEN=0
 while read LINE
 do
  case "$LINE" in
   Can\'t\ open\ display)
    RETURN=1
   ;;
   Screen\ *:\ *)
    DUMMY="${LINE#Screen\ }"
    SCREENNR="${DUMMY%%:*}"
    SCREEN[${SCREENNR}]="320x200"
    echo "Screenzeile ${SCREENNR}"
   ;;
   *\ connected\ *)
    DEVICE="${LINE%%\ connected*}"
    echo "${DEVICE} is on"
    SCREEN[${SCREENLEN}]="SCREEN:${SCREENNR}_DEVICE:${DEVICE}_off"
    let "SCREENLEN= SCREENLEN + 1"
    SCREEN[${SCREENLEN}]=" --output ${DEVICE} --off --screen ${SCREENNR}"
    let "SCREENLEN= SCREENLEN + 1"
   ;;
   *\ disconnected\ *)
    DEVICE="${LINE%%\ disconnected*}"
    echo "${DEVICE} is off"
   ;;
   [0-9][0-9][0-9]*x[0-9][0-9][0-9]*[\ ]**[0-9]*\.[0-9]\**)
    MODE="${LINE%%\ *}"
    SCREEN[${SCREENLEN}]="SCREEN:${SCREENNR}_DEVICE:${DEVICE}_MODE:${MODE}_aktiv"
    let "SCREENLEN= SCREENLEN + 1"
    SCREEN[${SCREENLEN}]=" --output ${DEVICE} --mode ${MODE} --screen ${SCREENNR}"
    let "SCREENLEN= SCREENLEN + 1"
    echo "ModeLine Mode=${MODE} (${LINE})"
   ;;
   [0-9][0-9][0-9]*x[0-9][0-9][0-9]*)
    MODE="${LINE%%\ *}"
    SCREEN[${SCREENLEN}]="SCREEN:${SCREENNR}_DEVICE:${DEVICE}_MODE:${MODE}"
    let "SCREENLEN= SCREENLEN + 1"
    SCREEN[${SCREENLEN}]=" --output ${DEVICE} --mode ${MODE} --screen ${SCREENNR}"
    let "SCREENLEN= SCREENLEN + 1"
    echo "ModeLine Mode=${MODE} (${LINE})"
   ;;
   *)
    #echo $LINE | od -c
    echo "Zeile $LINE unbekannt!"
   ;;
  esac
 done < <( xrandr 2>&1 )
 return $RETURN
}

if scan ; then
 EXIT=0
 while [ "${EXIT}" = "0" ]
 do
  DSTRING=""
  X=0
  COUNT=0
  for X in $( seq 0 2 $((SCREENLEN-1)) )
  do
   DSTRING="${DSTRING} ${COUNT} ${SCREEN[$X]}"
   let "COUNT=COUNT + 1"
  done
  NEWSCAN="${COUNT}"
  DSTRING="${DSTRING} ${NEWSCAN} Neuscan "
  if RESULT="$( dialog --title Videomodi --menu F\.Schlaefendorf\ \(C\)2010 20 70 15 ${DSTRING} 3>&1 1>&2 2>&3 3>&- )"; then
   echo $RESULT
   if [ "${RESULT}" = "${NEWSCAN}" ]; then
    if scan ; then
     EXIT=0
    else
     EXIT=1
    fi
   else
    let "RESULT= RESULT + RESULT + 1"
    XRANDROPT="${SCREEN[$RESULT]}"
    xrandr ${XRANDROPT}
    scan
   fi
  else
   EXIT=1
  fi
 done
else
 echo "Kein X-Window gefunden!"
fi
»linuxerr« hat folgende Datei angehängt:
  • vi. (2,3 kB - 8 mal heruntergeladen - zuletzt: 07.02.2012, 21:43)
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

11

23.05.2010, 10:32

RE: AWK GREP und SED

abschließend habe ich noch ein paar änderungen vorgenommen und Xdialog mit eingearbeitet, sieht einfach schöner aus. =D

Quellcode

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/bash
SCREEN=();
SCREENLEN=0;
XRANDR="/usr/bin/xrandr"
if [ -x /usr/bin/Xdialog ]; then
 TDIALOG="/usr/bin/Xdialog"
elif [ -x /usr/bin/dialog ]; then
 TDIALOG="/usr/bin/dialog"
else
 echo "Kein dialog gefunden!"
 exit 1
fi

function scan(){
 local DUMMY DEVICE SCREENNR RETURN;
 RETURN=0
 SCREEN=()
 SCREENLEN=0
 while read LINE
 do
  case "$LINE" in
   Can\'t\ open\ display)
    RETURN=1
   ;;
   Screen\ *:\ *)
    DUMMY="${LINE#Screen\ }"
    SCREENNR="${DUMMY%%:*}"
   ;;
   *\ connected\ *)
    DEVICE="${LINE%%\ connected*}"
    #echo "${DEVICE} is on"
    SCREEN[${SCREENLEN}]="SCREEN:${SCREENNR}_DEVICE:${DEVICE}_off"
    let "SCREENLEN= SCREENLEN + 1"
    SCREEN[${SCREENLEN}]=" --output ${DEVICE} --off --screen ${SCREENNR}"
    let "SCREENLEN= SCREENLEN + 1"
   ;;
   *\ disconnected\ *)
    DEVICE="${LINE%%\ disconnected*}"
    #echo "${DEVICE} is off"
   ;;
   [0-9][0-9][0-9]*x[0-9][0-9][0-9]*[\ ]**[0-9]*\.[0-9]\**)
    MODE="${LINE%%\ *}"
    SCREEN[${SCREENLEN}]="SCREEN:${SCREENNR}_DEVICE:${DEVICE}_MODE:${MODE}_aktiv"
    let "SCREENLEN= SCREENLEN + 1"
    SCREEN[${SCREENLEN}]=" --output ${DEVICE} --mode ${MODE} --screen ${SCREENNR}"
    let "SCREENLEN= SCREENLEN + 1"
    # echo "ModeLine Mode=${MODE} (${LINE})"
   ;;
   [0-9][0-9][0-9]*x[0-9][0-9][0-9]*)
    MODE="${LINE%%\ *}"
    SCREEN[${SCREENLEN}]="SCREEN:${SCREENNR}_DEVICE:${DEVICE}_MODE:${MODE}"
    let "SCREENLEN= SCREENLEN + 1"
    SCREEN[${SCREENLEN}]=" --output ${DEVICE} --mode ${MODE} --screen ${SCREENNR}"
    let "SCREENLEN= SCREENLEN + 1"
    # echo "ModeLine Mode=${MODE} (${LINE})"
   ;;
   *)
    # echo $LINE | od -c
    echo "Zeile $LINE unbekannt!"
   ;;
  esac

 done < <( ${XRANDR} 2>&1 )
 return $RETURN
}

if scan ; then
 EXIT=0
 while [ "${EXIT}" = "0" ]
 do
  DSTRING=""
  X=0
  COUNT=0
  for X in $( seq 0 2 $((SCREENLEN-1)) )
  do
   DSTRING="${DSTRING} ${COUNT} ${SCREEN[$X]}"
   let "COUNT=COUNT + 1"
  done
  NEWSCAN="${COUNT}"
  DSTRING="${DSTRING} ${NEWSCAN} Neuscan "
  if RESULT="$( ${TDIALOG} --title Videomodi --menu F\.Schlaefendorf\ \(C\)2010 20 70 15 ${DSTRING} 3>&1 1>&2 2>&3 3>&- )"; then
   # echo $RESULT
   if [ "${RESULT}" = "${NEWSCAN}" ]; then
    if scan ; then
     EXIT=0
    else
     EXIT=1
    fi
   else
    let "RESULT= RESULT + RESULT + 1"
    XRANDROPT="${SCREEN[$RESULT]}"
    ${XRANDR} ${XRANDROPT}
    scan
   fi   
  else  
   EXIT=1
  fi
 done
else 
 echo "Kein X-Window gefunden!"
fi

ich habe das script und das lzm-file für slax6.1.2 mit anghängt, falls einer das auch auf slax machen möchte.
»linuxerr« hat folgende Dateien angehängt:
  • videoswitc. (2,44 kB - 4 mal heruntergeladen - zuletzt: 03.02.2011, 14:27)
  • Xdialog-2.3.1.lzm (331,78 kB - 4 mal heruntergeladen - zuletzt: 03.02.2011, 14:27)
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Thema bewerten