atomic-penguin's blog

Musings on Linux, Opscode Chef, online gaming, and home cooking.

2 Cent Tip - Dynamic Rdesktop Resolution.

So occasionally I do have to touch a Windows system, or use a Windows-only management tool (I’m looking at you VMware). Not that I have any problem with Microsoft or Windows, I’m really just more comfortable in a Unix-like environment. I do use the Open Source rdesktop utility to access Windows machine using version 5.0 of the Remote Desktop Protocol (RDP).

It’s a handy utility, but I really wish it would give me an appropriate resolution based on the current resolution of my laptop’s X Windows session. There is, in fact, a command line flag to alter the geometry of the remote desktop window. However, typing in rdesktop -g 1280x1024 is much more tedious than typing in rdesktop on the command line interface.

So the simple solution is to put an alias in the .bashrc file, like so…

# ~/.bashrc
    rdesktop='rdesktop -g 1280x1024'

However, on my laptop, the max resolution without an external monitor is 1600x900. So I still have to override the setting with rdesktop -g 1280x1024 on the command line, any time I am running without an external monitor.

Another solution would be to use awk to find a smaller resolution from xrandr, then set that resolution in my rdesktop alias.

# ~/.bashrc
    RDESKTOP_SIZE=`xrandr | awk '{getline; getline; getline; print $1; exit;}'`

    alias rdesktop='rdesktop -g $RDESKTOP_SIZE'

This awk command will skip the first three lines, from the xrandr output. That is two header lines, and the maximum resolution on the following line, which we’ll skip. I’ll take the next highest resolution and set that in the variable $RDESKTOP_SIZE. Finally, I’ll use the variable $RDESKTOP_SIZE with the -g switch in rdesktop to properly set my alias.

Let us say you have two big monitors plugged into a port replicator. Perhaps you only want the rdesktop window to cover part of one screen. The following code will keep my rdesktop window smaller than one of the 1920x1200 screens on a spanned 3840x1200 resolution.

# ~/.bashrc
    RDESKTOP_SIZE=`xrandr | awk '{getline; getline; getline; print $1; exit;}'`

    if [ $RDESKTOP_SIZE == "3840x1200" ]; then
        RDESKTOP_SIZE="1820x1100"
    fi

    alias rdesktop='rdesktop -g $RDESKTOP_SIZE'

In other words, if I have two monitors at 1920x1200 each, their combined resolution is reported by xrandr as 3840x1200. I want to override the detected resolution to 100 pixels less than the resolution on one screen. Therefore I set the $RDESKTOP_SIZE variable to 1820x1100, before setting my rdesktop alias in .bashrc.

Comments