Since the release of Windows Vista, I've read quite a few complaints about services being unable to interact with the user's desktop. I've also read various posts and articles explaining why that is the case, which make sense to me in general. However, there are use cases in which services need to interact with users in some fashion. The one I'm concentrating on is remote control. Synergy, a "software KVM", as some have described it, always needs access to the current desktop in the current window station in the current session because it needs to send keyboard and mouse input to it. From what I can tell, it has no problems switching between multiple desktops inside a single window station. However, it appears to be unaware of multiple sessions. That is what causes it to fail when installed as a Windows service and makes it impossible to log in to Synergy client machines running Vista and Windows 7.
The Vista Syn provides a fairly simple solution to this problem. It runs as a session-aware Windows service and monitors the system for console changes. Whenever the current console session ID changes, it restarts Synergy inside the correct session so that it can interact with the appropriate desktop.
While I probably could have modified Synergy's source code to do this, I wanted to create a quick fix, and modifying someone else's C++ code would not be a quick endeavor for me. So I decided to create my own .NET-based Windows service to take care of this.
Version 1.0.0.2, the first public beta, is available for download below. Please note that it is compiled against .NET Framework v3.5.
UPDATE: Hmm, the file has disappeared from the server. Will investigate in the morning. Please stay put.
UPDATE 2: I've uploaded the file again. Hopefully it remains here.
| Attachment | Size |
|---|---|
| TheVistaSyn.msi | 412 KB |
Comments
I described most of that functionality in this thread: http://code.google.com/p/synergy-plus/issues/detail?id=26
I hope that helps. I still haven't gotten around to fixing up the code for a release, unfortunately.
That's a little paranoid ;)
Seriously though, right now, The Vista Syn cannot start anything besides Synergy. If you really want to, you could always replace the Synergy EXE with your own that first starts plink and then starts a renamed Synergy. Theoretically that would work.
The first time the Vista Syn starts, it disables the original Synergy service because having more than one instance of Synergy running would be a bit problematic :)
I also tried using sticky keys, but that seems to only work on the local keyboard, and not from the synergy server keyboard.
This utility solves the issue of being unable to control Vista/7 clients when you're not yet logged in to them. If Synergy itself doesn't transmit Ctrl-Alt-Pause, then The Vista Syn cannot help.
If I post the source code, I'd have to clean it up first - it's kinda messy and embarrassing :)
The Synergy+ guys are working on it. I've helped with some conceptual stuff, but since I'm not that good with C/C++, I'm not doing any of the actual coding for it. See this issue for more info.