1xlockmore-5.67: the maintained version of xlock
2see docs/Revisions for more version stuff
3see docs/TODO for stuff to do :)
4Help is always appreciated too ;) .
5
6Primary site: https://www.sillycycle.com/xlock
7Alternate site: http://ibiblio.org/pub/Linux/X11/screensavers
8Web page: https://www.sillycycle.com/xlockmore.html
9Maintainer: David A. Bagley <bagleyd AT verizon.net>
10Primary key fingerprint: 1B79 C847 8F23 6DCD ADC0 D6AC CF15 9707 3779 19AE
11
12Send all bug reports to bagleyd AT verizon.net . Also just
13send me mail if you want to be on a list for latest releases.
14
15Adapted from Patrick J. Naughton's original xlock, with lots of help
16from others.
17
18Notice: a new bug is now seen when compiling with gcc -O2 on Linux (the
19current default) for pacman mode which gives the pacman an annoying
20hesitation behavior and lasts until a ghost comes close enough to trigger
21it to do something else. So it is recommended to compile all first with -O2
22and then remove pacman.o and edit the Makefile to use -O1. This is also
23seen in older versions of this package with new compilations. Seen with
24gcc 9.3.0.
25
26How to build?
27-------------
28 An ANSI C compiler is required for build.
29 motif (and editres) are used to build xmlock and are not used in xlock.
30
31 Check below to see if your machine is one mentioned that causes
32 problems, otherwise it should be easy. Just to be safe after installing
33 test it with something like: `/usr/local/bin/xlock -debug -verbose`
34
35 If you installed this before you may want to back up your XLock.ad file
36 if you made changes, since `make install` will overwrite this.
37
38 There are 3 ways to build:
39
40 configure:
41 `configure --help` to see options.
42
43 configure ; make ; make install
44
45 For Linux and others you may want something like:
46 configure --prefix=/usr/X11R6 ; make ; make install
47 that way it will install it in /usr/X11R6 not /usr/local
48 For Suns you may want:
49 configure --prefix=/usr/openwin ; make ; make install
50
51 imake:
52 Sometimes this is not setup correctly by the distributor ... i.e. not
53 my fault. You may want to do these quick edits to the iconfig.h so you
54 have more capabilities:
55
56 Do you have XPM? If so, uncomment "#define XpmLibrary".
57 Do you have OpenGL or Mesa? If so, uncomment "#define GLLibrary".
58 Do you have CDE? If so, uncomment "#define DtSaverLibrary".
59 Do you have RPLAY? If so, uncomment "#define RplayLibrary".
60 Do you have NAS? If so, uncomment "#define NasLibrary".
61 Do you have Motif? If so, uncomment "#define XmLibrary".
62
63 Examine iconfig.h for other optional capabilities.
64
65 xmkmf ; make Makefiles ; make depend ; make ; make install
66 or
67 xmkmf -a ; make ; make install
68
69 make.com:
70 See VMS below.
71
72
73Note to binary redistributors:
74-----------------------------
75 Probably should not distribute with any library requirements
76 (except possibly XPM, unless you statically link them in
77 and with USE_BOMB since it might not run right if you do not know
78 if your users will use xdm or not. For example:
79 configure --without-xpm --without-opengl --without-mesa
80 --without-dtsaver --without-rplay --without-nas --disable-bomb; make
81 You may want to distribute it with the xlock/XLock.ad file with "XLock."
82 instances replaced with "*". On Sun's, I need it to override the system
83 XLock.ad file.
84 Please let me know if there are other concerns.
85
86
87Likely Problems
88---------------
89 Make sure you use the new XLock.ad resource file (or at least remove the
90 old one) otherwise several modes will not be set up nicely. This is
91 usually put as a file in $HOME/XLock and/or
92 $WHEREVER_X11_IS_LOADED/lib/X11/app-defaults/XLock .
93
94 "Key: " this usually means you should get your administrator to setuid
95 xlock to root or at least setgid xlock to shadow. If you do not have
96 a friendly administrator it is asking for a key (password) that it will
97 save encrypted your $HOME/.xlockrc file.
98
99 Debugging options I use frequently:
100 xlock -debug -verbose -erasemode no_fade -duration 2 -sequential
101
102 AIX (IBM RS6000)
103 AIX's "make":
104 AIX's "make" can not handle "+=" so if you use the iconfig.h, you
105 have to group all your DEFINES into one long line and use "="
106 instead. GNU's "make" solves this problem.
107 AIX 3.1 and less:
108 it SHOULD compile automatically with -DLESS_THAN_AIX3_2 using the
109 iconfig.h, since the passwd struct is not available.
110 AIX 3.2 and greater:
111 one must have setuid xlock to root if you want to use it
112 without being root.
113 su - root
114 chown root xlock
115 chmod u+s xlock
116 chmod og+rx xlock
117 AFS users:
118 See iconfig.h, grep on "AFS".
119 Some machines have an alternate password shadowing method, if someone
120 figures it out mail me the patch.
121 AIX with DCE you will need "-ls" among the XLOCKLIBS.
122
123 Alpha-OSF/1 (Digital Equipment Corp)
124
125 Enhanced security:
126 Compile with -DOSF1_ENH_SEC see iconfig.h
127 chown auth.auth xlock
128 chmod 2755 xlock
129 Unfortunately the following is reportedly broken since xlockmore-2.10
130 and needs a patch, I heard it produces the following at runtime.
131Unaligned access pid=1767 <xlock> va=140489e24 pc=3ff807d9978 ra=3ff807d9880
132type=ldq
133Segmentation fault (core dumped)
134
135 Apollo (HP)
136 Shift-Control-Break is caught. See HP.
137
138 CDE (DT) Common Desktop Environment.
139 Go to the CDE DT CONFIG SECTION of the
140 iconfig.h and uncomment (should be autodetected if you use configure)
141XCOMM #define DtSaverLibrary
142 Here's what it does:
143 The DT screensaver is part of the dtwm window manager and what it does
144 is create a full-screen-sized window for each screen of your display.
145 This is different from other screen savers which use virtual roots.
146
147 What the DTSAVER option does is basically call a DT routine that
148 returns the id's of the windows it creates for the screensaver. Then
149 xlockmore will use these windows to display its stuff.
150
151 DT has a program where you can select your screensaver modes (or
152 screen saver programs), ala xmlock, and set your screensaver settings.
153 It also creates a small window where if you select a particular mode
154 it will run the screen saver and display it on that small window.
155
156 Here's how to set it up on your home directory.
157 cp etc/dtprofile $HOME/.dtprofile
158 This uses a ksh syntax. If your shell is csh or other change it
159 accordingly.
160 cp etc/dtscreen.dt $HOME/.dt/types
161 The actions points to /usr/remote so you may want to change this.
162 After this you need to completely logout from your CDE session and log
163 back in so it will read the .dtprofile. (If you just modify the actions
164 in dtscreen.dt you don't need to log out; you can simply restart your
165 dtwm.)
166 Here's how to set it up on your system.
167 edit /usr/dt/bin/Xsession DTSCREENSAVERLIST to contain the
168 DTSCREENSAVERLIST stuff in etc/dtprofile
169 cp etc/dtscreen.dt /usr/dt/appconfig/types/C/dtscreen.dt
170
171 The disadvantage to the above is some features of xlock are absent,
172 in particular, the logout lab feature. This version of xlock does not
173 have a a drop in replacement for the Screen Style Manager. Here is a
174 work around on Solaris in 3 patches:
175 1. Take out Screen option.
176 2. Put in /usr/local/bin/xlock as the default locker.
177 3. Turn off the default DT locking mechanism.
178*** /usr/dt/app-defaults/C/Dtstyle.orig Fri Apr 12 11:53:00 1996
179--- /usr/dt/app-defaults/C/Dtstyle Thu Jul 24 09:47:34 1997
180***************
181*** 24,30 ****
182 !# Do not translate the following
183 !###
184 !# componentList specifies the buttons that appear in the Style Manager.
185! Dtstyle*componentList: Color Font Backdrop Keyboard Mouse Beep Screen Dtwm Startup
186
187 !# The Style Manager may be oriented vertically by commenting out this line
188 Dtstyle*mainRC.orientation: HORIZONTAL
189--- 24,31 ----
190 !# Do not translate the following
191 !###
192 !# componentList specifies the buttons that appear in the Style Manager.
193! !#Dtstyle*componentList: Color Font Backdrop Keyboard Mouse Beep Screen Dtwm Startup
194! Dtstyle*componentList: Color Font Backdrop Keyboard Mouse Beep Dtwm Startup
195
196 !# The Style Manager may be oriented vertically by commenting out this line
197 Dtstyle*mainRC.orientation: HORIZONTAL
198*** /usr/dt/appconfig/types/C/dt.dt.orig Fri Apr 12 11:53:28 1996
199--- /usr/dt/appconfig/types/C/dt.dt Thu Jul 24 11:32:21 1997
200***************
201*** 226,235 ****
202 ACTION LockDisplay
203 {
204 LABEL LockDisplay
205! TYPE TT_MSG
206! TT_CLASS TT_REQUEST
207! TT_SCOPE TT_SESSION
208! TT_OPERATION Display_Lock
209 DESCRIPTION The LockDisplay action locks the workstation. \
210 You must know the user's or root password to \
211 unlock the workstation.
212--- 226,239 ----
213 ACTION LockDisplay
214 {
215 LABEL LockDisplay
216! # TYPE TT_MSG
217! # TT_CLASS TT_REQUEST
218! # TT_SCOPE TT_SESSION
219! # TT_OPERATION Display_Lock
220! TYPE COMMAND
221! ARG_COUNT 0
222! WINDOW_TYPE NO_STDIO
223! EXEC_STRING /usr/local/bin/xlock
224 DESCRIPTION The LockDisplay action locks the workstation. \
225 You must know the user's or root password to \
226 unlock the workstation.
227*** /usr/dt/config/C/sys.resources.orig Fri Apr 12 11:53:15 1996
228--- /usr/dt/config/C/sys.resources Thu Jul 24 11:33:57 1997
229***************
230*** 82,88 ****
231
232
233 dtsession*saverTimeout: 10
234! dtsession*lockTimeout: 30
235 dtsession*cycleTimeout: 3
236 dtsession*saverList: StartDtscreenBlank
237
238--- 82,89 ----
239
240
241 dtsession*saverTimeout: 10
242! !#dtsession*lockTimeout: 30
243! dtsession*lockTimeout: 0
244 dtsession*cycleTimeout: 3
245 dtsession*saverList: StartDtscreenBlank
246
247
248 Using xlock from the dtwm front panel
249 (from Sun Infodoc ID 13527 available from http://sunsolve.sun.com)
250--------------------------------------------------------------------
251First the easy way (This is to overwrite the default CDE action)
252~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
253
2541. Run dtcreate
2552. Create an action called LockDisplay
2563. Set the "Command when action is opened" field to:
257 /usr/openwin/bin/xlock
2584. Set the "Window Type" field to No Output.
2595. Save the file ==> this creates a LockDisplay.dt in ~/.dt/types
2606. Reload the action.
261
262This will help you to bring up xlock when you are using lock in the
263front panel.
264
265
266
267
268Second way (another way to use action)
269~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
270
2711. Create a new action for your desktop. We'll call it Xlock.
2722. Tell the desktop about the new action and then test it.
2733. Modify the front panel so that it will call your new
274 action, Xlock, instead of the old action, LockDisplay.
275
2761. CREATING A NEW ACTION:
277
278 - cd to ~/.dt/types and create a file called Xlock.dt.
279 - Add the following action definition to this file.
280
281ACTION Xlock
282{
283 LABEL Xlock
284 ARG_COUNT 0
285 TYPE COMMAND
286 WINDOW_TYPE NO_STDIO
287 EXEC_STRING /usr/openwin/bin/xlock
288 DESCRIPTION xlock
289}
290
291 - This action definition defines an action called "Xlock".
292 When the action is called, it will execute xlock by
293 calling /usr/openwin/bin/xlock.
294
2952. TELLING THE DESKTOP ABOUT THE NEW ACTION AND TESTING IT:
296
297 - Now that we have defined the new Xlock action, we need to
298 first tell the desktop about it and then test it.
299 - To tell the desktop about the new action bring up
300 the "Application Manager". You can do this by selecting
301 it from the front panel.
302 - From the Application Manager, select "Desktop_Tools"
303 - Now, select "Reload Actions".
304
305 - At this point, the desktop knows about the new Xlock action.
306 To test it, type "dtaction Xlock". Xlock should start up.
307
308
3093. ADDING THE NEW ACTION TO THE FRONT PANEL:
310
311 - copy the dtwm front panel configuration file, dtwm.fp, from
312 /opt/CDE/appconfig/types/C directory to your personal dt
313 directory "~/.dt/types" directory.
314 - cd to ~/.dt/types
315 - From here, edit the dtwm.fp
316 - Search for Lock. You should see something like:
317
318CONTROL Lock
319{
320 TYPE icon
321 CONTAINER_NAME Switch
322 CONTAINER_TYPE SWITCH
323 POSITION_HINTS 1
324 ICON Fplock
325 LABEL Lock
326 PUSH_ACTION LockDisplay
327 HELP_TOPIC FPOnItemLock
328 HELP_VOLUME FPanel
329}
330
331 - When you press the lock icon on the front panel, it calls
332 the action LockDisplay. The above paragraph is the definition
333 for that front panel lock icon.
334
335 - To get the front panel lock icon to call the action we
336 just defined, Xlock, instead of the LockDisplay action, all
337 you need do is change the PUSH_ACTION line from
338 "LockDisplay" to "Xlock".
339
340CONTROL Lock
341{
342 TYPE icon
343 CONTAINER_NAME Switch
344 CONTAINER_TYPE SWITCH
345 POSITION_HINTS 1
346 ICON Fplock
347 LABEL Lock
348 PUSH_ACTION Xlock
349 HELP_TOPIC FPOnItemLock
350 HELP_VOLUME FPanel
351}
352
353 - Note: You might change the Label field to Xlock and you
354 might remove the HELP_TOPIC and HELP_VOLUME fields, but this
355 modification is not necessary.
356
357 - Now tell the window manager to reread the configuration
358 files. You do this by selecting "Restart Workspace Manager..."
359 from your workspace menu.
360
361 - Press the lock icon on the front panel...xlock should be
362 called. If not, make sure your DTDATABASESEARCHPATH
363 environment variable contains $HOME/.dt/types.
364--------------------------------------------------------------------
365
366 Cygwin32:
367 Build like this:
368 CFLAGS="-O2 -m486 -Wall" CXXFLAGS="-O2 -m486 -Wall"\
369 ./configure --prefix=/usr/X11R6 --disable-allow-root --disable-bomb\
370 --enable-unstable --enable-orig-xpm-patch --enable-xlockrc\
371 --enable-def-play="cat > /dev/dsp < "
372 Not done: text3d (sound is better with wav files)
373 Currently fpos_t gives a bunch of errors
374 http://groups.google.com/group/nodejs/browse_thread/thread/9b1634f50a3a4864
375 I used the "most ugly solution" and it seems to work. Add
376#include "/usr/include/cygwin/config.h"
377 to the top of config.h after you run configure.
378
379 DCE authentication (tested only on HP's)
380 See iconfig.h (xmkmf) or modes/Makefile.in (configure).
381
382 Digital Unix
383 Reported that 3.2D (8bpp) password screen color map gets messed up
384 sometimes when in random mode as it switches from one mode to another.
385
386 ESIX
387 Similar to Solaris2.x. You will need a -DSVR4 to compile.
388 chmod 440 /etc/shadow
389 if you get libX11.so.xxx not found
390 link with the static versions of the X libraries
391 chmod 2755 xlock
392
393 FreeBSD
394 One may have to setuid xlock to root (are there any objections?).
395 Also see "XFree86" if applicable.
396
397 HP
398 Shift-Control-Break is caught. This uses a library Xhp11 that may
399 not exist on some systems. Comment out
400 XHPDisableReset(dsp);
401 and
402 XHPEnableReset(dsp);
403 in "xlock.c" if you do not have this library.
404 May have to setuid xlock to root.
405 The optimizer may break in xlock/ .
406 HP's "make":
407 HP's "make" can not handle "+=" so if you use the iconfig.h, you
408 have to group all your DEFINES into one long line and use "="
409 instead. GNU's "make" solves this problem.
410 HP-UX with Secured Passwords:
411 Compile with -DHPUX_SECURE_PASSWD and setuid xlock to root.
412 HP-UX with Passwd Etc:
413 Compile with -DHP_PASSWDETC .
414 Link with -lrgy -lnck -lndbm .
415 This is insecure so make sure you know this by having you go to the
416 code to enable it.
417 Calls to XSetScreenSaver when using CDE (i.e. not called with -dtsaver)
418 are not supported. This can cause a disruption in the rpc ttdbserver
419 system resulting in the CDE lock and exit buttons to fail, 5 to 50%
420 of the time. I am told this will not be fixed by HP, only documented.
421 The only supported method of doing this stuff is via dtstyle.
422 configure --without-editres if configure gets tripped up
423 I found on my system -g -O trips up on life.c and shape.c ... so just
424 have one or the other.
425
426 IRIX (SGI)
427 OpenGL works but may be a little flaky.
428 Add this to the Makefile.
429 -DglGenTextures=glGenTexturesEXT\
430 -DglDeleteTextures=glDeleteTexturesEXT\
431 -DglBindTexture=glBindTextureEXT
432 xmlock will not work because there is a /usr/bin/X11/xlock too,
433 so either rename that one or do not use xmlock.
434
435 KERBEROS
436 See iconfig.h (xmkmf) or configure --help .
437
438 Linux (Intel 80386, 80486, & Pentium)
439 Red Hat and PAM ... may not work ... #define BAD_PAM in config.h after
440 you do a configure and before a make. Then make sure xlock is setuid
441 root.
442 If you are using elf _or_ shadow passwords:
443 xlock should compile with -DHAVE_SHADOW
444 this is already forced if you have elf so do not worry, it should
445 work even if you do not have shadow passwording.
446 If you are _not_ using elf and are using shadow passwords:
447 (this old version of shadowing has a _MAJOR_ known security flaw)
448 link with -lshadow -lgdbm
449 Next if using shadow passwords:
450 chown root.root xlock (or root.shadow if it exists)
451 chmod 4755 xlock
452 (chmod 2755 xlock may be better if shadow has group read for root group)
453 Also check that the following was done:
454 Your /usr/X11R6/lib/X11/config/linux.cf should have
455#define HasShadowPasswd YES
456 This would let the iconfig.h work automatically for compile/link.
457 chown root.root /etc/shadow (or root.shadow if it exists)
458 chmod 400 /etc/shadow
459 (chmod 440 /etc/shadow may be better).
460 If you want to install shadow passwords on a system that doesn't
461 already have them (be careful, it can be tricky), see
462 http://sunsite.unc.edu/linux/HOWTO/Shadow-Password-HOWTO.html
463 XShm.h needed by fzort.c... pull it in with
464 sudo apt-get install libxext-dev
465
466 Also see "XFree86" if applicable.
467
468 Linux (Alpha)
469 Change the order of XLIB and XPMLIB in the iconfig.h so the XPMLIB
470 comes first. Intel stuff above probably applies as well.
471
472 Mesa and OpenGL
473 I assume the Mesa 3-D Graphics Library for the Imakefile. See below
474 on availability. Follow its instructions and then go to Mesa
475 section of the iconfig.h and uncomment
476XCOMM #define GLLibrary
477 Mesa and sometimes OpenGL are autodetected if you use configure.
478 xlock using the Mesa Libraries (<= 2.6) setuid root has a known
479 method for users to obtain root privledges!
480 Mesa leak (<=3.4.1) you may want to fix a leak for glXUseXFont()
481*** src/X/xfonts.c.orig Fri Feb 9 09:42:36 2001
482--- src/X/xfonts.c Thu May 3 09:24:21 2001
483***************
484*** 260,266 ****
485 bm = (GLubyte *) MALLOC((max_bm_width * max_bm_height) * sizeof
486 (GLubyte));
487 if (!bm) {
488! XFreeFontInfo( NULL, fs, 0 );
489 gl_error(NULL, GL_OUT_OF_MEMORY,
490 "Couldn't allocate bitmap in glXUseXFont()");
491 return;
492--- 260,266 ----
493 bm = (GLubyte *) MALLOC((max_bm_width * max_bm_height) * sizeof
494 (GLubyte));
495 if (!bm) {
496! XFreeFontInfo( NULL, fs, 1 );
497 gl_error(NULL, GL_OUT_OF_MEMORY,
498 "Couldn't allocate bitmap in glXUseXFont()");
499 return;
500***************
501*** 375,381 ****
502 }
503
504 FREE(bm);
505! XFreeFontInfo( NULL, fs, 0 );
506 XFreeGC (dpy, gc);
507
508 /* Restore saved packing modes. */
509--- 375,381 ----
510 }
511
512 FREE(bm);
513! XFreeFontInfo( NULL, fs, 1 );
514 XFreeGC (dpy, gc);
515
516 /* Restore saved packing modes. */
517
518
519 PAM
520 http://www.kernel.org/pub/linux/libs/pam/
521 Rplay
522 Audio package. See below on availability. Follow its instructions and
523 then go to iconfig.h and uncomment (should be autodetected if you use
524 configure)
525XCOMM #define RplayLibrary
526 See config directory for example. (Note: The example files are
527 concerned with getting it working ... not security).
528
529 Solaris2 and greater (Sun SPARC)
530 I found this link helpful to link with the native g++ on Solaris 10.
531 ln -s /usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/libgcc.a libgcc.a
532 You could use Mesa or OpenGL. I found a developers version of OpenGL at
533 http://www.sun.com/software/graphics/OpenGL/index.html
534 Solaris2.6 may not work with rplay. configure --without-rplay
535 If you get something like:
536xlock.c:1584: `sigset_t' undeclared (first use this function)
537 try removing -I/usr/include from the Makefiles or get rid of -Xc
538 in the xlock/Makefile. If someone figures out a way around this
539 in the code let me know.
540 To get xlock working with Sun's GL libraries and includes
541 If you get "macro `glNormal3f' used with just one arg" ... you need
542 -DSUN_OGL_NO_VERTEX_MACROS
543 If using Imakefile, see iconfig.h .
544 After a make, use on a display that supports GLX `xdpyinfo | grep GLX`
545 Imake will compile with the -DHAVE_SHADOW switch.
546 With GNU's gcc, get rid of the "-ansi" during compilation, also
547 one may want to get rid of the -xF references in
548 /usr/openwin/lib/config/sun.cf and Imake.tmpl if you get a
549 cc: language F not recognized
550 Solaris2.x NIS+ or not using NIS (/etc/passwd):
551 If you use netgroup make sure there is a return at the end of file.
552 If your using g++-2.95 or later and have old X11 includes you may have
553 to change "g++" to "g++ -fpermissive" in the Makefiles.
554 Sometimes a path to stdc++ library or something is not set right by
555 configure. The symptom is that xlock runs fine as root but gives a
556 "No such file or directory" error for a library when run by a user.
557 Edit with the modes/Makefile adding to XLOCKLDFLAGS the path to the
558 directory of the library and rebuild.
559
560 SunOS4.1.x (Sun Sparc & 680x0)
561 bubble may crash the xnews server if patch 100444-76 OpenWindows V3.0
562 Server patch is installed. To test this
563 `strings /usr/openwin/bin/xnews | grep Patch`
564 It would then show Patch #3000-124 if 10044-76 is installed.
565 Put in a link from /usr/include/X11 to your ${OPENWINHOME}/include/X11
566 to use the xmkmf or use the configure file provided.
567 gcc -Wall gives a lot of silly warnings, its safe to disregard them.
568 If your using g++-2.95 or later and have old X11 includes you may have
569 to change "g++" to "g++ -fpermissive" in the Makefiles.
570
571 Ultrix (DEC)
572 I heard that the logout button just kills xlock.
573 USE_XLOCKRC feature unimplemented, but may not be hard to do.
574 xlock must be either setuid root or setgid authread to validate the
575 password on an Ultrix system.
576
577 VMS (DEC)
578 You may want to set a few things like vroot, bomb, and sound (see audio
579 below) at the top of the file.
580 All you should need to do to build the executable is:
581 $ @make
582 To run xlock a symbol needs to be defined, for example:
583 XLOCK:==$H268SYSEXE:XLOCK
584 where H268SYSEXE is a logical name pointing to the directory where
585 XLOCK.EXE resides. The '$' after == means this is a foreign command
586 and VMS makes the command line available to the program.
587 If the link bombs out I recommend trying it again like the following:
588 $ @make clean
589 $ @make
590 -allowroot only works if you have SYSPRV enabled which is a bit limiting.
591 Unless one uses the privileged install by a system manager. To do
592 this, the following command needs to be executed at system startup
593 (i.e. included in systartup_vms.com):
594 INSTALL ADD {dev}:[{dir}]XLOCK.EXE/PRIV=(SYSPRV)
595 where {dev}:[{dir}] is the full path of the executable.
596 The XLock file normally in /usr/lib/X11/app-defaults needs to be in the
597 directory DECW$SYSTEM_DEFAULTS on VMS systems and be called
598 'DECW$XLOCK.DAT'.
599 USE_XLOCKRC, USE_AUTO_LOGOUT, USE_BUTTON_LOGOUT, & USE_MULTIPLE_ROOT
600 features are not implemented.
601 To use audio:
602 Set "sound" to be 1 in the make.com file. Only available on the Alpha.
603 To get it work on a VAX some editing of the make.com is needed
604 (scan for USE_VMSPLAY)
605 The default sound files are hard coded to be in the current directory
606 see line 128 or so of the resource.c file but can be overruled from
607 the command line or the resourcefile decw$xlock.dat.
608 Sounds did not work for me on the VAX.
609 It should work OK on an AXP. (Due to a bug in the SO driver on some
610 models running VMS7.0, sounds are only available on the headset).
611 To use new event loop:
612 For VMS7.0 and higher : new event loop is used by default.
613 You do not need to install extra software.
614 For VMS6.2 or lower :
615 You need some UNIX utilities installed (XVMSUTILS). See where to get
616 it below.
617 Look at the make.com and xvmsutil stuff.
618 Latest on VMS sound
619 first it tests if the SO: device is present
620 Then if it could be compiled in (license problems) MMOV (Multimedia
621 services for OpenVMS) is used. Probably you'll need the Developer
622 license to get it compiled.
623 limitations :
624 -currently the SYSNAM privilege is needed to play sounds
625 (limitation of MMOV)
626 -some compilation warnings/informationals in the routines which
627 are taken from the users system disk. (problem in MMOV)
628 -One warning due to multiple defined symbols in the libraries
629 issued by Compaq should be ignored.
630 -Presently A developer license for MMOV is needed. Probably by
631 slightly modifying DEF_PLAY the Run-time license could also
632 be usable.
633
634 X11
635 If your using g++-2.95 or later and have old X11 includes you may have
636 to change "g++" to "g++ -fpermissive" in the Makefiles.
637
638 XFree86
639 Add the following to ~/.Xdefaults
640XLock.startCmd: xmodmap -e 'keycode 37=' -e 'keycode 109='
641XLock.endCmd: xmodmap -e 'keycode 37=Control_L' -e 'keycode 109=Control_R'
642 which unmaps both Control keys when xlock is started, and restores the
643 mapping when it ends. Restart your session so .Xdefaults is read...
644 Works perfectly.
645 Other less perfect methods...
646 Control-Alt-Backspace will defeat locking mechanism and return your
647 console back unless you put "DontZap" in your XF86Config file.
648 (In X11R5, that would be a "dontzap" in your Xconfig file).
649 Control-Alt-F1 (among others) will defeat locking mechanism with
650 virtual terminals. This is not too good, right? If you are using
651 Linux, try vlock on tsx-11.mit.edu in /pub/linux/sources/usr.bin .
652 The current XFree86 (as far as I know) does not have a server
653 extension for catching or disabling VT switching.
654 Here is a work around, put this line in /etc/profile:
655 alias x='(startx >/dev/null &);clear;logout'
656 then use 'x' instead of 'startx' (with no other active VT's).
657 Try configuring with --enable-vtlock . This is experimental and requires
658 xlock being setuid to root so there are security concerns with it.
659 See man pages for its runtime options.
660
661 XPM
662 Full color pixmap package. See below on availability. Follow its
663 instructions and then go to iconfig.h and uncomment (should be
664 autodetected if you use configure)
665XCOMM #define XpmLibrary
666
667 X-Terminal
668 (My heart bleeds for you.)
669 To get xlock to run, run with -remote option or set XLock.remote on
670 in XLock.ad . You might have to use -allowaccess as well.
671
672 tvtwm
673 One used to get following error when running xlock (+nolock) with
674 tvtwm.
675 X Error of failed request: BadWindow (invalid Window parameter)
676 What happens is that RootWindow(dsp, screen) fails when tvtwm is
677 running. There is a kludge fix, but multiscreens will not work
678 right with tvtwm and xlock. (grep on TVTWM in xlock.c).
679 Another option, don't compile with -DUSE_VROOT . If you debug it
680 mail ME -OR- both the author of tvtwm and ME the patch.
681 StickyAbove problems:
682 Windows in a tvtwm that have "StickyAbove" set to true are still
683 visible when xlock (+inroot) is running. If this bothers you,
684 don't compile with -DUSE_VROOT . Is it possible to have xlock
685 set "StickyAbove" to true as well?
686
687 fvwm
688 -install does not install colormaps. fvwm will not allow an
689 application to install its own colormap. You could always edit the
690 source if you have it, (fvwm-1.24r)colormaps.c, where it says
691 if(ReInstall)
692 {
693 XInstallColormap(dpy,last_cmap);
694 }
695 make sure this does not happen.
696 (fvwm does this because its following the X11 docs which say that
697 window managers should not allow an application to install colormaps).
698
699 swirl (and tube) mode
700 Use with -install to see colormap change.
701 See "fvwm" if applicable.
702 "swirl" cycles its colors, except black and white.
703 This is easily seen when on a color monitor one enters:
704 ./xlock -mode swirl -inwindow -install
705 now move the mouse in the window.
706 If you find this annoying compile swirl.c with -DFORCEFIXEDCOLORS.
707 I hear it LOCKS UP on i386BsdArchitecture and tvtwm.
708 With twm (and fvwm see above) the colormap does not change.
709
710 transparent mode
711 Try this fudge:
712 xlock -mode blank -geometry 1x1 -enablesaver
713
714 SafeWord
715 Edit config.h.in ... uncomment SAFEWORD line near bottom.
716 In modes/Makefile.in make sure SAFEWORD is linked in, comment out
717 similar link that does not contain safeword libraries.
718 Put the cust*.h files in the main xlock directory.
719 Use `configure; make`.
720 Get back to me if it works or does not work.
721
722 Dynamic Linking
723 Dynamic Linking using elf on the Linux and Sun. This is kind of fragile
724 and will break other systems. GL modes using Mesa on a PseudoColor
725 display seem to run short of colors.
726 Linux:
727 Not all distributions of Linux have "dlfcn.h" which is needed.
728 Using configure --enable-modules (MODULE_PATH set in modes/Makefile(.in)
729 and xlock/Makefile(.in)) then build as normal. This is not recommended
730 since random mode seems to act very strangely.
731 Uncomment at least "#define Modules" in iconfig.h, run "xmkmf -a"
732 and run make install as normal.
733 Sun:
734 Need Gnu's make
735 Can use gcc (recommended) or cc
736 cc and CC problem with C++ modes (solitaire and text3d)
737 xlock: LoadModule: modes/solitaire.xlk: ld.so.1: xlock/xlock: fatal:
738 relocation error: file modes/solitaire.xlk: symbol __0OnwUi:
739 referenced symbol not found unrecognized mode "solitaire").
740 configure will not work.
741 Uncomment at least "#define Modules" in iconfig.h.
742 If you have more than one C++ compiler set CXX in iconfig.h
743 (seems to default to g++ for me)
744 xmkmf -a # Ignore errors on Sun (should not get errors on Linux)
745 Edit generated Makefiles like this:
746for i in Makefile xlock/Makefile modes/Makefile modes/glx/Makefile ; do
747 # both cc (& CC) and gcc (& g++)
748 sed -e "s#/usr/ccs/bin/make#/usr/local/bin/make#g" $i > $i.tmp ; mv $i.tmp $i
749 sed -e "s# -z text -M mapfile##g" $i > $i.tmp ; mv $i.tmp $i
750 sed -e "s# -Xc -xF -xcg92##g" $i > $i.tmp ; mv $i.tmp $i
751 #following seds for gcc and g++ only
752 sed -e "s#= cc\$#= gcc#g" $i > $i.tmp ; mv $i.tmp $i
753 sed -e "s#= cc #= gcc #g" $i > $i.tmp ; mv $i.tmp $i
754 sed -e "s# -Kpic##g" $i > $i.tmp ; mv $i.tmp $i
755done
756 For g++ and Sun edit modes/Makefile and modes/glx/Makefile for
757 -isystem change (use grep on isystem to find it).
758 Also, if you have more than one C++ compiler set CXX in Makefile.
759 make install
760
761Personal Use
762------------
763 You may want to compile with USE_XLOCKRC . xlock will then prompt
764 you the first time you use it for a password. It is then encrypted
765 and stored in your $HOME/.xlockrc file. This is also good for
766 users who have an unrecognized shadow password environment. See
767 iconfig.h file (xmkmf) or `configure --help` for an example.
768 Please note that it may be rude to use xlock in a lab environment.
769
770Lab Environment
771---------------
772 The auto logout feature, when enabled, will log out a user after
773 30 minutes (by default). The timeout can be changed or disabled
774 with a command-line option (or x resource -- this is allowed because
775 the logout button can always be used; see below). The time
776 remaining before auto-logout is displayed on the password entry
777 screen.
778
779 The logout button, when enabled, is a button that appears on the
780 password entry screen after 5 minutes (configurable at
781 compile-time) that, when clicked, logs out the user. The rationale
782 for this thing is that in a lab environment, we wanted a way for
783 users to be able to reliably lock their display for short periods
784 of time, but still be allowed to have the display locked for longer
785 than that if the lab isn't busy. If the lab IS busy, and there is
786 a need for workstations, the logout button can be used to logout
787 someone who's been gone for more than 5 minutes.
788
789 Of course, the auto-logout and the logout button are
790 enabled/disabled by compile-time defines. All these are OFF by
791 default. One can also force use these features with a local policy
792 of exemptions (e.g. username or group). See the iconfig.h file or
793 `configure --help` for an example. Edit your /etc/xlock.staff
794 file to reflect your policy. If using xdm, you may just want to use
795 -DCLOSEDOWN_LOGOUT (or -DSESSION_LOGOUT <- old way) in conjunction
796 with -DUSE_AUTO_LOGOUT or -DUSE_BUTTON_LOGOUT. That way all
797 backgrounded processes owned by a user do not have to be killed.
798
799 Don't PANIC, the auto-logout and the logout button will not run if
800 you are root. Otherwise, it will kill all of root's processes, not
801 a good idea. As long as you do not lock the screen (using -nolock,
802 -inwindow, or -inroot) the policy of xlock users does not go into
803 effect. If configured with --use-button-logout=-1, the user can decide
804 if he/she wants the logout button enabled (not enabled if
805 XLock.buttonLogout=0).
806
807 Also there are -DUSE_MULTIPLE_ROOT and -DUSE_MULTIPLE_USER options
808 where users with the same uid can unlock the screen. -DXLOCK_GROUP
809 option for all users in the xlock group can unlock.
810
811 blank mode only
812 Change xlock/XLock.ad from
813XLock.mode: random
814!XLock.mode: blank
815 to
816!XLock.mode: random
817XLock.mode: blank
818
819 Do a configure with these options, since they would useless now...
820 configure --without-opengl --without-mesa --without-xpm
821 Edit the generated config.h, add "#define BLANK_ONLY", then to a make.
822
823xlock still does not work: :-(
824-------------------------------
825 If all that does not work you may need to adjust xlock.h, passwd.c
826 xlock.c, and resource.c since these files are highly implementation
827 dependent. If you have to make this kind of change to get it working,
828 let me know.
829
830 You can try compiling with -g and running it with -debug and your
831 favorite debugger, so xlock will run in a more friendly way (i.e. it
832 does not lock the screen). There are also may be compile time switches
833 that could be turned on with -DDEBUG depending on what is not working
834 correctly.
835
836 Here is a simple recipe:
837 Make sure the 12th line in the iconfig.h is a comment
838 (This is because the debug library for xpm is not usually installed)
839XCOMM #define XpmLibrary
840 xmkmf <or configure --without-xpm>
841 edit Makefile on the line with CC = gcc or or CC = cc change to
842 CC = gcc -g -DDEBUG
843 make depend <but not if using configure>
844 make
845 gdb xlock (xdb or dbx xlock may work too.)
846 run -debug <other xlock options you want here>
847 where
848 print <relevant variables>
849 (you may have to use "up" to take you to xlockmore code)>
850 Mail me the results.
851
852 If xlock crashes for you when in random mode... try this and mail
853 me the results. (If it runs for a long time partial result will do
854 (gut the middle part)).
855 xlock -mode random -modelist all +install -debug -verbose
856 -modelist all: all modes except blank
857 -debug: so it does not lock the screen.
858 -verbose: for maximum verbosity.
859 +install: so it does not keep changing the colormap
860
861
862Other things to try: (if you got it working :-) )
863-------------------------------------------------
864
865 Check out etc directory for menus and other goodies.
866
867 If you like to check out what xlock looks like on multiscreens and you
868 do not have them... but do have Linux and Xnest ... try:
869 Xnest -ac -scrns 3 :1 &
870 xterm -display :1.0
871 And run xlock from the created xterm. (For some reason I have to do
872 it as root).
873 If you are using Mesa, it must be compiled without SHM extension do
874 to a bug in Xnest (even in XFree3.3 == X11R6.3) or you will get
875 "BadDrawable (invalid Pixmap or Window parameter)".
876 Also try sudo apt-get install xserver-xephyr
877 Xephyr -ac -scrns 2 -parent :1.0 -screen 444x444 -parent :1.1 -screen 512x512 :1 &
878
879 You may want to change the 1st line of XLock.ad "random" to "blank",
880 "life", or whatever your favorite is and copy it to
881 /usr/lib/X11/app-defaults or $HOME (or wherever your application
882 defaults files are) and rename to XLock .
883
884 You may want some of the modes never to come up in random. This is
885 already hard coded for the blank mode. See xlock man page on "modelist".
886 In mode.c you can hard code others by just putting the stuff that you do
887 not like in the LockProcs to the end of the static array and in
888 random.c increase NUMSPECIAL by the number of new screens that you do
889 not want displayed.
890
891 You may want to move xlock into /usr/bin/X11 (or wherever your X
892 binaries are). You may also want to move xlock.man to
893 /usr/man/man1/xlock.1 .
894
895 If you want to remove some unwanted modes just edit "mode.h" and
896 "mode.c" grep the for the unwanted modes. You might want to edit
897 the man page and your favorite make file as well.
898
899 I am very interested in cellular automata. I am always looking to
900 improve ant, life, life3d, and life1d. If anyone knows any new
901 collections (I have lifep.zip (May 94) and xlife 3.0) let me know. If
902 you would like further information let me know. There are several
903 run-time options to check out, see docs/cell_automata.
904
905 Still like xscreensaver better? (Obscenities omitted ;) ) Try
906 setting your apps-defaults file for xscreensaver like:
907*programs: xlock -nolock +grabmouse -mode random
908
909 If you want to hack a new mode check out docs/HACKERS.GUIDE. Then
910 when working, just mail it to me, grep on "Maintainer" for the
911 address.
912
913
914Other related stuff (all not maintained by me):
915--------------------------------------------------------------------
916 NAME
917 LOCATION (last seen at)
918 DESCRIPTION
919 =============
920 audio/VMS
921 http://axp616.gsi.de:8080/www/vms/mzsw.html
922 fortune (sudo apt-get -y install fortune-mod)
923 ftp://igor.girton.cam.ac.uk/pub/funny/cookie.tgz
924 ftp://ftp.uu.net/systems/unix/BSD/games/fortune
925 ftp://ftp.sterling.com/usenet/alt.sources/index (grep for cookie)
926 Please note that my format is slightly different. The number at the
927 top of the file should match `grep -c "^%%$" fortune.dat`
928 freetype and gltt for text3d
929 copy C:\Windows\Fonts\arial.ttf to /usr/lib/X11/xlock/fonts
930 http://freetype.sourceforge.net/ is the official site for freetype
931 (need 1.3.1) I used configure --prefix=/usr to keep it simple.
932 It fails in ftdump.c but this is in test dir, ignore and just do
933 make install
934 http://gltt.sourceforge.net/ is the official site for gltt (2.5.2)
935 configure was not working so copied mkinstalldirs, install-sh,
936 config.sub, and config.guess this distribution again used
937 configure --prefix=/usr
938 edit GLTTGlyphPolygonizerHandler.h to add GLTTGlyphPolyonizer header
939 To get this to compile with CC on Sun with 2.5 (mainly for xlock
940 maintainer's reference in case he ever has to do it again; if this is
941 built using g++ then xlock must be built using g++ if you want text3d
942 to work).
943 configure --with-ttf-includes=/usr/openwin/include/freetype --with-ttf-libraries=/usr/openwin/lib
944 change g++ reference in generated Makefile to CC
945 change .la references to .a in Makefile to produce a libgltt.a
946 remove -Wall to get rid of warnings in Makefile
947 change compiler_o_lo="no" for libtool
948 remove -fPIC to get rid of warnings in libtool
949 gltt-2.5 may cause xlock to coredump if symbol.ttf or wingding.ttf
950 if xlock tries to use them. The following patch will take care of
951 this:
952*** gltt-2.5/FTFace.C Sat Mar 13 11:51:49 1999
953--- gltt-2.5-DAB/FTFace.C Wed Aug 8 14:06:03 2001
954***************
955*** 112,117 ****
956--- 112,119 ----
957
958 if( i == n )
959 {
960+ return GLTT_FALSE;
961+ #if 0
962 TT_Face_Properties properties;
963 TT_Get_Face_Properties( *face, &properties );
964 int num_glyphs= properties.num_Glyphs;
965***************
966*** 125,130 ****
967--- 127,133 ----
968
969 indices[ascii_code]= glyph_index;
970 }
971+ #endif
972 }
973 else
974 {
975
976 freetype2 and FTGL for text3d2
977 copy C:\Windows\Fonts\arial.ttf to /usr/lib/X11/xlock/fonts
978 http://www.freetype.org/ need 2.x
979 http://homepages.paradise.net.nz/henryj/code/#FTGL
980 => there's a bug in FTGL that is "known" in text3d2
981 gtk 2.0 (sudo apt-get -y install libgtk2.0-dev)
982 imagemagick
983 http://www.imagemagick.org/
984 imake (sudo apt-get install xutils-dev) xmkmf
985 ftp://hpux.csc.liv.ac.uk/hpux/X11/Core/imake-5.06/imake-5.06-ss-9.03.tar.gz
986 I had to worry about FIXUP_CPP_WHITESPACE.
987 Lesstif (defunct) (sudo apt-get -y install lesstif2-dev)
988 ftp://ftp.hungry.com/pub/hungry/lesstif/lesstif-current.tar.gz
989 Lesstif Library (just like Motif)
990 Man2HTML
991 ftp://sunsite.unc.edu/pub/Linux/system/Manual-pagers/vh-man2html-1.4.tar.gz
992 Mesa (similar to OpenGL) (sudo apt-get -y install libgl1-mesa-dev)
993 ftp://iris.ssec.wisc.edu/pub/Mesa
994 Mesa 3-D Graphics Library (like OpenGL) Mesa-3.0 or greater required.
995 Mesa-2.2 and below has some memory leaks and 2.6 and below has some
996 security concerns.
997 Mingw (sudo apt-get -y install g++-mingw-w64-i686)
998 Motif (sudo apt-get -y install libmotif-dev)
999 PAM (sudo apt-get -y install libpam0g-dev
1000 NAS (audio package, defunct) (sudo apt-get -y install nas-dev)
1001 ftp://ftp.x.org/contrib/audio/nas
1002 OpenGL (for Sun)
1003 http://www.sun.com/software/graphics/OpenGL/
1004 rplay (audio package, defunct) (sudo apt-get -y install librplay3-dev)
1005 ftp://ftp.x.org/contrib/audio/rplay
1006 UNIX/VMS
1007 Unix-like routines XVMSUTILS can be found at
1008 http://axp616.gsi.de:8080/www/vms/mzsw.html
1009 xautolock (runs xlock after a idle time)
1010 ftp://ftp.x.org/contrib/applications
1011 ftp://sunsite.unc.edu/pub/Linux/X11/screensavers
1012 (I use openwin and I put this in my $HOME/.openwin-init)
1013 toolwait /usr/local/bin/xautolock -time 5 -locker "xlock -lockdelay 30"
1014 XPM
1015 ftp://ftp.x.org/contrib/libraries (sudo apt-get -y install libxpm-dev)
1016 color pixmaps
1017 XPM/VMS
1018 use the one above or xlock may bomb out,
1019 compile with cc/standard=vaxc/define=(need_strcasecmp,need_strdup)
1020 except when using XVMSUTILS.
1021 xscreensaver
1022 ftp://ftp.x.org/contrib/applications
1023 http://www.jwz.org/xscreensaver
1024
1025
1026Operation: (Blurb taken from Darren Senn's xlock)
1027-------------------------------------------------
1028
1029 Under X, run xlock. The screen will clear, and some pretty animated
1030 picture (exactly which depends on which module is active) will appear
1031 on the screen. If you hit a key, then the screen will clear, and
1032 (unless you've changed the application defaults file that I packaged
1033 with this) you'll get a black screen with some graphics in the top
1034 center. These graphics consist of a reduced size image of the module
1035 you were viewing, the name of the user who executed xlock, and
1036 password prompt field, and some short instructions.
1037
1038 At this point, you can either click on the graphic to return to xlock,
1039 or you can type a password. If the password is verifiable as the
1040 root password, or the password of the user listed above, then xlock
1041 will terminate. THIS IS THE ONLY WAY TO STOP XLOCK WITHOUT SHUTTING
1042 DOWN THE X SERVER. That's what makes it a lock.
1043
1044
1045Resources: (Also taken from Darren Senn's xlock)
1046------------------------------------------------
1047
1048 There are two sets of resources for XLock. The first set are (what I
1049 call) global XLock resources, while the second set consists of
1050 module-specific resources.
1051
1052 The global resources are:
1053 XLock.mode: This sets the module.
1054 XLock.font: This is the font used on the password entry screen.
1055 XLock.background: The background color for the password entry screen.
1056 XLock.foreground: The foreground color for the password entry screen.
1057 XLock.username: The label for the field indicating the user name.
1058 XLock.password: The label for the password prompt.
1059 XLock.info: The "short instructions" to print.
1060 XLock.validate: A message to display while checking the password
1061 XLock.invalid: A message to display if the password is incorrect
1062 XLock.nice: How much XLock should nice itself.
1063 XLock.timeout: How long to wait idle at the password prompt.
1064 XLock.timeelapsed: Message to see how long lock running (yes or no)
1065 XLock.mono: Monochrome mode (yes or no)
1066 XLock.nolock: disable the lock mechanism (yes or no)
1067 XLock.remote: allow remote locking (meaningless under linux)
1068 XLock.allowroot: allow the root password to unlock (yes or no)
1069 XLock.enablesaver: allow the system screensaver to work (yes or no)
1070 XLock.allowaccess: allow other clients to connect while active
1071 XLock.echokeys: Echo "?" for each password keypress (yes or no)
1072 XLock.usefirst: Ignore the first character typed (yes or no)
1073 XLock.verbose: Verbose mode. (yes or no)
1074 XLock.inwindow: allow the xlock to run in a window (yes or no)
1075 XLock.inroot: allow the xlock to run in the root window (yes or no)
1076 XLock.grabmouse: Grab the keyboard and mouse (yes or no)
1077
1078 XLock has a number of modules which it can display. (See the man page
1079 for a complete list). It turns out that each module is characterized
1080 by a number of initializations, separated by a number of "draws".
1081 Each module has the following resources defined:
1082
1083 XLock.<module>.delay: How long to wait between draws (usec)
1084 XLock.<module>.batchcount: May mean various things (see man page).
1085 XLock.<module>.cycles: Controls the timeout of screen (see man page).
1086 XLock.<module>.size: Controls size of objects on screen (see man page).
1087 XLock.<module>.saturation: Saturation (as in HSV) of colors to use.
1088
1089
1090Acknowledgments:
1091----------------
1092
1093 I did not write the original algorithms in any of the lock screens
1094 (except wator, bug, life1d, demon, ant, daisy, and voters), although I
1095 did convert many of the new ones to run with xlock. I tried to follow
1096 the original style of Patrick Naughton. Many of the additions
1097 were "borrowed" from xscreensaver (Jamie Zawinski <jwz AT jwz.org>).
1098 Some of the others were "borrowed" from old demos from Sun. Many more
1099 are contributions.
1100
1101 I will consider putting new ones in if (1) they are more or less public
1102 domain (i.e. BSD, sorry no GNU copyrights), (2) they are neat (I am
1103 biased towards mathematically based programs (especially the Computer
1104 Recreations of Scientific American)), and (3) I have the time.
1105
1106 Also many thanks to the people that helped me countless times with
1107 xlock mentioned in "Revisions", especially Jouk Jansen, Tom Schmidt,
1108 David Hansen, Ed Mackey, Marcelo Vianna, Ron Hitchens, Heath Kehoe,
1109 Frank Fesevur, & Eric Lassauge.
1110
1111