home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / sys / sun / admin / 5734 < prev    next >
Encoding:
Text File  |  1992-08-21  |  2.3 KB  |  82 lines

  1. Path: sparky!uunet!dtix!darwin.sura.net!haven.umd.edu!mimsy!kong!arensb
  2. From: arensb@kong.gsfc.nasa.gov (Andrew Arensburger - RMS)
  3. Newsgroups: comp.sys.sun.admin
  4. Subject: Re: auto set display variable on X terms
  5. Message-ID: <1992Aug21.204844.3186@kong.gsfc.nasa.gov>
  6. Date: 21 Aug 92 20:48:44 GMT
  7. References: <1992Aug20.144001.1759@trantor.harris-atd.com>
  8. Organization: Goddard Space Flight Center
  9. Lines: 72
  10.  
  11. ccarpent@dw3f.ess.harris.com (Craig Carpenter) writes:
  12. >I am looking for the easy way to set the DISPLAY variable when a user
  13. >signs in. We have some
  14. >X terminals and they login to the Sparc and have to set the display
  15. >variable themselves, 
  16. >what is the easy way to find out from the login process what terminal
  17. >they are signing in from.
  18.  
  19.     This is my solution. It does much the same thing as the other
  20. posters' solutions. This also started out as a shell script, but at
  21. some point I decided that I wanted the speed of C.
  22.     It runs on Sparcs under SunOS 4.1.1 . For anything else, you're
  23. on your own.
  24.  
  25. -- 
  26. Andrew Arensburger            | See, Buzz? It's really fun to be psychotic!
  27. arensb@kong.gsfc.nasa.gov     |                     -- MST3K
  28. ...!uunet!dftsrv!kong!arensb  | 
  29.  
  30. ----- begin included file ----------------------------------------
  31. #include <stdio.h>
  32. #include <utmp.h>
  33. #include <sys/types.h>
  34. #include <unistd.h>
  35. #include <fcntl.h>
  36.  
  37. extern char *strchr();
  38.  
  39. main()
  40. {
  41.     struct utmp entry;
  42.     int ufd;    /* /etc/utmp file descriptor */
  43.     int slot;
  44.  
  45.     /* Get the /etc/utmp entry associated with this login session */
  46.     if ((slot = ttyslot()) == 0)
  47.     {
  48.         fprintf(stderr, "You don't have a tty!\n");
  49.         exit(1);
  50.     }
  51.  
  52.     /* Open /etc/utmp so we can find the correct entry */
  53.     if ((ufd = open("/etc/utmp",O_RDONLY)) < 0)
  54.     {
  55.         fprintf(stderr, "Can't open /etc/utmp\n");
  56.         exit(1);
  57.     }
  58.  
  59.     /* Go to the appropriate slot */
  60.     if (lseek(ufd,slot * sizeof(struct utmp),SEEK_SET) < 0)
  61.     {
  62.         fprintf(stderr, "Can't lseek to slot %d\n", slot+1);
  63.         exit(1);
  64.     }
  65.  
  66.     /* Read the entry */
  67.     if (read(ufd,&entry,sizeof(struct utmp)) == sizeof(struct utmp))
  68.     {
  69.         char *dot;
  70.  
  71.         /* Retain only the first component of the hostname,
  72.          * by cutting off everything after, and including, the
  73.          * first dot.
  74.          */
  75.         if ((dot = strchr(entry.ut_host,'.')) != NULL)
  76.             *dot = '\0';
  77.         printf("%s\n", entry.ut_host);
  78.         exit(0);
  79.     }
  80. }
  81. ----- end included file ------------------------------------------
  82.