Ticket #97 (closed enhancement: fixed)

Opened 2 years ago

Last modified 15 months ago

Allow NVDA to handle multiple input desktops in Windows XP

Reported by: jteh Owned by: jteh
Priority: major Milestone: 2009.1
Component: Core Version: development
Keywords: Cc:
Operating system: Blocked by:
Blocking: #100

Description (last modified by jteh) (diff)

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.

Change History

Changed 2 years ago by jteh

  • blocking 100 added

Changed 2 years ago by jteh

  • status changed from new to accepted
  • owner set to jteh

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.

Changed 2 years ago by jteh

Bzr branch for this work is at:
 http://bzr.nvaccess.org/nvda/secureDesktop/
It currently includes the service for XP and embedded manifest for Vista.

Changed 2 years ago by jteh

XP:

  • 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.

Vista:

  • 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.

General:

  • 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.

Changed 17 months ago by jteh

  • description modified (diff)
  • summary changed from Allow NVDA to handle multiple input desktops to Allow NVDA to handle multiple input desktops in Windows XP

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 16 months ago by jteh

New bzr branch for this work is called xpService.

Changed 16 months ago by jteh

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.

Changed 16 months ago by jteh

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.

Changed 16 months ago by jteh

  • milestone set to 0.6

Changed 15 months ago by jteh

  • status changed from accepted to closed
  • resolution set to fixed

Still some issues, but the basic functionality works in the current incarnation. New tickets should be opened for issues with the service.

Note: See TracTickets for help on using tickets.