Wednesday, May 1, 2024
 Popular · Latest · Hot · Upcoming
1
rated 0 times [  1] [ 0]  / answers: 1 / hits: 3107  / 1 Year ago, fri, march 10, 2023, 3:56:49

I have an X instance running on my server computer, and on occasion I connect to it remotely via TeamViewer. Once in a while TeamViewer crashes and I cannot restart it remotely. Is there a way to login to my running X instance through ssh, and restart TeamViewer remotely?


More From » ssh

 Answers
7

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 :10, :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 ~/.Xauthority.




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 ~/.Xauthority.)



If this is a one-shot, you can detect the values of DISPLAY and 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 /proc/$pid/environ (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";;
esac


Then you can run programs on your remote X display simply by setting DISPLAY:



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.


[#43120] Saturday, March 11, 2023, 1 Year  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
irtuallyefu

Total Points: 429
Total Questions: 97
Total Answers: 119

Location: Hong Kong
Member since Tue, Oct 19, 2021
3 Years ago
;