ACPI-Ereignisse (z.B. durch Drücken von Sondertasten wie Fn+F9) lassen sich mit dem Ausführen eines Skripts verbinden. So weit, so gut.
Jetzt habe ich aber einige Befehle in einem Skript, die nicht funktionieren wenn das Skript über das ACPI-Ereignis gestartet wird. Starte ich das Skript manuell als 'root', werden alle Befehle im Skript einwandfrei ausgeführt. Um der Sache auf den Grund zu gehen, habe ich dem Skript, das aufgerufen wird, ein 'whoami' angefügt um zu sehen welcher User die Befehle ausführt. Überraschenderweise war es in beiden Fällen 'root'. Müßte das Skript dann nicht eigentlich auch bei Aufruf durch das ACPI-Ereignis einwandfrei funktionieren?
Um das ACPI-Ereignis Fn+F9 mit einem Skript zu verbinden, habe ich Folgendes in der Datei
/etc/acpi/events/Fn-F9 stehen:
|
Quellcode
|
1
2
3
4
5
|
# Fn + F9
# Wechsellaufwerkschublade öffnen
event=ibm/hotkey HKEY 00000080 00001009
action=/home/skripte/acpi/Fn-F9.sh
|
Im Skript
/home/skripte/acpi/Fn-F9.sh steht:
|
Quellcode
|
1
2
3
4
5
6
7
8
|
#!/bin/bash
# Fn + F9
# Wechsellaufwerkschublade öffnen
/usr/kde/3.5/bin/kdialog --passivepopup "Wechsellaufwerkschublade wird geöffnet.." 2
/usr/bin/xosd "Wechsellaufwerkschublade wird geöffnet."
/usr/bin/eject
whoami
|
Der Befehl xosd ruft das Skript
/home/skripte/xosd.sh auf:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#!/bin/sh
# 2006-03-09 <pille@struction.de>
#
# displays text in arguments on X screen using osd_cat (in some nicely preconfigured style)
OSD_CAT=`which osd_cat`
XOSD="${OSD_CAT} --delay=3 --age=3 --pos=middle --align=center --font="-*-helvetica-*-*-*-*-*-240-*-*-*-*-*-*" --color=green --shadow=1"
# get user running X display (needed when run by script)
XUSER=`ps -C Xsession -o user h`
if [ "${USER}" == "${XUSER}" ]; then
echo $@ | ${XOSD}
else
echo $@ |su ${XUSER} -c "DISPLAY=${DISPLAY:-:0.0} ${XOSD}"
fi
|
Beim Drücken der Sondertastenkombination Fn+F9 wird Folgendes in die Logdatei
/var/log/acpid für das ACPI-Ereignis geschrieben:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
|
10.07.2007 19:26:09 executing action /home/skripte/acpi/Fn-F9.sh
10.07.2007 19:26:09 none BEGIN HANDLER MESSAGES
10.07.2007 19:26:09 none notifying client 6422[0:0]
10.07.2007 19:26:09 none notifying client 6694[0:0]
10.07.2007 19:26:09 received event ibm/hotkey HKEY 00000080 00001009
10.07.2007 19:26:11 none Error initializing osd: No display
10.07.2007 19:26:11 none kdialog: cannot connect to X server
10.07.2007 19:26:14 completed event ibm/hotkey HKEY 00000080 00001009
10.07.2007 19:26:14 none action exited with status 0
10.07.2007 19:26:14 none END HANDLER MESSAGES
10.07.2007 19:26:16 none root
|
Dabei werden die Befehle '/usr/bin/eject' und 'whoami' problemlos ausgeführt. Der ausführende User ist laut Logdatei 'root'. Die Befehle '/usr/bin/xosd' und '/usr/kde/3.5/bin/kdialog' führen zu Fehlermeldungen in der Logdatei:
10.07.2007 19:26:11 none Error initializing osd: No display
10.07.2007 19:26:11 none kdialog: cannot connect to X server
Wird das Skript
/home/skripte/acpi/Fn-F9.sh aber manuell als 'root' ausgeführt:
|
Quellcode
|
1
2
|
# /home/skripte/acpi/Fn-F9.sh
root
|
funktionieren alle Befehle im Skript und der ausführende User ist wieder 'root'.
Leider habe ich bis jetzt noch keine Lösung für mein Problem gefunden. Warum wird dasselbe Skript vom selben User 'root' manuell und über ACPI-Ereignis unterschiedlich ausgeführt? Und wie bekomme ich es hin, dass alle Befehle im Skript, wenn es über das ACPI-Ereignis gestartet wird, einwandfrei ausgeführt werden?