Testing different monitor combination to isolate the issue:
Monitor layout:
- Monitor 0: +3840+0 (primary, rightmost)
- Monitor 1: +0+0 (secondary, leftmost)
- Monitor 2: +1920+0 (secondary, middle)
Previous: Used monitors 1,2 (leftmost + middle) → single monitor
Test: Use monitors 0,1 (primary + leftmost) → see if this works
This will help determine if the issue is:
- Specific monitor IDs (1,2 vs 0,1)
- Primary monitor involvement
- Physical monitor positioning
- FreeRDP interpretation of monitor selection
Command will be: xfreerdp /f /monitors:0,1
User needs working solution immediately.
Simple approach:
- Use /f for fullscreen (always)
- Add /monitors:1,2 for specific monitor targeting
- Stop overthinking parameter conflicts
Command for 2 monitors: xfreerdp /f /monitors:1,2
Command for all monitors: xfreerdp /f /multimon
This should work - /f ensures fullscreen, /monitors specifies which ones.
Issue: /monitors:1,2 with /size:3840x1080 still shows only single monitor
Analysis: /size: parameter may conflict with /monitors: in FreeRDP 2.11.5
New approach:
- Use /monitors:1,2 WITHOUT /size: parameter
- Let /monitors: parameter handle monitor layout and sizing automatically
- Remove /size: from command when using specific monitor selection
- Keep /size: only for single monitor or manual resolution settings
Expected behavior:
- /monitors:1,2 should automatically span across monitors 1,2
- Remove potential parameter conflicts causing single monitor fallback
- Maintain fullscreen-like behavior through monitor spanning
Test command change:
Before: xfreerdp /size:3840x1080 /monitors:1,2
After: xfreerdp /monitors:1,2
This follows FreeRDP documentation that /monitors: should handle sizing.
Error: 'RDPClient' object has no attribute '_get_best_monitor_selection'
Root cause: Method was accidentally removed during previous code refactoring
when adding _get_monitors_combined_resolution method.
Fix:
- Restored complete _get_best_monitor_selection method with all functionality
- Cleaned up duplicate/corrupted code fragments
- Removed duplicate _setup_gui method definitions
- Added test script to verify method accessibility
Verified:
- _get_best_monitor_selection(2) returns '1,2' ✅
- _get_monitors_combined_resolution('1,2') returns '3840x1080' ✅
- Both methods properly integrated in RDPClient class ✅
The '2 Monitors' selection should now work without AttributeError.
Root cause: /f (fullscreen) parameter conflicts with /monitors: in FreeRDP 2.11.5
causing specific monitor selection to fall back to single monitor display.
Changes:
- Reorder command generation to check monitor config before resolution
- Skip /f when using specific monitor selection (/monitors:1,2 or /monitors:1,2,0)
- Keep /f only for 'All Monitors' and single monitor scenarios
- Add test script to validate new command generation logic
This should fix the issue where:
- 'All Monitors' works correctly (uses /f + /multimon)
- '2 Monitors' and '3 Monitors' were showing only 1 monitor
Expected result: /monitors:1,2 without /f should now properly display on 2 monitors
- 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
- Complete rewrite of zenity-based bash script in Python
- Modern tkinter GUI with Microsoft RDP Client-like design
- Encrypted credential storage and connection management
- Fixed STATUS_ACCOUNT_RESTRICTION authentication issues
- Support for multiple monitors, sound, clipboard, drive sharing
- Connection history and profile management
- Keyboard shortcuts and professional interface
- Comprehensive logging and error handling
- Virtual environment auto-detection and setup
- Full feature parity with original bash script
- Enhanced security with Fernet encryption
- Cross-platform compatibility and modern UX