Mobile Development: a native remote desktop client (rdesktop port win32)

The famous rdesktop running natively on windows ce and windows mobile

Intro and Background

Some times ago I found that message of Jay Sorg and retrieved a copy of his code for a native rdesktop win32 version. I played a little and got the code compile with Visual Studio 2005 with the Windows Mobile SDK.

I tried to implement windows clipboard support to enhance the transfer of texts between the client and server, but unfortunately I was not successful yet. Hopefully someone jumps in and helps enhancing the code and adds some features.

Rdesktop is open source and you can go with the wince implementation here, but if it does not work for you, you have either change the code yourself (and publish it) or find someone that is able to do for you.

There is a template uiports/xxxwin.c in the actual rdesktop source you can use as a starter to compile the actual rdesktop version for windows mobile if you manage to get all the dependencies to work. If you success, forget this post and go with this version (maybe you leave me a note?).

Why another Remote Desktop/Terminal Server Client?

The Windows Mobile Remote Desktop Client (or Remote Desktop Mobile, RDM) lacks some useful features available in the Windows CE version or the Desktop Windows version:

  • No automated login
  • No kiosk mode
  • Function keys are not sent to server

The first item is essential if you like to start a Terminal Server session without user intervention.

The second item is important for using RDM in a production environment.

The third item is useful to run applications on the Terminal Server (TS) that use Function keys.

Commercial RDM

There are some commercial remote desktop clients available for windows mobile:

  • Mochasoft RDP client
    “Windows 200x servers and terminal servers are not supported, as to a Microsoft patent license.”
  • zaDesktop
    This is currently in an early state.
  • RDP Finster
    Not really clear where this comes from.

I assume some of the commercials are either using mstscax or rdesktop code. Some time ago MS published the RDP documentation. Maybe the commercial apps did start from there. Going with the TSC COM library mststcax would be great, but who has the doc for this? For desktop PCs it is documented but not for windows mobile. If someone has a doc to this leave me a note. Then we can start to write a TSC around this library.

There are also some rewritten TSC for the desktop not using mstscax. One is called ProperJavaRDP and maybe a good starting point to rewrite a dotnet based native TSC for windows mobile.

Usage of the free opensource rdesktop-ce

You can start winrdesktop on windows mobile either with an ini file or with command line arguments:

Sample winrdesktop.ini

(place either in program dir or in root)

[main]
server=192.168.128.5
port=3389
username=YourUserName
password=YourPassword
bpp=16
geometry=1024x768
#fullscreen

server : provide the server IP or DNS host name
port : provide the port to use for RDP, usually 3389
username : provide the login user name for the terminal client session
password : provide the password of the user
bpp : define the bits per pixel to be used (number of colors per pixel)
geometry : define the size of the remote desktop window width x height An application to be used on windows mobile devices should match the screen size of the device. For example 240×320 (QVGA). Otherwise the user has to scroll the window to get access to all of the remote screen.
fullscreen : currently not supported


UPDATE 23. nov 2010:

fullscreen now supported. Fullscreen will switch rdesktop to not show a caption and no menu bar. If geometry matches the device’s screen size, there will also be no scrollbars.

This screenshot was taken of an app I wrote running on a Windows 2003 server of a QVGA device with following winrdesktop.ini:

[main]
server=192.168.128.5
port=3389
username=rdesktop
password=rdesktop
bpp=16
geometry=240x320
fullscreen

Rdesktop usage

Command line

WinRDesktop [-g widthxheight] [-t port] [-a bpp]
    [-f] [-u username] [-p password] [-d domain]
    [-s shell] [-c working directory] [-n host name]
    server-name-or-ip

options are the same as in winrdesktop.ini plus:

-d domain : specify the domain of the user login
-s shell : define a shell to use on TSC
-c working directory : define a working directory for the session
-n host name : specify the host name to use for the client (visible on TSC)

OUTDATED: DO NOT USE, look for latest at github!

Restrictions of current code

See googlecode issues for a list of known restrictions.

Downloads

Windows Mobile Executable and INI sample file at googlecode
Source code: see googlecode

