Following are other questions which I think I need to know:
- From a non X Session? (meaning root isn't logged into X)
- If multiple people were logged in on X, could I auto-detect who was on which screen, and thus programmatically detect which screen I need to launch the app on?
- Can I launch the app as the user? ( ok I'm 99.999% sure this is a yes )
- Can I detect if users of group X are logged in to X?
ANSWER:-
To launch a graphical program on a user's desktop, you need to find two things: what display the user's desktop is on (the address) and what authorization cookie to use (the password).
The following command should list the local displays that the user is logged on (one per line) on most unices:
who | awk -v user="$target_user" '$1 == user && $2 ~ "^:" {print $2}'
Finding the authorization cookie is a little harder. You have to look for the user's cookie file, which is ~/.Xauthority by default (all you need is the location of the cookie file, you don't need to extract the cookie from it). I can't think of a portable way to find out the actual X cookie file. The most accurate way to find out is to find out the pid of the X process and look for the argument to the -auth option. Another way is to find a process running on that X server and grab its XAUTHORITY environemnt variable. Simply using .Xauthority in the user's home directory works on many systems, but not on a default Ubuntu configuration. If you have trouble finding the cookie file, see Open a window on a remote X display (why "Cannot open display")?
Once you have both pieces of information, put the chosen display in the DISPLAY environment variable, the chosen X authority cookie file in the XAUTHORITY environment variable, and you're set. It doesn't matter what user the program runs as; combine with su if you like.
0 comments:
Post a Comment
Don't Forget to comment