An X program needs two pieces of information in order to connect to an X display.
It needs the address of the display, which is typically
:0 when you're logged in locally or
:11, etc. when you're logged in remotely (but the number can change depending on how many X connections are active). The address of the display is normally indicated in the
DISPLAY environment variable.
It needs the password for the display. X display passwords are called magic cookies. Magic cookies are not specified directly: they are always stored in X authority files, which are a collection of records of the form “display
:42 has cookie
123456”. The X authority file is normally indicated in the
XAUTHORITY environment variable. If
$XAUTHORITY is not set, programs use
You're trying to act on the windows that are displayed on your desktop. If you're the only person using your desktop machine, it's very likely that the display name is
:0. Finding the location of the X authority file is harder, because with gdm as set up under Debian squeeze or Ubuntu 10.04, it's in a file with a randomly generated name. (You had no problem before because earlier versions of gdm used the default setting, i.e. cookies stored in
If this is a one-shot, you can detect the values of
XAUTHORITY from a running process. This is awkward to automate. You have to figure out the PID of a process that's connected to the display you want to work on, then get the environment variables from
eval export $(</proc/$pid/environ tr \\0 \\n | grep -E '^(DISPLAY|XAUTHORITY)=')).
A long-term, automatic solution is to copy cookies when you log into your desktop X session. Add the following lines to
~/.profile (or some other script that is read when you log in):
case $DISPLAY:$XAUTHORITY in
# DISPLAY is set and points to a local display, and XAUTHORITY is
# set, so merge the contents of `$XAUTHORITY` into ~/.Xauthority.
XAUTHORITY=~/.Xauthority xauth merge "$XAUTHORITY";;
Then you can run programs on your remote X display simply by setting
ssh foo.example.com 'DISPLAY=:0 restart teamviewer'
This answer is adapted from a more complete answer to a similar question on Unix Stack Exchange.