113 Comments

  1. Marc says:

    Hi,

    I have a Motorola Symbol MC3090 on Windows CE5.0. I have copied all the files (exe + dll + ini) on a given directory but when I run the exe, I have a error popup “Cannot find ‘rdesktopce’ or one of this component….”.
    Any ideas ?

    Thank you !

  2. josef says:

    “All the files”, great, and which ones did you download? See my github site.

  3. Mark says:

    Hello Josef,

    I hope you could help me. I`d like to run rdesktop on Windows Mobile 5.0 (5.1.478)
    I copy the exe, dlls and ini to a new folder : Computer\Pocket_PC\Application\rdp

    But I receive an error starting rdesktopce.exe
    Error: The file “redesktopce” cannot be opened. Either it is not signed with a trusted certificate, or one of its components cannot be found. You might need to reinstall or restore this file.

    Could you help?

    Best regards
    Mark

  4. josef says:

    to ALL and MARK

    if you use an exe and dlls please specify what you exactly downloaded from which location.

    There are several binaries available at github. The exe for CE5 based devices is at https://github.com/hjgode/rdesktopce_rdp5/tree/master/source/Windows%20Mobile%205.0%20Pocket%20PC%20SDK%20%28ARMV4I%29/Debug
    The CE5 compatible DLLs are at https://github.com/hjgode/rdesktopce_rdp5/tree/master/source/dll

    ~josef

  5. Fabrice says:

    Hi.

    Thanks for the amazing work.
    As of now if the terminal loses its connection to the server it gets a tcp error and then gets stuck.
    Would there be a way to change this behaviour by exiting the program in such a case.
    I took a look at the source code, I was thinking of updating the error() method to achieve this.
    According to the header file it should be in rdesktop.c but I can’t find this file in the project.

    Maybe I’m missing something…

    Thanks

    Fabrice

  6. josef says:

    Hello Fabrice

    first of all I did not do the code but make it compile with VS.

    You can exit rdesktopce by double clicking in the top middle screen area (see handle_WM_LBUTTONDBLCLK in win32.c).

    ~josef

  7. Alex Sm says:

    Hi,
    I’ve done everything you mentioned above.
    I have MC3090 device, I put all libraries in one folder in Application. But ‘cannot find ‘rdesctopce’ (or one of its components). Make sure the path and filename are correct and that all the required libraries are available’.
    https://ibb.co/cu8XVF
    изображения
    Could you help me?

  8. josef says:

    Hi Alex

    comments like ‘I have done everything’ or ‘I used the latest’ are useless.

    You should do it in details:

    Having a Windows Mobile 6.x running device go to https://github.com/hjgode/rdesktopce_rdp5/tree/master/source/binary/rdesktopce_rdp5 and download all the files.

    Copy the files to a new dir on the device

    Edit the ini to match your setup

    Ensure the line #barcodescanner is in there if you do not have an Intermec device

    Start the application

    If you still get the ‘cannot find ..’ error message, download PEInfo (ie from here: http://hjgode.de/dev/tools.htm) and copy it to the device. Start PEInfo and open rdesktopce.exe. Then use PEInfo menu to get an Import report. This will list the exe’s dependencies and if all DLLs can be loaded.

    ~Josef

  9. Andreas Dahlin says:

    Hi,

    Does anyone have issue where the screen is black when connecting to a Windows server 2012 R2?
    If I use the Windows Remote Desktop Client it works fine.

    When I connect to another server. Running Windows Server 2012 it works fine with RDesktop.

    I use Zebra MC55A0 with Windows Mobile 6.5.3.
    Best Regards Andreas

  10. Andreas Dahlin says:

    Hi,

    Anyone having issue with black screen when logging in to a Windows Server 2012 R2?
    The inbuilt Remote Desktop Client works fine connecting to the same server with same username and password.

    When trying to connect to a Windows Server 2012, Rdesktops and inbuilt RDC works fine.

    I have tried with Zebra MC55A0 WinMobile 6.5.3 and Intermec CN70 WinMobile 6.5.3. Same issue with both.

    BR Andreas

  11. cuxoid says:

    Hey.
    Thanks for the great work.
    When you connect to Windows 10 or Windows Server 2008-2012 Remote Desktop, the connection is normal. But when you enable NLA, a connection error occurs. Systems with Windows Mobile are still relevant, but security requirements are increasing. Rdesktop-ce requires NLA mode support. You can help with this problem.
    Sorry for the bad english.

    Nick

  12. josef says:

    Hello Nick

    as Windows Mobile days are already counted, I will not put any resources on changing rdesktop-ce to support NLA.

    Sorry

    Josef

  13. josef says:

    Hi Andreas

    sorry for the late response. The black display is caused by the windows 2012 starting with the new designed start screen (Metro UI) in contrast to the old desktop view. See https://community.spiceworks.com/topic/839566-server-2012-standard-boot-to-desktop how to change that and there should be no more issue.

    with regards

    Josef

Leave a Reply