- Complete rewrite of bash RDP script in Python with tkinter GUI - Multi-monitor support with intelligent monitor selection - Encrypted credential storage using Fernet encryption - Connection profiles with advanced configuration options - Fixed authentication issues (STATUS_ACCOUNT_RESTRICTION) - Enhanced monitor detection and selection logic - Professional tabbed interface with General/Advanced/Performance tabs - Install script and documentation included
6.4 KiB
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
# 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:
# The cryptography package is automatically installed when first run
pip install cryptography # or let the script handle it
Usage
Quick Start
# Make executable and run
chmod +x rdp_client.sh
./rdp_client.sh
Direct Python Execution
# 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
- Click "New Connection" or press Ctrl+N
- 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
- Configure advanced settings in the tabs:
- Advanced: Resolution, monitors, audio, clipboard, drive sharing
- Performance: Compression, visual effects, hardware redirection
- 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 profilescredentials.json- Encrypted credentialshistory.json- Connection historyrdp_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:
- Export connections from the old script (if supported)
- Manually recreate important connections in the new GUI
- 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:
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.