[linux-l] xlock fuer alle Benutzer
Jens Dreger
jens.dreger at physik.fu-berlin.de
Do Jul 12 12:29:00 CEST 2007
On Thu, Jul 12, 2007 at 11:34:32AM +0200, Ivan F. Villanueva B. wrote:
> Hallo,
> kann jemand mich auf die richtige Spur bringen?
>
> Ich möchte bevor ein "suspend to disk" mindestens für den in vt7 (X)
> angemeldeten Benutzer "xlock" ausführen. Das soll in "/etc/acpi/sleepbtn.sh"
> stattfinden. Welche Befehle gibt es, um zu wissen, wer in vt7 angemeldet ist?
> Kann man einfach so etwas benutzen: su username xlock? Oder muss man davor
> XDISPLAY richtig setzen?
Ach, das ist ja mal ein nettes Problem...
Root kann so ohne Weiteres auch nicht einfach irgendein X-Programm auf
dem Display eines Users starten (ist Dir sicher schon aufgefallen):
root at smart:~> DISPLAY=:0.0 xdpyinfo
Xlib: connection to ":0.0" refused by server
Das liegt daran, dass der XServer gerne eine Authentisierung sehen
will. Das geht mit xauth. Bei gdm liegt die entsprechende Datei unter
/var/lib/gdm/:0.Xauth, zu erkennen z.B. mit ps aux:
/usr/X11R6/bin/X :0 -ignoreABI -br -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7
Damit kommt root ans Display ran:
root at smart:~> XAUTHORITY=/var/lib/gdm/:0.Xauth DISPLAY=:0.0 xdpyinfo| head
name of display: :0.0
version number: 11.0
vendor string: The X.Org Foundation
[...]
Das naechste Problem ist jetzt, dass Du xlock ja nicht als root
starten willst, denn dann muss man ja das root-Passwort eingeben um
wieder ranzukommen.
Was ich mal eben gestestet habe und was auch geht, ist, die
.Xauth-Datei lesbar nur fuer den eingeloggten User irgendwo abzulegen
und dann xlock ueber su zu starten. Der User hat sowieso eine eigene
Xauth Datei, aber deren Pfad rauszufinden ist auch irgendwie
umstaendlich. Wenn Du die PID der Session kennst, geht's:
root at smart:~> tr '\0' '\n' < /proc/31761/environ | grep XAUTHORITY
XAUTHORITY=/tmp/.gdmWP70UT
Umkopieren ist aber immer machbar. Das script hier funktioniert bei
mir:
#!/bin/bash
# JMD(12.07.07): remote-xlock.sh
XUSER=$(w | awk '$2 == ":0" { print $1 }')
install -o $XUSER -m 400 /var/lib/gdm/:0.Xauth /tmp/remote-xlock.xauth
XAUTHORITY=/tmp/remote-xlock.xauth DISPLAY=:0.0 su $XUSER xlock
rm -f /tmp/remote-xlock.xauth
Den /var/lib/gdm/:0.Xauth Pfad musste evtl aus ps raussuchen oder
sonstwo, wenn Du nicht gdm benutzt...
Gruss,
Jens.
--
Jens Dreger Freie Universitaet Berlin
dreger at physik.fu-berlin.de Fachbereich Physik - ZEDV
Tel: +49 30 83854774 Arnimallee 14
Fax: +49 30 83855902 14195 Berlin
Mehr Informationen über die Mailingliste linux-l