# RDP Client - Python Version A modern, professional RDP client with a user-friendly GUI, developed as a Python replacement for the shell-based `rdp.sh` script. ## Features ### โœจ **Enhanced GUI Interface** - Modern tkinter-based interface with professional styling - Tabbed connection dialog for organized settings - Real-time connection details display - Responsive design with proper scaling ### ๐Ÿ” **Secure Credential Management** - Encrypted password storage using industry-standard cryptography - Per-connection credential saving - Secure key derivation based on user and hostname - Easy credential management and clearing ### ๐Ÿ“Š **Connection History & Recent Connections** - Automatic tracking of connection usage - Recent connections list with usage counts - Quick access to frequently used connections - Connection history persistence ### ๐Ÿ”„ **Import/Export Functionality** - Export connections to JSON files for backup - Import connections from JSON files - Merge or replace strategies for importing - Include/exclude credentials in exports - Timestamped export files ### ๐Ÿงช **Connection Testing** - Test server reachability before connecting - RDP service availability checking - Detailed test results with troubleshooting hints - Network connectivity validation ### โŒจ๏ธ **Keyboard Shortcuts** - **Ctrl+N** - Create new connection - **Ctrl+O** - Import connections - **Ctrl+S** - Export connections - **Ctrl+T** - Test selected connection - **F5** - Refresh connections list - **Enter** - Connect to selected connection - **Delete** - Delete selected connection - **F2** - Edit selected connection - **F1** - Show help dialog - **Tab/Shift+Tab** - Navigate between connection lists ### ๐Ÿ”ง **Advanced RDP Features** - Full resolution control (including full screen) - Multiple monitor support (extend/span) - Audio redirection (local/remote/off) - Microphone redirection - Clipboard sharing - Drive sharing (home directory) - Printer redirection - USB device redirection - COM port redirection - Performance optimizations (compression, wallpaper, themes, fonts) ### ๐Ÿ“ **Comprehensive Logging** - Detailed connection logs - Error tracking and diagnosis - User action logging - Automatic log rotation ### ๐Ÿšจ **Enhanced Error Handling** - User-friendly error messages - Detailed troubleshooting information - Network connectivity validation - RDP-specific error interpretation - Connection timeout handling ## Installation ### Prerequisites - Python 3.8 or higher - `xfreerdp` (FreeRDP client) - tkinter (usually included with Python) ### Install FreeRDP ```bash # Ubuntu/Debian sudo apt install freerdp2-x11 # Fedora/RHEL sudo dnf install freerdp # Arch Linux sudo pacman -S freerdp ``` ### Install Python Dependencies The script will automatically create a virtual environment and install dependencies: ```bash # The cryptography package is automatically installed when first run pip install cryptography # or let the script handle it ``` ## Usage ### Quick Start ```bash # Make executable and run chmod +x rdp_client.sh ./rdp_client.sh ``` ### Direct Python Execution ```bash # Using the virtual environment .venv/bin/python rdp_client.py # Or if you have dependencies installed globally python3 rdp_client.py ``` ### Creating Your First Connection 1. Click "New Connection" or press **Ctrl+N** 2. Fill in the connection details: - **Connection Name**: A friendly name for this connection - **Server/IP**: The RDP server address - **Username**: Your username - **Password**: Your password (encrypted and stored securely) - **Domain**: Optional domain name 3. Configure advanced settings in the tabs: - **Advanced**: Resolution, monitors, audio, clipboard, drive sharing - **Performance**: Compression, visual effects, hardware redirection 4. Click "Save" to store the connection ### Connecting - **Double-click** any connection to connect immediately - **Select** and click "Connect" - **Select** and press **Enter** - Use **Recent Connections** for quick access to frequently used servers ### Testing Connections - Select a connection and click "Test Connection" or press **Ctrl+T** - The test will verify: - Network reachability - RDP service availability - Port accessibility - Detailed results help troubleshoot connection issues ## File Locations All configuration files are stored in `~/.config/rdp-client/`: - `connections.json` - Saved connection profiles - `credentials.json` - Encrypted credentials - `history.json` - Connection history - `rdp_client.log` - Application logs ## Migration from rdp.sh The Python version can coexist with the original `rdp.sh` script. While they use different storage formats, you can: 1. Export connections from the old script (if supported) 2. Manually recreate important connections in the new GUI 3. Use the import functionality to bulk-add connections ## Security Notes - Passwords are encrypted using Fernet (AES 128) with PBKDF2 key derivation - Encryption key is derived from username@hostname combination - Credentials are only decryptable by the same user on the same machine - Log files do not contain passwords (shown as ***) - Export files can optionally include encrypted credentials ## Troubleshooting ### Common Issues **"xfreerdp not found"** - Install FreeRDP: `sudo apt install freerdp2-x11` **"Connection failed - Authentication error"** - Verify username, password, and domain - Check if account is locked or disabled - Use "Test Connection" to verify server accessibility **"Server unreachable"** - Check server address and network connectivity - Verify firewall settings - Ensure RDP is enabled on the target server **"GUI doesn't start"** - Ensure tkinter is installed: `sudo apt install python3-tk` - Check Python version: `python3 --version` (3.8+ required) ### Logs and Debugging Check the log file for detailed error information: ```bash tail -f ~/.config/rdp-client/rdp_client.log ``` ## Contributing The RDP client is designed to be modular and extensible. Key areas for enhancement: - Additional RDP client backends (rdesktop, xrdp) - LDAP/Active Directory integration - Connection profiles with templates - Multi-language support - Plugin system for custom authentication ## License This project follows the same license as the original rdp.sh script. ## Version History - **v2.0** - Complete Python rewrite with GUI - **v1.x** - Original bash/zenity implementation --- *For more information about the original shell script, see `rdp.sh` in the same directory.*