This question does n开发者_高级运维ot appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 8 years ago.
Improve this questionWithout being the person logged in at the console, how do I run an X application and have it display on that X session? Assume I am either root, or I am the same user who logged in, so in principle I have persmission to do this. But how do I convince X of this?
Some examples of situations like this:
- Log in with SSH and run a program that displays on the remote computer's screen (not tunneled through SSH—that is totally different)
- A cron job to take a screenshot of the X session via ImageMagick's
import
command - Running a keystroke logger for audit purposes
This is a simpler version of Launch OpenGL app straight from a windowless Linux Terminal
The short answer is that you have to set the DISPLAY
environment variable, and then the app will run.
The long answer is that we've got Xauth, and unless you're running as the same user on the same machine that's probably not going to work unless you export the Xauth credential from the account running the X server to the account running the X client. ssh -X
handles this for you, which is why it's awesome, but the manual procedure involves running xauth extract - $DISPLAY
on the X server account and feeding that data into xauth merge -
on the client account. (Warning: the data is binary.)
On modern Linux systems, there is one X session at :0 and the X11 authority data file is always $HOME/.Xauthority
so you can most often set two environment variables, for example, in Bash:
export XAUTHORITY=/home/$your_username/.Xauthority
export DISPLAY=':0'
The upshot is that you have to know the X display (placed in the DISPLAY
environment variable) and the magic cookie (placed in a file, with the filename in the XAUTHORITY
environment variable).
The quick-and-dirty way
On the system running X, if you are root or you are the same user who logged in to X, just assume the most common display and cookie files (works on almost any standard desktop install of any distro).
env DISPLAY=:0 XAUTHORITY=/home/whoever/.Xauthority /path/to/my/X/program
The more surefire way
Find them from the environment of an already-running X program. Again, if you are root or the same user who is logged in, this will tell you (if the user is using GNOME):
cat /proc/`pgrep -f ^x-session-manager`/environ \
| ruby -ne 'puts $_.split("\0").select { |e| e =~ /^(DISPLAY|XAUTHORITY)=/ }'
精彩评论