- This Wiki is intended to provide technical details and some advanced tips about Remmina project. For introduction, download links, contact information, etc about Remmina, please visit the Remmina project homepage.
This Wiki specifies features for 0.8 release.
Supported Network Protocols
RDP is the remote desktop protocol natively supported in most Windows systems. It's usually called 'Remote Desktop' or 'Terminal Service' in Windows.
RDP is a relatively complex protocol, thus there are very limited free implementations.
Before 0.7 release, Remmina uses rdesktop project to manage RDP connections, which supports up to RDP version 5 only. However, rdesktop was later forked and maintained separately as a new project FreeRDP. It has been completely redesigned and a lot of parts have been rewritten. Remmina switched to FreeRDP since 0.8, which makes the RDP support dramatically different from previous releases. There are at least following benefits with FreeRDP:
- Support features in RDP version 6 and higher.
- Provide RDP support by means of a library. Remote screens are fully scalable.
- Keymaps are auto-detected by XKB. No more hardcoded keymap files.
- Modular design. Flexible channel plugin system.
- And most importantly, a group of nice coders. :)
VNC is a platform-independent remote desktop sharing system that uses the RFB (Remote Frame Buffer) protocol.
Due to the simplicity of the RFB protocol, there are quite a few free implementations on both client and server side.
Remmina bundles with libvncclient, the client-side source codes of libvncserver project as its VNC client support. Although Remmina redistributes libvncclient for release purpose and smaller binary dependency, libvncclient is still maintained in libvncserver project. The following VNC extensions are supported:
- Cursor update
- Desktop resize
- Disable server input
- Reverse VNC connection
- Anonymous TLS
- Plain/X.509 authentication
- MSLogon authentication
NX is a remote desktop protocol developed by NoMachine, which runs over SSH sessions and attempts to greatly improve on the performance of the native X display protocol.
NoMachine releases the NX core components under GPL, which can be downloaded here. Although those components are free and open-source, there seems to be no specification about the NX protocol itself.
Remmina uses the following packages to connect to NX:
- nxproxy (which depends on nxcomp, by NoMachine)
It's known that some other NX client implementations, including the official NX client from NoMachine, use an openssh fork 'nxssh' to connect to NX servers. There were also some efforts in the FreeNX community trying to patch nxproxy so that it will work with the standard openssh. However, the original nxproxy and the libssh library is all that needed to connect to NX in Remmina, besides some common X11 development libraries.
XDMCP is the X Display Manager Control Protocol, allowing an X server to request an X display manager running on a remote location, to initiate a remote X session.
XDMCP is a native X11 feature, and the nested X servers like Xnest and Xephyr have built-in XDMCP support. Remmina choose Xephyr to implement this protocol. The following patches were contributed to Xephyr project to make it work better with Remmina:
- #24144: "Xephyr -parent window-id -screen XxY" fails entirely. The bug was found from version 1.5.0 and the patch was applied since version 1.6.5, which means version between 1.5.0 and 1.6.4 won't work properly with the color depth option (which is unfortunately true for both Ubuntu Jaunty and Karmic). Choose 'Default' color depth as the workaround.
- #25804: Resize ephyr screen size automatically when parent window is resized. This patch will allow users to resize the remote desktop resolution freely by just resizing the Remmina connection window, providing a much better user experience with X remote desktop. It's currently waiting for review.
XDMCP is a UDP protocol thus cannot be tunneled directly through an SSH tunnel. But some effort has been done in order to overcome this limitation. A program called xqproxy was designed to be run on the SSH server side to make this happen. When XDMCP over SSH is requested, Remmina does the following things:
1. Connect to the SSH server 2. Open forward listening on port 6000 + N on the server, N is automatically detected 3. Invoke xqproxy on the SSH server side to send XDMCP query to request a session 4. The X display manager will then use a dummy display hostname:N, which tunnels back to a local Xephyr.
The XDMCP protocol in Remmina was later extended to be able to run X applications over SSH, which is already nothing to do with XDMCP itself at all. However, the protocol name in Remmina remains unchanged.
SSH, or Secure Shell, is a network protocol that allows data to be exchanged using a secure channel between two networked devices.
The main purpose of SSH in Remmina is for secure tunneling of all the other protocols. Because it works as a base of other protocols, it was built into the Remmina main program rather than a plugin. Remmina also provides SSH Shell and SFTP feature.
Avahi is a free Zeroconf implementation, allowing programs to publish and discover services and hosts running on a local network with no specific configuration.
Currently, only VNC protocol has Avahi support in Remmina.
There two different ways to utilize Avahi feature:
- In a Remote Desktop Preference dialog, for either quick connect or saved profiles, there's a '...' button on the right of the Server address field, where you can click and bring up a Avahi browser dialog.
- In the GNOME or Xfce panel applet, there's an option 'Enable Service Discovery'. With this option turned on, the applet will automatically discover services on the network and add/remove entries in a special folder 'Discovered'.
Telepathy is a flexible, modular communications framework that enables real-time communication via pluggable protocol backends.
Telepathy itself is not a remote desktop protocol; it provides a contact-to-contact tunnel, called Telepathy Tube, to proxy over other network protocols. For example, one of your buddies in your IM (e.g Empathy) can request to share his/her desktop with you, asking for your help. When you accept the invitation, your local remote desktop client will automatically connect to the tube, and bring up the remote desktop connection with your buddy. All happen transparently, so you don't have to know your buddy's IP address, or you don't even have to know what is IP at all.
Like most other protocols, Remmina implemented Telepathy support as a plugin.
When Empathy is becoming more popular, Telepathy turns out to be more and more useful and interesting. However, as of now it seems the implementation only supports VNC protocol for remote desktop sharing. NX over Telepathy would be nice. :)
User Interface Tips
Remmina does not provide any tool to send specific key to the remote host; instead, it provides a general keyboard grabbing feature, which you can use to capture almost all key events and forward to the remote host. The keyboard grabbing feature can be enabled or disabled from the keyboard button in the floating toolbar. For example, if you want to send Ctrl+Alt+Del to the remote host, just enable keyboard grabbing and press Ctrl+Alt+Del on your keyboard.
Another usage that could become very handy is that, you can change the functionality of some window management key combos on the fly. For example, when you have keyboard grabbing off, Alt+Tab switch windows on the local host; while when you have it on, Alt+Tab switch windows on the remote host.
Keyboard grabbing will be temporarily disabled when the mouse pointer is moved out of the window. This will allow you to use your mouse to switch to another window even you have your keyboard grabbed.
Some special X11 key combos cannot be grabbed, for example, Ctrl+Alt+Fn and Ctrl+Alt+Backspace.
Transparent Floating Toolbar
Most of you should already know how to use the floating toolbar without reading any manual. But if you have a composite manager (like compiz) running, there's a trick which could become handy sometimes. While your mouse pointer is over the floating toolbar, you can use your mouse wheel (the scroll-up / scroll-down buttons which can be found in most mouse devices) to change the transparency level of the floating toolbar.
Remmina provides a flexible shortcut key feature called Hostkey. Hostkey is a special modifier key that can be customized by users, and works with any other keys as shortcut key combos to quickly access various functions. Hostkey has the following characteristics:
- Hostkey events will not send to the remote host
- When hostkey is down, any other key events will not send to the remote host
The default hostkey is Right-Ctrl. The Preferences dialog provides an easy way to check and customize the hostkey and other key combos.
Attachable / Detachable Tabs
By default, Remmina tries to tab different connections in the same window by Group, Protocol, All or None, depending on the preference setting. But sometimes this is not enough, especially when you have a large monitor and you want to control the tabs even after the connections are established.
In Remmina, the tabs are fully attachable and detachable. Simply drag-and-drop the tabs into empty workspace to separate a new window, or drop into other Remmina connection window to merge the tabs.
Getting latest development branch
git clone git://github.com/FreeRDP/Remmina.git
Firstly you should setup your signature if you haven't done so:
git config --global user.name "Your Name" git config --global user.email "firstname.lastname@example.org"
After you have finished modifying the sources:
git add path/to/file ... git commit
You can repeat the above steps if you want make multiple patches. After you've done all changes:
git format-patch -s origin/master
Then you open a ticket and attach the patch.