MaxPowers82
Anmeldungsdatum: 11. November 2006
Beiträge: 175
Wohnort: Berlin
|
Hi,
ich versuche seit einiger Zeit beim Aufwachen aus dem Standby ein Skript zu starten, welches prüft ob externe Monitore angeschlossen sind und diese gegebenenfalls aktiviert.
Laut dem Wiki gibt es dafür das Programm pm-utils, welchem man ein Skript in /etc/pm/sleep.d zur Hier mein Skript:
/etc/pm/sleep.d/tft_switch
#!/bin/bash
case "$1" in
hibernate|suspend)
echo test
;;
thaw|resume)
/usr/local/bin/TFT_switch
;;
*)
;;
esac
exit $? Das wiederum darin aufgerufene Skript /usr/local/bin/TFT_switch funktioniert bei manuellen Tests, hier der Code:
#!/bin/bash
sleep 1
if disper -l | grep -q "DFP-2"; then
disper -d DFP-2 -s -r 1680x1050
else
disper -d DFP-0 -s -r 1440x900
fi
disper ist ein Konfigurationstool für Nvidia-Grafikkarten nach dem Vorbild von xrandr. Leider klappt es nicht, was könnte am Skript falsch sein ? MfG Max PS: Wird das Skript vor oder nach der Passwortabfrage (beim Aufwachen aus dem Standby) ausgeführt ?
|
Danstroem
Anmeldungsdatum: 6. Januar 2010
Beiträge: Zähle...
|
Hi Max, ich hatte das gleiche Problem, und konnte innerhalb des Skripts mittels der Zeile: | /usr/bin/sudo -u localUser /bin/bash -c "/usr/bin/disper -l" 2>&1 > /tmp/log.txt;
|
folgendes herausfinden: /tmp/log.txt
| display default: default
resolutions: 320x175, 320x200, 360x200, 320x240, 400x300, 416x312, 512x384, 640x350, 576x432, 640x400, 680x384, 720x400, 640x480, 720x450, 640x512, 700x525, 800x512, 840x525, 800x600, 960x540, 832x624, 960x600, 1024x768, 1152x864, 1360x768, 1920x1200, 1600x900
|
Offensichtlich kann er nicht auf die Display-Konfiguration zugreifen. Wenn man "disper -l" im gnome-terminal ausführt, bekommt man nämlich statt des "display default" die richtigen Ausgaben, z.B. für DFP-0 und DFP-2. Außerdem musste ich feststellen, dass das environment für root übernommen wird, anstatt das des Benutzers. Z.B. ist die Variable $HOME="/root". Laut http://forum.ubuntuusers.de/topic/pm-sleep-d-script müssen sich Programme gegenüber X authentifizieren, Stichwort Xauthority. Dies geschieht über die environment-Variable XAUTHORITY, die hier natürlich nicht vorhanden ist. Entsprechend funktioniert disper nicht. Abhilfe also folgendermaßen (getestet für Maverick): /etc/pm/sleep.d/20_displayInit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | #!/bin/bash
USERNAME="usernameDesAngemeldetenBenutzers"
export DISPLAY=":0.0"
export XAUTHORITY="`ls /var/run/gdm/*/database|grep auth-for-$USERNAME-`"
export HOME=/home/$USERNAME
case "$1" in
hibernate|suspend)
;;
thaw|resume)
sudo -u $USERNAME /usr/local/bin/deinSkriptFuerX.sh
;;
*)
;;
esac
exit $?
|
Für "usernameDesAngemeldetenBenutzers" musst du deinen Benutzernamen einsetzen. XAUTHORITY wie hier zu bestimmen ist auch ziemlich gebastelt. Mit einer zukünftigen X-Version könnte das also nicht mehr funktionieren. Außerdem werden Fehler nicht behandelt (X läuft nicht, etc). Der Weg hier ist auch bestimmt nicht der offiziell beste... Übrigens gibt es innerhalb von pm-utils Debug-Funktionen, um die Ausgabe der Skripte zu überwachen, anstatt das manuell über /tmp/log.txt zu tun. Habe ich aber auch erst später entdeckt 😀
|