Allow NVDA to handle multiple input desktops in Windows XP #97

nvaccessAuto opened this Issue Jan 1, 2010 · 9 comments


None yet

2 participants


Reported by jteh on 2008-05-28 23:02
Currently, NVDA only handles a single input desktop; i.e. the input desktop on which it was started. It cannot be run on the secure winlogon desktop, which means that the Windows logon screen and other secure screens cannot be read. For Windows XP, a service should be provided which can detect when the current input desktop changes and launch NVDA accordingly.
Blocking #100


Comment 2 by jteh on 2008-07-19 04:55
Mick started (and I am completing) writing a service to handle input desktop switches for NVDA. So far, it is working very well.

It seems that this service is only required under Windows 2000 and XP. In fact, from our testing and research, it is not possible to start NVDA on the secure (winlogon) desktop under Windows Vista using a service.

In Vista, we need to use the Ease of Access facility to handle this. This requires an embedded manifest and the executable must also be authenticode signed. This latter requirement poses a problem for us, as we must either register a trusted root certificate or have our key signed by a commercial root authority.


Comment 3 by jteh on 2008-07-21 06:17
Bzr branch for this work is at:
It currently includes the service for XP and embedded manifest for Vista.


Comment 4 by jteh on 2008-08-12 11:05

  • While the service is running, NVDA is running, restarting when the input desktop switches as required. That is, you cannot start the service if NVDA is already running and once you quit NVDA, the service exits.
    • The disadvantage of this is that if you exit NVDA as a user without administrative privileges, you can't start it as a service again, as you don't have permission to start services.
    • The solution is to always have the service running.
    • The service would always start NVDA on the logon screen.
    • Once logged in, if NVDA is running on the default input desktop, NVDA will be restarted when the input desktop switches to the winlogon desktop.
    • This means that if the user exits NVDA, the service will keep running, but NVDA will not be started on the winlogon desktop for the Windows Security screen.
    • Can we distinguish between the Windows Security screen and the Windows logon screen? They both run on the winlogon desktop.
    • Both are possible without an intervening logout if fast user switching is enabled.
  • Does the current service handle fast user switching?
    • This needs to be tested.
  • How do we start NVDA with the correct environment for the logged in user?
    • Currently, NVDA gets the environment of the system account.
    • This means that the log file (and soon the config file) will be stored in the wrong location. In particular, the log file goes to c:\windows\temp.


  • Ease of Access kills the executable it starts each time the input desktop switches and restarts it on the new desktop.
  • If the executable started by Ease of Access is exited, Ease of Access does not restart it on either desktop until the user logs out.
    • Other screen readers seem to be able to change this behaviour so that the executable is always started even if it is executed, but we haven't figured out how yet.
  • We probably need some sort of launcher which:
    • Starts NVDA when the input desktop changes if NVDA was running on the previous desktop. Like the XP service, this means NVDA won't be started for the winlogon desktop if the user exits NVDA.
    • Once running, it will simply sleep until killed. This is to ensure that Ease of Access restarts it on the next input desktop switch.


  • Do we want to only ever have one copy of NVDA running or should we always leave the copy of NVDA on the default desktop running?
    • One copy consumes less resources, but state will be lost; e.g. virtual buffer position.
  • If we want to run multiple copies, we need a way to suspend/ignore speech for an inactive copy.

Comment 5 by jteh on 2009-04-24 01:53
Hijacking this ticket for the XP service. Support for Ease of Access for Windows Vista and Windows 7 will be moved to another ticket, as it is quite different.

Note also that the old secureDesktop branch is obsolete. New branches will be started.
Changed title from "Allow NVDA to handle multiple input desktops" to "Allow NVDA to handle multiple input desktops in Windows XP"


Comment 6 by jteh on 2009-05-01 18:33
New bzr branch for this work is called xpService.


Comment 7 by jteh on 2009-05-05 12:17
Okay! After a hell of a lot of exasperation, the service is pretty much done. Unfortunately, one issue still remains. If you log off a session other than 0 (i.e. you're using fast user switching), NVDA won't be started on the logon screen. This is a Windows issue which is explained in this message. I have absolutely no idea how we're going to get around this. Note that logging out of session 0 is fine.


Comment 8 by jteh on 2009-05-15 07:27
Merged in r2928. Note that this works quite well on Vista as well, so we may not need Ease of Access for now. Leaving this open until it is more widely tested.


Comment 9 by jteh on 2009-05-18 01:34
Milestone changed from None to 0.6


Comment 10 by jteh on 2009-05-25 20:50
Still some issues, but the basic functionality works in the current incarnation. New tickets should be opened for issues with the service.
State: closed

@jcsteh jcsteh was assigned by nvaccessAuto Nov 10, 2015
@nvaccessAuto nvaccessAuto added this to the 2009.1 milestone Nov 10, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment