Remote Access (#17580)
#4390 - The initial request for "NVDA Remote functionality
Summary of the issue:
This PR integrates NVDA Remote functionality into core with significant
architectural improvements and modernization. While maintaining protocol compatibility with the existing add-on, it introduces cleaner architecture, type safety, proper event handling, and improved maintainability.
Description of user facing changes
Adds a new "Remote" submenu under NVDA's Tools menu with options to:
Connect to another computer
Disconnect from remote session
Mute remote speech
Push clipboard content
Copy connection link
Send Ctrl+Alt+Del
New remote settings panel in NVDA Settings dialog with options for:
Auto-connect on startup
Host/client configuration
Connection type (control/be controlled)
Server address and port settings
Connection key management
Audio feedback preferences
New keyboard shortcuts for remote control (note these are defaults and can all be changed):
F11 to toggle between local and remote control
NVDA+Alt+C to push clipboard
NVDA+Alt+PageDown to disconnect
NVDA+Alt+M to toggle remote mute
Audio cues and visual feedback for connection events
Comprehensive user documentation added to NVDA User Guide
Description of development approach
The implementation follows a modular architecture:
Core Components:
Remote client with session management
Secure transport layer using SSL/TLS
Protocol serialization for message passing
Relay server infrastructure for connection brokering
Integration Points:
Hooks into NVDA's speech, braille and input subsystems
UI integration via wx menu items and dialog boxes
Extension point handling for event propagation
Secure desktop support for UAC dialogs
Added remaining extension points
Security Considerations:
SSL certificate validation and fingerprint verification
Channel-based authentication
The code has been ported from the nvdaremote/nvdaremote repository and significantly improved from the version most-recently deployed.
Testing strategy: