ubuntuusers.de

Automatische Displayerkennung und -konfiguration

Status: Gelöst | Ubuntu-Version: Ubuntu 8.10 (Intrepid Ibex)
Antworten |

Roxxor

Avatar von Roxxor

Anmeldungsdatum:
13. April 2007

Beiträge: 166

Wohnort: Bamberg

Hallo,
ich wollte mal Fragen ob mir hier jemand zur Hand gehen könnte. Und zwar haben meine Eltern nun einen EEEPC für sich als Hauptrechner gekauft. Da meine Mutter aber auch daran arbeiten muss wird er dafür an einen Bildschirm, Tastatur und Maus angeschlossen, dass man wie mit einem normalen Desktop arbeiten kann.
Nun habe ich aber Probleme mit der automatischen Bildschirmerkennung und lass meine Eltern den Bildschirm jeweils einfach über Knopfdruck richtig einstellen.
Das mach ich mit folgenden Befehlen:
Einschalten:
xrandr --output VGA --mode 1280x1024 --same-as LVDS
Ausschalten:
xrandr --output VGA --off & xrandr --output LVDS --mode 1024x600
Funktioniert super. Nur leider sind meine Eltern immer sofort überfordert xD Und mein Vater sucht auch immer wieder einen Grund mit dem er ich zwingen kann wieder auf Windows umzusteigen xD Deshalb würde ich das ganze gerne für den Startvorgang automatisieren.
Das würde ich so machen:

-Mit xrandr auslesen ob ein Bildschirm angeschlossen ist.
   A.Wenn ja, guggen ob er 1280x1024 unterstützt
         1.Wenn ja,mit 1280x1024 aktivieren
         2.Wenn nein, mit 800x600 aktivieren
   B.Wenn nein, nichts tun, da dann höchstwahrscheinlich schon alles richtig startet ;)

Nun noch die xrandr-Ausgaben bei angeschlossenem bzw. nicht angeschlossenem Bildschirm:

Screen 0: minimum 320 x 200, current 1280 x 1024, maximum 1600 x 1600
VGA connected 1280x1024+0+0 (normal left inverted right x axis y axis) 376mm x 301mm
   1280x1024      60.0*+   75.0     60.0     60.0* 
   1600x1024      60.2  
   1400x1050      60.0  
   1440x900       59.9  
   1280x960       60.0  
   1360x768       59.8  
   1152x864       75.0     75.0     70.0     60.0  
   1024x768       75.0     75.1     75.0     70.1     60.0  
   832x624        74.6  
   800x600        72.2     75.0     75.0     60.3     56.2  
   640x480        75.0     72.8     75.0     75.0     60.0     59.9  
   720x400        70.1  
LVDS connected 800x600+0+0 (normal left inverted right x axis y axis) 220mm x 129mm
   1024x600       60.0 +   65.0  
   800x600        60.3* 
   640x480        59.9  
Screen 0: minimum 320 x 200, current 1024 x 600, maximum 1600 x 1600
VGA disconnected (normal left inverted right x axis y axis)
LVDS connected 1024x600+0+0 (normal left inverted right x axis y axis) 220mm x 129mm
   1024x600       60.0*+   65.0  
   800x600        60.3  
   640x480        59.9  

Ich hoffe jemand kann mir dabei behilflich sein, bzw. mir Tipps/Links geben wie ich die Ausgabe von Befehlen mit in ein SKript einbeziehen kann, wobei ich leider nichteinmal weiß wie man if/else etc. in solcehn Skripten machen kann... Ein bisschen Python kann ich, jedoch fehlt es da an dem Wissen wie man Systembefehle mit reinbringt.
Ich freue mich über jede Hilfe ☺
Danke.
LG Roxxor

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

Mit

xrandr | egrep "^ .*\+" | awk '{print $1}'

pickt man sich die (eine) Zeile, die mit Leerstelle anfängt und ein '+' beinhaltet. awk extrahiert davon den ersten String, also 1024x768 bei mir, x600 bei Dir.

Den Wert einer Variablen zuzuweisen ist mit $(commando) möglich:

resolution=$(xrandr | egrep "^ .*\+" | awk '{print $1}')

Hilft das weiter?

Roxxor

(Themenstarter)
Avatar von Roxxor

Anmeldungsdatum:
13. April 2007

Beiträge: 166

Wohnort: Bamberg

Ja, das ist im Grunde nich schlecht. Dankeschön ☺
Nur bekomme ich sobald ich den Bildschirm anschließe 2 Auflösungen(erst die bevorzugte vom VGA, dann die vom LVDS), also irgendwie muss man das beschränken dass nur das erstere benutzt wird.
Und wie mache ich das, dass das Skript nichts macht sobald die Auflösung 1024x600 ist?
Da würde ja ein leichtes if/else Skript reichen, wobei ich nicht weiß wie man dass bei der Shell macht xD
Nochmal Dankeschön für die nette Hilfe! ☺

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

Dieses Frühjahr trägt man verstärkt case:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#!/bin/bash
#
res=$(xrandr | egrep "^ .*\+" | awk '{print $1}')
#
#
case $res in
	1024*) 
		echo 1024*768 
		;;
	600*) 
		echo 600 
		;;
	*) 
		echo default 
		;;
esac
# echo $res

Roxxor

(Themenstarter)
Avatar von Roxxor

Anmeldungsdatum:
13. April 2007

Beiträge: 166

Wohnort: Bamberg

Danke ☺
Ich konnte dadraus was basteln:

 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
#!/bin/bash
#
res=$(xrandr | egrep "^ .*\+" | awk '{print $1}')
#
#
case $res in
	1024x600) 
		echo 1024x600
                resolution=1024x600 
		;;
	1280x1024*) 
		echo 1280x1024
                resolution=1280x1024
		;;
	*) 
		echo default 
		;;
esac
# echo $res
#
case $resolution in
               1024x600)
                        xrandr --output VGA --off & xrandr --output LVDS --mode 1024x600
                        echo Interner Bildschirm an
                        ;;
               *)     
                        xrandr --output VGA --mode $resolution --same-as LVDS 
                        echo Externer Bildschirm mit $resolution an
                        ;;
esac

Das funktioniert erstmal mit meiner Konfiguration. Der Teil mit dem Default muss aber noch überarbeitet werden. Ich wollte das gleiche mit einem anderen Bildschirm testen, das hat aber nicht funktioniert da er kein "+" bei der xrandr ausgabe hat. Aber wie gesagt das funktioniert schomal ☺
Danke!
LG Roxxor

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Wohnort: Göttingen

Probier mal, im egrep Ausdruck das \+ weguzulassen, bei mir wird nämlich auch immer nur ein * bei der Ausgabe von xrandr ausgezeigt. Und da bei der Ausgabe au kein anderes * vorkommt, sollte es da keine Probleme geben...

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

Was xrandr mit + und * markiert habe ich nicht überprüft, und das + willkürlich gegriffen. Wenn man an dem * interessiert ist, so muß der egrep-Ausdruck aber einen mit Backslash maskierten Stern beinhalten.

res=$(xrandr | egrep "^ .*\*" | awk '{print $1}')
Antworten |