home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #30 / NN_1992_30.iso / spool / comp / windows / x / 20223 < prev    next >
Encoding:
Text File  |  1992-12-15  |  4.1 KB  |  96 lines

  1. Newsgroups: comp.windows.x
  2. Path: sparky!uunet!zaphod.mps.ohio-state.edu!sdd.hp.com!cs.utexas.edu!qt.cs.utexas.edu!news.Brown.EDU!noc.near.net!gateway!miki!oj
  3. From: oj@miki.pictel.com (Oliver Jones)
  4. Subject: Re: HELP: Finding the complete display name for an app
  5. Message-ID: <1992Dec15.150051.2328@miki.pictel.com>
  6. Organization: PictureTel Corporation
  7. References: <1992Dec8.155553.900@csqx.cs.rhbnc.ac.uk> <1992Dec11.100529.28050@thunder.mcrcim.mcgill.edu> <1992Dec12.135834.15905@csqx.cs.rhbnc.ac.uk>
  8. Date: Tue, 15 Dec 1992 15:00:51 GMT
  9. Lines: 85
  10.  
  11. In article <1992Dec12.135834.15905@csqx.cs.rhbnc.ac.uk> jamesd@lt5.cs.rhbnc.ac.uk (James Driscoll) writes:
  12. >
  13. >|>> How can I find out the complete name of the Display that an
  14. >|>> application is displayed on?
  15.  
  16. Der Mouse was right (if a bit pedantic). ":0.0" is, of course, a
  17. well-formed display name.
  18.  
  19. >I am writing a mutli-process application that needs to share information. Each
  20. >instance of the application needs to know about the contents of 4 or 5 data
  21. >fields and when they change. 
  22.  
  23. OK, let's nail down some terminology.  I'm putting *stars* around
  24. the words about which I urge you to be precise in your thinking and usage.
  25.  
  26. Your *application* is distributed, and implemented with several
  27. different *X clients* running on several different *machines* around
  28. the network.  Each *X client* displays information to a local
  29. *display*.  (The term *display* means *X display server.*)
  30.  
  31. >Hence I am storing the data in Xproperties on the
  32. >root window of the display upon which the first instance is started up. As
  33. >subsequent processes can occur elsewhere 
  34. >on the network (and hence on different displays)  ...
  35.  
  36. Let's rewrite this sentence.
  37.  
  38. The *application* starts up when the first *X client* starts up.
  39. The first *X client* connects to its default *display* (the one named
  40. in its DISPLAY environment variable or on its command line.)
  41.  
  42. This *X client* establishes data sharing for the *application* by
  43. storing some properties on the default root window of the display
  44. connection.  The first *X client's* *display* will do double duty
  45. as both a device for user i/o and as "bus" for data sharing.
  46.  
  47. The first *X client* then communicates its *display* name to other *X
  48. clients* running on other *machines* in the network so those other
  49. clients can get access to the shared data.  Each subsequent *X client*
  50. must open two different display connections, one to its default
  51. display (which is usually, but not necessarily, a local display ":0")
  52. and another to the first *display*, the one used for data sharing.
  53.  
  54. [ Note well:  This description of your *application* may not
  55. be exactly correct, but it's what I infer from what you wrote. ]
  56.  
  57. >...I have to be able to make a connection to that display. Therefore
  58. >when getenv("DISPLAY"); returns "0.0" it is 
  59. >insufficient as an identifier to the
  60. >display containing the root window where the properties are stored.
  61.  
  62. To be precise, it's insufficient unless it's used by another
  63. client running on the same *machine.*
  64.  
  65. >Thus I need some way of being able to get an 
  66. >accurate identifier to the display where the properties are stored...
  67.  
  68. Right.  What you want is a network-unique *display* name.  How can you
  69. get this?
  70.  
  71. 1) in your user's setup scripts or in a shell script which runs your
  72.    networked application, issue the command 
  73.  
  74.         setenv DISPLAY `hostname`:0
  75.  
  76.    or the /bin/sh equivalent. 
  77.  
  78. 2) refrain from using  "-display :0" in your command lines.  Rather,
  79.    use "-display `hostname`:0"
  80.  
  81.   If you do (1) and (2) you'll be happy with DisplayString's results.
  82.   Note that (1) and (2) overload two things.  a) they specify
  83.   a network-wide display name, b) they request the use of TCP to
  84.   connect to the server rather than Unix-domain sockets.
  85.  
  86.   a) is good, b) may or may not be depending on your situation.
  87.  
  88. 3) in your C program, if you find that DisplayString starts 
  89.    with a colon it's good evidence that your *X client" and *display* 
  90.    are running on the same machine. Write some code in your "*X client*
  91.    program to look up your host name and prepend it to the display
  92.    string.
  93.  
  94. Good luck.  Don't forget to deal with the case where the 
  95. user switches off the display for the first X client.
  96.