Cross-compiling FreeRDP Windows Remote Desktop Client for ARM Linux (in Debian/Ubuntu)
Last month, I wrote the instructions to Cross-compile VMWare View for ARM Linux as I intended to “run” Windows 8 in an ARM client (most likely the Raspberry Pi) via PCoIP. However, the procedure to do so seems slightly complicated and requires to purchase a specific VMWare server software (VMware vSphere 5) or download a free trial.
The good news is that there are other options such as VNC or RDP (Remote Desktop protocol) and Remmina, a Remote Connection client is available for Linux. As nothing is ever simple, another issue occured: if you are using a stable release of Linux (e.g. Debian Squeeze, Ubuntu 11.10) they come with older version of Remmina and either the connection is successful but the display is garbled (Version 0.7.x) either it crashes when connecting to Windows 8 via RDP (Version 0.8.x). The latest version (Remmina 1.0.0) fixes the problem and is available in Debian sid.
Since I just want to connect via RDP, I do no need to cross-compile the full version of Remmina, and I’ll only cross-compile FreeRDP, the RDP implementation used in Remmina.
Here are the steps I followed in Debian Squeeze:
- Download FreeRDP 1.01:
- Extract it:
Shell12tar xzvf freerdp-1.0.1.tar.gzcd freerdp-1.0.1/
- Make sure you’ve installed Emdebian ARM toolchain.
- Install the required build tools and some development libraries to pass cmake checks:
Shell1sudo apt-get install build-essential git-core cmake <code>libxv-dev libxkbfile-dev libasound2-dev libcups2-dev
- Install the required armel packages:
sudo /usr/share/pdebuild-cross/xapt -a armel libssl-dev libx11-dev libxext-dev libxinerama-dev libxcursor-dev libxdamage-dev libxv-dev libxkbfile-dev libasound2-dev libcups2-dev libavutil-dev libavcodec-dev
- Set the gcc cross-compiler prefix and utils:
Shell123456export CROSSTOOL=arm-linux-gnueabiexport CXX=$CROSSTOOL-g++export CC=$CROSSTOOL-gccexport AR=$CROSSTOOL-arexport AS=$CROSSTOOL-asexport RANLIB=$CROSSTOOL-ranlib
- Build FreeRDP for ARM:
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../freerdp-arm
make -j 2
That’s it! You now just have make sure Remote Desktop is enable in your windows machine, copy the content of freerdp-arm directory to /usr directory in the emulator or ARM board and run:
xfreerdp -u firstname.lastname@example.org -f windows8_ip
where email@example.com is the email used to login to Windows 8, “-f” is for full screen and window8_ip is the IP address of your Windows 8 “server”. Simply enter your password and you should be able to use Windows 8 remotely.
I’ve tried it using QEMU with the Raspberry Pi Debian image (See screenshot above), it works but it’s rather slow in the emulator. (I’m also running QEMU in a netbook which does not help with performance…
The other issue is that it only allows one RDP client at a time, but since it is apparently possible to connect several RDP clients to Windows 7, there will probably be a way to do so with Windows 8.