barrier/nodist/notes
2002-08-02 21:57:29 +00:00

489 lines
15 KiB
Plaintext

edit FIXME's in:
PORTING
make man pages
docbook?
should have makefile target to build these
remove line from BUGS about missing man pages
---
not removing all doxygen generated files in dist-clean or maintainer-clean
should remove them all in dist-clean
---
check for cancellation points:
following functions may be interrupted (returning -1, errno=EINTR):
read(), write(), ioctl(), select(), poll(), pause(), connect(),
accept(), syslog(), TCP operations
creat(), close(), getmsg(), putmsg(), msgrcv(), msgsnd(),
recv(), send(), wait(), waitpid(), wait3(), sigpause()
should ensure that we handle EINTR anywhere these are called. in
particular we must call testCancel() (should do that anyway) and
sometimes restart the call.
make sure unbounded time win32 calls do testCancel().
---
not handling large motif selections
don't know protocol for transfer
---
not handling international characters
---
CServer::setConfig() should update network ports
if the server address or http address change then the old ports
should be closed and new ones opened.
---
try to determine X11 keyboard quirks automatically
in particular, set the half-duplex flags
maybe KBD extension will help determine this
bug with half-duplex keys
win32 server sent num-lock to grace
grace converts to half-duplex so only synthesizes key down
now grace starts server and is locked to screen
grace should ignore half duplex keys when seeing if locked to screen
---
HTTP stuff
no way to save config using HTTP
should have a button or a page to force save of config
or just save config every time it's changed
should use authentication (at least basic)
provide way to kill/restart server via HTTP
provide way to query why locked to screen?
handy for debugging at least
bug in updating screens
saw a goofy set of screens after update
i think the config was similar to:
A B
C
D E
---
win32:
need icon
provide taskbar icon
provide control panel?
win32 service:
need message table for proper event reporting
desktop switcher program failure when running synergy as service
returns access denied from CreateDesktop()
don't know why
---
hot keys
should have keyboard shortcuts to jump to screens
---
should switch to user nobody (or something similar) if running as root
for security reasons
will make it impossible to overwrite /etc/synergy.conf
if that file is only root writable (as it should be)
---
xscreensaver won't start if pointer on secondary screen
unless using MIT or SGI screen saver extensions
otherwise it cannot know when to stop the screen saver
cos it can't grab mouse and keyboard
---
all screensavers hidden when showing win32 screensaver lock window
win32 kills the screen saver and shows the lock window
synergy thinks the screen saver is dead (cos the process is)
deactivates secondary screen screen savers
user is constrained to locked display, though
also, we don't detect screen saver restarting if user doesn't unlock screen
---
not distinguishing between caps lock and shift lock
In Caps Lock mode, the alphabetic keys send their uppercase (shifted) char-
acter when pressed alone. For Caps Lock mode, pressing and releasing the
lock key turns on the mode and pressing and releasing the lock key again
turns off the mode. In Shift Lock mode, all keys on the main keypad send
their shifted character when pressed alone. For Shift Lock mode, pressing
and releasing the Lock key turns on the mode, and pressing and releasing
either the Lock or the Shift key turns off the mode.
---
need timeout on CXWindowsClipboard::CReply objects
should flush replies that are too old
assumption is that requestor is broken
---
avoid fullscreen transparent window on win32
using CBT hook to discard activation/focus messages
but it's not being called when we lose keyboard input
also, we sometimes don't get the keyboard input to start with
---
keyboard hook problems (win32)
now passing keyboard events through in most cases
this fixes problem on isabel where toggle lights don't toggle
and num-lock behaved incorrectly (generated wrong keys).
seems the DefWindowProc() needed to process the keys
unfortunately, keys sometimes leak into wrong app. seems related
to times when we don't get the keyboard input. key events are
not delivered to app on primary until cursor returns to primary.
no idea how that's possible.
current have some code to check active window and reset it in
keyboard hook. that code doesn't work.
seem to be having problems with windows key now, too. looks like
a down is sent but not the corresponding up so secondary system
thinks the key is always down.
---
key events sent to console on win me (95/98?) are very slow
1/4 to 1/2 second delay before key up is processed
key up log message is also delayed
console causing a system-wide delay?
---
adjust thread priorities on win32
maybe remove changes altogether
currently isabel starts single-stepping mouse when dragging window
sometimes it goes normal speed but it's mostly very slow
even a very high priority doesn't seem to help
haven't tried real-time priority
a very high priority on client fixes delay when typing into console
is it the output console causing the slowness?
---
results:
X primary
ctrl+alt+keypad_add, ctrl+alt_keypad_minus -> eaten by primary X server
ctrl+alt+backspace probably eaten by primary X server if so configured
ctrl+alt+delete probably eaten locally
probably underneath primary X server too
Win32 desktop -> X laptop
eaten global hot keys:
ctrl+alt+delete -> task manager (or logon or reboot)
alt+[shift+]tab -> cycle through tasks
alt+[shift+]esc -> cycle windows
ctrl+esc -> start menu
windows+R -> run dialog
windows+M -> minimize all
windows+shift+M -> undo minimize all
windows+F1 -> help
windows+E -> explorer
windows+F -> find files
windows+ctrl+F -> find computer
windows+tab -> cycle through taskbar buttons
windows+break -> system properties
not eaten:
alt+space -> system menu
shift+F10 -> context menu
app key -> context menu
misc:
accessibility shortcuts: not eaten but dialogs appear anyway
X laptop -> Win32 desktop
check:
shift+tab -> okay
alt+[shift+]tab -> okay
alt+[shift+]esc -> okay
ctrl+esc -> start menu -> okay
ctrl+esc, esc, shift+F10 -> toolbar context menu -> okay
F10 -> activate menu in explorer -> okay
shift+F10 -> context menu -> okay
alt+space -> context menu -> okay
alt+hyphen -> MDI window menu -> okay
alt+letter -> open corresponding menu -> okay
alt+F6 -> switch between windows in single program -> okay
shift+insert CD-ROM -> bypass auto-run
check accessibility shortcuts -> does not work
check accessibility features
sticky keys -> no
filter keys -> no
toggle keys -> no
mouse keys -> no
high contrast -> no
X desktop -> win32
check:
shift+tab
windows+R -> run dialog
windows+M -> minimize all
windows+shift+M -> minimize all
windows+F1 -> help
windows+E -> explorer
windows+F -> find files
windows+ctrl+F -> find computer
windows+tab -> cycle through taskbar buttons
windows+break -> system properties
app key -> context menu
Win32 -> Win32
alt+F6 -> eaten (isabel to audrey, but not audrey to isabel)
check accessibility shortcuts work on secondary
check accessibility features work on secondary
---
Accessibility Shortcuts
Key Result
-------------------------------------------------------------------
Tap SHIFT 5 times Toggles StickyKeys on and off.
Press down and hold the right Toggles FilterKeys on and off.
SHIFT key for 8 seconds
Press down and hold the NUM LOCK Toggles ToggleKeys on and off.
key for 5 seconds
Left ALT+left SHIFT+NUM LOCK Toggles MouseKeys on and off.
Left ALT+left SHIFT+PRINT SCREEN Toggles High Contrast on and off.
---
disable ctrl+alt+del info:
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, TRUE, &dummy, 0)
fools system into thinking screen saver is running
that disables ctrl+alt+del, alt+tab, ctrl+esc
dunno if keystrokes are queued
may be limited to win 95/98/me
win nt sp 3 and above:
low-level keyboard hook is called before ctrl+esc, alt+tab, alt+esc
use that to capture and disable
seems that low-level hook is notified of ctrl+alt+del but can't stop it
win nt sp 2 and below
ctrl+esc can be disabled by replacing task manager (dunno how)
RegisterHotKey() can be used to catch alt+tab and alt+esc
only while app is running, of course
win nt
keyboard filter driver can capture keys (see win NT DDK)
http://216.239.51.100/search?q=cache:q-f03UHhFMMC:www.thescarms.com/VBasic/StopReBoot.asp+alt%2Btab+disable&hl=en
some info on changing keyboard scan code mapping
can be used to disable keys but looks like reboot is required
---
Q179905
suggestion for bypassing hook code when called by debugger.
may prevent system from getting locked up when debugging.
---
win32 rel notes:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServices
can prevent an interactive service from running interactively.
how can we tell if we're not running interactively?
even if not interactive we can use MessageBox() to alert user
use MB_SERVICE_NOTIFICATION flag
must use a separate thread in initialization if called from handler
must close dialog if CTRL_LOGOFF_EVENT is received
see SetConsoleCtrlHandler() and CLog (which uses it)
maybe possible to get around NoInteractiveServices
modify DACLs on windows station/desktops to impersonate logged on user
see "Interacting with the User by a Win32 Service"
---
unix release notes:
restarting fails to connect until a user logs in:
Xlib: no protocol specified
this is caused by login manager
all clients are rejected, except those started by manager itself
workaround is to have synergy started by login manager
should then use --no-restart, though that's not necessary
affects client and server
cannot switch screens on login screen:
xdm,kdm grab keyboard for duration of login screen
synergy cannot switch unless it can grab keyboard
gdm doesn't appear to grab keyboard or mouse for duration
affects server, only
=== feedback ===
send all toggle states instead of (individual) toggle ups/downs (gspencer)
Actually, Teleffect already does that too, but what I meant was that
each time the state of a "toggle" key (caps lock, scroll lock, num lock)
changes on the master, I think it should force the client to take on
that state, instead of just toggling on the client. That way when Word
(on the client) helpfullly turns off the caps lock, it doesn't get
toggled back on when I turn off the caps lock on the master. Ideally,
it would just notice that Word turned off the caps lock on the client
and turn it off on the master (and all other clients) too, but I think
that's probably too complicated to implement.
double clicking NT binaries fails (liz)
add note to README or use separate binaries for services. client
would also need a dialog to query options. server would probably
need one too. use dialogs if there are no command line args.
how to exit (liz)
no good way to exit on windows
win32 console disappears too quickly (liz)
maybe show a message box if exiting to due an error
better support for reloading configuration (liz)
use SIGHUP on unix
use an app message on win32
provide access through a control panel or taskbar icon
non-functional on ctrl+alt+del screen in win2k (kurt)
i suppose it must be when win2k is the client. mouse input wasn't
working. keyboard probably didn't work either.
---
automake stuff
rebuild:
* 'touch NEWS README AUTHORS ChangeLog'
* 'touch stamp-h'
* 'aclocal' - creates aclocal.m4
* 'autoheader' - creates config.h.in
* 'autoconf' - creates configure from configure.in
* 'automake' - Creates Makefile.in from Makefile.am
* './configure' - creates Makefile from Makefile.in
* 'make'
funky functions:
snprintf -- ick!
some return negative value -- no problem
some return truncated length -- uh oh
some return buffer length without truncation -- huh?
some actually overrun the buffer -- must not build on those!
use AC_LIBOBJ(function) for missing/broken functions
adds function.c to build
must add @LIBOBJS@ to *_LIBADD
or AC_REPLACE_FUNCS(function ...)
automatically calls AC_LIBOBJ for missing functions
use AC_CHECK_FUNC or AC_CHECK_FUNCS to detect missing functions
use AC_CHECK_LIB first if function not in std C lib
AC_FUNC_MEMCMP -- adds memcmp.o to LIBOBJS if memcmp is broken
AC_FUNC_STRFTIME -- check for strftime(), define HAVE_STRFTIME
AC_FUNC_VPRINTF -- check for vprintf(), define HAVE_VPRINTF
also checks for _doprnt(), define HAVE_DOPRNT
#if STDC_HEADERS
# include <string.h>
#else
# if !HAVE_STRCHR
# define strchr index
# define strrchr rindex
# endif
char *strchr (), *strrchr ();
# if !HAVE_MEMCPY
# define memcpy(d, s, n) bcopy ((s), (d), (n))
# define memmove(d, s, n) bcopy ((s), (d), (n))
# endif
#endif
must provide fallbacks for stuff:
non-reentrant functions:
put (shared) lock around non-reentrant function
provide reentrant API
gethostbyaddr
gethostbyname
getprotobyname
getprotobynumber
getservbyname
getservbyport
gmtime
getpwuid
strerror
string/memory functions:
memcpy
memcmp
memmove
memset
strcat
strcmp
strcpy
strrchr
used library functions:
accept
bind
chdir
close
connect
dup
exit
fcntl
* fork
fprintf
* free
getenv
gethostbyaddr
gethostbyname
gethostname
getpeername
getprotobyname
getprotobynumber
getpwuid_r
getservbyname
getservbyport
getsockname
getsockopt
gettimeofday
getuid
inet_addr
inet_ntoa
ioctl
listen
* malloc
mbrtowc
mbsinit
memcpy
! memcmp
memmove
memset
nanosleep
open
openlog
poll
read
recv
recvfrom
send
sendto
setsid
setsockopt
shutdown
sigaction
sigaddset
sigemptyset
sigwait
socket
sprintf
strcat
strcmp
strcpy
strerror
strrchr
strtol
sysconf
syslog
umask
vsnprintf
wcrtomb
write
included files
#include <arpa/inet.h>
#include <fcntl.h>
#include <pthread.h>
#include <pwd.h>
#include <shlobj.h>
#include <signal.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <syslog.h>
#include <unistd.h>
these put stuff in std::. replace with .h versions or use std::?
3 #include <cctype>
3 #include <cerrno>
1 #include <clocale>
3 #include <cstdio>
4 #include <cstdlib>
12 #include <cstring>
1 #include <ctime>
can we use AC_REPLACE_FUNCS and only build the missing function files
in a single directory. do we have to have a separate configure.in
script to do that?