views:

1036

answers:

5

Are there any libraries for connecting as a client via Remote Desktop Protocol (RDP) in Linux? The language used is secondary to the issue of existence. Any mainstream language would do (e.g. C++, Perl, Java, Ruby, PHP, Python), and even less popular ones like OCaml or Scheme.

Is there any option available other than taking the rdesktop source and hacking a library out of that?

A: 

Sorry, but a quick strace and nm of rdesktop reveal nothing beyond X, crypto, and compression libs.

kmarsh
Correct. Hence the term "hack". The rdesktop source is organized sanely enough (save for X possibly being too intertwined with everything) such that you could create a library from the source of the application. But that's a lot more effort than "apt-get install rdp-dev".
Bribles
+4  A: 

Typing rdp into my Mandriva Software Managment tool revealed libxrdp which is a library that xrdp depends on but I don't know the details so it may not be what you want.

The project website is xrdp.sourceforge.net.

Troubadour
xrdp is an RDP and X server. I doubt libxrdp contains anything directly usable for an RDP client. I'm sure the xrdp source would be helpful for writing a client library much as the rdesktop source would be.
Bribles
xrdp does contain an rdp client module. To quote an xrdp page "Librdp, an RDP module for xrdp. Librdp provides a connection to RDP servers. It only supports RDP4 connections currently." This module was derived from rdesktop source, but is not as updated as the current rdesktop source. It is utterly devoid of documentation and does not even have an example program that uses it. xrpd itself doesn't seem to use it since it compiled without complaint after removing the rdp directory and commenting out 3 or 4 lines in the Makefile.
Bribles
A: 

rdesktop does allow embedding into other windows, how does it not serve your purpose?

See the -X option in help

J-16 SDiZ
It's not a library that facilitates programmatic communication with an RDP server.
Bribles
A: 

You could embed rdesktop in a window of your own per J-16 SDIZ's suggestion and then send X.org events to that window programmatically. A similar route would be to install a VNC server on the Windows machine and run a VNC client on the Linux machine. That way you can also programmatically send X.org events to the VNC client.

This is what browsershots.org uses to programmatically control various web browsers in a cross-platform way through Python. Have a look at the gui directory if the browsershots.org client source code

Sander Marechal
A: 

rdesktop is going to be your best option. The code is quite clean and I don't think making a library would be a huge deal.

Another option if you prefer Java is the ProperJavaRDP Client http://properjavardp.sourceforge.net/ . It's nearly a strait port of rdesktop.

Jon Clegg