ubuntuusers.de

Skript beim Aufwachen aus dem Standby ausführen

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

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:

1
/usr/bin/sudo -u localUser /bin/bash -c "/usr/bin/disper -l" 2>&1 > /tmp/log.txt;

folgendes herausfinden:

/tmp/log.txt

1
2
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 😀

Antworten |