PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm unter anderem User starten



Andy1988
26-01-2005, 22:45
Also ich hab an meinem Laptop ein paar süße Hotkeys. Z.B. fürs WLAN, Browser, E-Mail, Audio Steuerung etc.
Jeder dieser Hotkeys regaiert mir einem ACPI Event, die vom ACPId an ein Bash Script weitergegeben werden. Wisst ihr sicherlich ;)

Wie kann ich jetzt dieses Script dazu bewegen, z.B. den Firefox oder Thunderbird nicht als root, unter dem das bash-script ausgeführt wird, sondern als User andy auszuführen, damit der Firefox etc. auch auf meinem X-Display erscheint und NICHT als root läuft?

Hier mal der entsprechende Ausschnitt für die ersten 2 Hotkeys:

if [ `expr $1 = hotkey` == 1 ]; then
logger "hotkey gedrueckt"

if [ `expr $2 = ATKD` == 1 ]; then
logger "ATKD Hotkey"

if [ `expr $3 = 00000050` == 1 ]; then
logger "E-Mail Hotkey"
thunderbird
fi

if [ `expr $3 = 00000051` == 1 ]; then
logger "Browser"
firefox
fi

fi

fi
Die "logger"-Befehle sind natürlich nur zu debugging Zwecken drin. Will mir ha nich meine Log-Dateien zuhauen.

peschmae
27-01-2005, 06:13
XUSER=`ps -C startx -o user h`


am Anfang des Scripts und dann zum App starten sowas:


su - $XUSER -c "DISPLAY=:0.0 mozilla-firefox" &


MfG Peschmä

Andy1988
27-01-2005, 20:01
Danke, aber es tut sich immernoch nichts.
Das Kommanda "ps -C startx -o user h" bringt auch keinerlei Ausgabe auf der Konsole!

peschmae
27-01-2005, 20:52
Dann geht das wohl nur wenn du X via startx gestartet hast (mache ich so). Eventuell musst du das halt für deinen Displaymanager anpassen?

MfG Peschmä

Andy1988
27-01-2005, 21:30
Jo, ich starte X beim Systemstart mit dem xdm Runscript...

Wie pass ich das an?

peschmae
28-01-2005, 06:37
Das weiss ich doch nicht, ich mach das ja nicht so. ;)

Guck mal den Normalen Output von ps an - nee, mist. XDM wird ja als root gestartet. Hmm.

Mal gucken, zuhause hab ich nen PC mit gdm und einen mit kdm. Eventuell kann ich dir da was abschreibseln.

MfG Peschmä

Joghurt
28-01-2005, 13:49
Versuch es mal mit
XUSER=$(w -sh|egrep " +:0 +"|cut -f1 -d' ')

RapidMax
29-01-2005, 15:53
Hier ist eine mögliche Lösung über Signale. Zuerst brauchst du folgendes Shellscript:

#!/bin/bash

EVENTFILE='/tmp/apmdevent'

function sendevent() {
# logger -p info -t apmdevent "$1"
echo "$1" > "$EVENTFILE"
userpid=`cat /var/run/apmduserd.pid`
[ -n "$userpid" ] && kill -USR1 "$userpid"
}

case "$1" in
hotkey)
case "$2" in
ATKD)
case "$3" in
00000050)
sendevent email
;;
00000051)
sendevent browser
;;
esac
;;
esac
;;
esac
Als nächstes statest du das folgende, apmduserd.sh script aus deiner xinitrc-Datei ~/.xinitrc im Hintergrund "apmduserd.sh &".

#!/bin/bash

trap '
event=`cat /tmp/apmdevent`
case "$event" in
email) thunderbird & ;;
browser) firefox & ;;
esac
' USR1

trap 'exit_status="$?"
test -f /var/run/apmduserd.pid && : > /var/run/apmduserd.pid
exit $exit_status
' TERM

trap "" HUP INT

echo "$$" > /var/run/apmduserd.pid

while true; do
sleep 1
done

Die /var/run/apmduserd.pid musst du von Hand als root anlegen und deinem Benutzer zuordnen.

Gruss, Andy

PS: Ein einfachere Lösung währe natürlich einfach wie von peschmae vorgeschlagen, aber ebenfalls mit einer Datei, die den usernamen enthält...