Hi Jim, Everyone, I had an earlier query regarding Derek Dresser's utmp logging solution and some problems i had with it using 'who' and 'last'.
I'm sharing with you here some of my findings and modifications to Derek's scripts so that 'who' and 'last' works as it should ;-) Jim, sorry if you receive this twice already. My mails here sometimes get clobbered. Cheers, Phil +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 'Instantaneous' UTMP Logging for LTSP Workstations (modifications from Derek Dresser's utmp scripts) Philip A. Roa Intelisoft Microcomputer Systems March 7, 2002 Purpose: To monitor currently connected LTSP thin clients on an LTSP server. Problem: LTSP thin clients are not correctly reported by 'who' and 'last' Disclaimer: I cannot be responsible for anything that happens to your system. Use at your own risk. If you're not comfortable doing this, then i suggest you have someone qualified do stuff. You have been warned. The source of the problem: ========================= Sessions are appended to the utmp / wtmp logs via file:/usr/X11R6/bin/sessreg. From the manual page of sessreg, the -l (line-name option) option determines the record name of the utmp entry. That is, a session name is looked-up (or deleted in the future) via its line-name.This creates no problems for terminal devices since the final pathname segment of the terminal device filename accessing the server is unique (e.g. ttyd0). On the other hand, for X terminal sessions, the line-name normalizes to the host's local display number (usually the default ':0'). That is if you specify your line-name option as the $DISPLAY, utmp only gets the ':0' - a non-unique name. This is where our problem begins. When multiple clients (remote thin clients) starts accessing the LTSP server, it is only the last connected host that will be reported as 'still logged in'. The rest of the current record entries get 'stepped-on' and purged from utmp (we don't want that to happen). The solution: ============= To 'get-around' with this problem, we have to make 'line-name' unique. One way of doing this is by extracting the hostname component of the $DISPLAY variable (which is initially setup for us by LTSP). This way, all our connected LTSP thin clients will be correctly logged into utmp so our 'who' and 'last' will work as it should. Scripts: ======== There are 3 script files used here: sessreg.h, GiveConsole, & TakeConsole (on some distributions you may have Xstartup and Xreset scripts respectively). Don't forget to set file permissions for all the 3 scripts to 755 (i.e. chmod 755 /etc/X11/xdm/sessreg.h...do..same..thing..to..the..rest..of..the..scripts...) when you're done editing. =============================================== file:/etc/X11/xdm/sessreg.h --------------------------- Purpose: Prepares the line-name (-l), and hostname (-h) options for sessreg $LINENAME - contains the host portion of $DISPLAY for our remote hosts. Howerver, it resolves to $HOSTNAME if the access is done on the LTSP server itself $LTSNAME - contains the hostname of the LTSP server =============================================== # to be used by GiveConsole and TakeConsole LINENAME=`echo $DISPLAY | awk '{print substr($1,1,length($1)-2)}'` if [ -z $LINENAME ] then LINENAME=$HOSTNAME fi LTSHOST="LTSP("$HOSTNAME":0)" ========================================== file:/etc/X11/xdm/GiveConsole ----------------------------- Purpose: Logs the start of an X session The original file shown here comes from Mandrake 7.0 (Air) distribution. Modifications are indicated. ========================================== #!/bin/sh # Assign ownership of the console to the invoking user # $XConsortium: GiveConsole,v 1.2 93/09/28 14:29:20 gildea Exp $ # # By convention, both xconsole and xterm -C check that the # console is owned by the invoking user and is readable before attaching # the console output. This way a random user can invoke xterm -C without # causing serious grief. # chown $USER /dev/console # Original line from distribution / commented out #/usr/X11R6/bin/sessreg -a -w "/var/log/wtmp" -u "/var/run/utmp" \ # -x "/etc/X11/xdm/Xservers" -l $DISPLAY -h "" $USER # Modified / PAR 02/02 to accomodate instantaneous utmp logging source '/etc/X11/xdm/sessreg.h' /usr/X11R6/bin/sessreg -a -w "/var/log/wtmp" -u "/var/run/utmp" \ -x "/etc/X11/xdm/Xservers" -l $LINENAME -h $LTSHOST $USER ========================================== file:/etc/X11/xdm/TakeConsole ----------------------------- Purpose: Releases an X session The original file shown here comes from Mandrake 7.0 (Air) distribution. Modifications are indicated. ========================================== #!/bin/sh # Reassign ownership of the console to root, this should disallow # assignment of console output to any random users's xterm # $XConsortium: TakeConsole,v 1.2 93/09/28 14:30:29 gildea Exp $ # chmod 622 /dev/console chown root /dev/console # Original line from distribution / commented out #/usr/X11R6/bin/sessreg -d -w "/var/log/wtmp" -u "/var/run/utmp" \ # -x "/etc/X11/xdm/Xservers" -l $DISPLAY -h "" $USER # Modified / PAR 02/02 to accomodate hostname source /etc/X11/xdm/sessreg.h /usr/X11R6/bin/sessreg -d -w "/var/log/wtmp" -u "/var/run/utmp" \ -x "/etc/X11/xdm/Xservers" -l $LINENAME -h $LTSHOST $USER # Scripts that you might want to run on exit (for housekeeping purposes) follows #/usr/bin/umountncp-vol 2&> /dev/null ========================== Output of 'who' and 'last': ========================== ------------------------------ bash# who -H USER LINE LOGIN-TIME FROM root admin1 Mar 7 11:23 abeng sales3 Mar 7 09:14 ------------------------------ Note: 'admin1' and 'sales3' under the 2nd column (LINE) are our LTSP thin clients (hostnames from $DISPLAY) ------------------------------------------------------------------------- bash# last | head -n13 root admin1 LTSP(lts1:0) Thu Mar 7 11:23 still logged in root admin1 LTSP(lts1:0) Thu Mar 7 10:40 - 11:23 (00:43) amy acct1 LTSP(lts1:0) Thu Mar 7 10:39 - 10:42 (00:02) abeng sales3 LTSP(lts1:0) Thu Mar 7 09:14 still logged in abeng sales3 LTSP(lts1:0) Thu Mar 7 09:12 - 09:13 (00:01) joey sales3 LTSP(lts1:0) Thu Mar 7 09:11 - 09:12 (00:00) root lts1 LTSP(lts1:0) Thu Mar 7 09:09 - 09:21 (00:12) proa admin1 LTSP(lts1:0) Thu Mar 7 09:11 - 09:36 (00:25) proa admin1 LTSP(lts1:0) Thu Mar 7 09:09 - 09:11 (00:01) reboot system boot 2.2.14-15mdk Wed Jan 23 13:52 (00:35) proa pts/0 192.168.1.32 Wed Jan 23 11:28 - 11:32 (00:04) proa ftp 192.168.1.32 Wed Jan 23 11:27 - 11:27 (00:00) root pts/0 Wed Jan 23 11:23 - 11:23 (00:00) reboot system boot 2.2.14-15mdk Wed Jan 23 10:29 (03:58) ------------------------------------------------------------------------- Note: Entries with 'LTSP({hostname:0)' (3rd column) are log entries from our scripts. Other entries were added to distinguish them from ours ;-). Entries #1 and #4 (from the top) are still currently still connected. Entry #7 shows an X Session done on the server itself (lts1) Cheers!, Phil _____________________________________________________________________ Ltsp-discuss mailing list. To un-subscribe, or change prefs, goto: https://lists.sourceforge.net/lists/listinfo/ltsp-discuss For additional LTSP help, try #ltsp channel on irc.openprojects.net