Problem mit X200s, Ultrabase und ext. Monitor

Der Dude

Member
Registriert
21 Apr. 2009
Beiträge
127
Hallo,

bei mir läuft Arch 64bit mit 2.6.37er Kernel und KDE 4.6. Ich habe folgendes Problem: Wenn ich mein X200s an- oder abdocke, wird der Monitor und die Auflösung nicht korrekt geändert. Über die Systemeinstellungen lässt es sich aber richtig einstellen. Deswegen habe ich versucht, mit einem kleinen Script etwas nachzuhelfen. Das sieht bis jetzt so aus:

Code:
#!/bin/bash

xrandr | grep VGA1 | grep " connected "
if [ $? -eq 0 ] ; then
xrandr --output VGA1 -s 1920x1200 --preferred --primary --output LVDS1 --off ; else
xrandr --output LVDS1 -s 1440x900 --preferred --primary
fi

Das Script wird immer ausgeführt, wenn sich die Stromversorgung ändert, also auch beim an- und abdocken. Leider erziehlt es aber nicht den von mir gewünschten Effekt, so dass ich es trotzdem jedes Mal manuell einstellen muss.

Kann mir da jemand weiterhelfen?
 
Hii,

ich rate mal, daß Du das Skript als root aus /etc/pm/power.d/ heraus ausführen läßt. In diesen Fall muß zuvor die Variable DISPLAY gesetzt werden, damit xrandr funktioniert:
Code:
#!/bin/sh
test -f /usr/share/acpi-support/state-funcs || exit 0
. /usr/share/acpi-support/power-funcs

for x in /tmp/.X11-unix/*; do
    displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
    getXuser;
    if [ x"$XAUTHORITY" != x"" ]; then
        export DISPLAY=":$displaynum"
        # DEINE BEFEHLE
    fi
done
 
Das Skript liegt bei mir einfach in einem Unterordner meines Home-Verzeichnisses. Macht es einen Unterschied, es nach /etc zu verschieben? Ich bin leider noch nicht so fit mit der Konsole, deswegen verstehe ich dein Skript auch nicht ganz. Kannst Du das vielleicht in kurzen, einfachen Worten erklären? Was ich dazu sagen kann, ist, das es den Ordner /usr/share/acpi-support bei mir gar nicht gibt...

Vielen Dank schon mal für weitere Hinweise!
 
Es ist halt Konvention, Skripte die vom System (als root) ausgeführt werden, nicht unter /home/user abzulegen, sondern in /etc. Wie genau rufst Du denn das Skript beim Wechsel der Stromquelle auf?

Die einzelnen Zeilen kann ich Dir nicht erläutern, da ich es auch nur abgeschrieben habe. Es schaut nach welcher User grafisch angemeldet ist und setzt XAUTHORITY und DISPLAY entsprechend, damit xrandr laufen kann.

Hier eine Version wo ich die in Arch fehlende Subroutine direkt eingebaut habe:
Code:
#!/bin/sh
PATH="$PATH:/usr/bin/X11"

getXuser() {
        user=`finger| grep -m1 ":$displaynum " | awk '{print $1}'`
	if [ x"$user" = x"" ]; then
		user=`finger| grep -m1 ":$displaynum" | awk '{print $1}'`
	fi
	if [ x"$user" != x"" ]; then
        	userhome=`getent passwd $user | cut -d: -f6`
        	export XAUTHORITY=$userhome/.Xauthority
	else
		export XAUTHORITY=""
	fi
}

for x in /tmp/.X11-unix/*; do
    displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
    getXuser;
    if [ x"$XAUTHORITY" != x"" ]; then
        export DISPLAY=":$displaynum"
        # DEINE BEFEHLE
      
    fi
done
Du mußt nur deine gewünschten Befehle an der gekennzeichneten Stelle einbauen.
 
Sooo, nach einigem Herumprobieren bin ich jetzt ein Stück weiter.

linrunner' schrieb:
Es ist halt Konvention, Skripte die vom System (als root) ausgeführt werden, nicht unter /home/user abzulegen, sondern in /etc. Wie genau rufst Du denn das Skript beim Wechsel der Stromquelle auf?

Also, das Script lag ursprünglich in /home/irgendwas und wurde durch die KDE-Energieverwaltung aufgerufen. Dort kann man in den Energieprofilen einstellen, dass beim Wechsel der Profile Scripte ausgeführt werden. Als es nach Verschieben in /etc und mit deinem erweiterten Script trotzdem nicht ging, habe ich nochmal alles rückgängig gemacht und von vorne angefangen...

...und was soll ich sagen: Jetzt läuft's! Wenn ich folgendes Script unter /home/... abspeichere und durch die Energieverwaltung aufrufen lasse, erhalte ich meinen gewünschten Displaywechsel.
Code:
#!/bin/bash

xrandr | grep VGA1 | grep " connected "
if [ $? -eq 0 ] ; then
xrandr --output VGA1 --auto --preferred --primary --output LVDS1 --off ; else
xrandr --output LVDS1 --auto --preferred --primary --output VGA1 --off
fi
Wenn ich es allerdings nach /etc verschiebe, klappt es nicht. Wenn ich den Code in der Konsole eingebe, das gleiche. Als user klappt's, als root kommt:
Code:
No protocol specified
Can't open display :0

Das eigentliche Problem ist also gelöst, dafür tat sich eine neue Frage auf...
Trotzdem nochmal Danke!
 
Ohne daß ich es jetzt überprüft hätte, denke ich, daß KDE das Skript im Kontext deines angemeldeten Benutzers ausführt. Damit sind meine Vorschläge zum Setzen der Environmentvariablen und das Ablegen unter /etc hinfällig. Ich würde es in /home/deinuser/bin ablegen und es inhaltlich so lassen wie es ist.
 
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben