I find it useful to have a remote desktop to my Ubuntu systems. On secure connections, I have been using VNC via xinetd. Connections with xrdp where possible, but it wasn’t launching the desktop for the connection. For secure terminal connections, I stick with ssh. All these connections have a login at the start of the connection. This is how I do it.
Setting up VNC over xinetd
This installation requires three packages, xinetd, xdm, and tightvncserver. vnc4server does not work with the example. The necessary change is noted after the example. You may want to enable multiple display managers as described later. This will allow you to restart xdm without killing your local session.
Using xinetd gives a fixed terminal size. I use several ports (displays) with appropriate sizes. The smallest gives me a full-screen desktop on a netbook. The largest matches the size of the monitor I am using to write this post. The /etc/xinet.d/xvnc-1 configuration file for the netbook looks like:
service xvnc-1
{
disable = no
# bind = 192.168.10.6
port = 5901
type = UNLISTED
socket_type = stream
protocol = tcp
wait = yes
user = nobody
server = /usr/bin/Xtightvnc
server_args = -inetd -geometry 1024x600 -depth 16 -query localhost -once -ac -desktop Server-netbook
# server = /usr/bin/Xvnc4
# server_args = -inetd -geometry 1024x600 -depth 16 -query localhost -once -SecurityTypes none -desktop Server-netbook
libwrap = xvnc
log_on_success = PID HOST EXIT DURATION TRAFFIC
log_on_failure = HOST
}For each display you will need to change the service name, port and geometry arguments. You may also want to change or omit the -desktop description. The bind option is optional unless you have other services (virtual servers) using the same display numbers. Access to all displays can be controlled by defining rules for xvnc in /etc/hosts.allow. Review man xinetd.conf for additional configuration options. When I upgraded to Ubuntu Lucid (10.4), I had to drop -extension XFIXES from the server_args specification as VNC did not start with it included.
To use vnc4server replace -ac with -SecurityTypes none in the server args. WARNING: I have had limited success using tightvncserver with xrdp. The configuration above is hard-coded to tightvncserver so that vnc4server can be installed as well. The configuration for vnc4server is commented out. Remove the commented lines if you prefer.
Logins are handled by xdm. Recent versions of gdm seem to be unable to handle the required XDMCP requests. Prior to upgrading to Ubuntu Lucid I was using gdm with an /etc/gdm/custom.conf file.
To enable xdm to listen to XDMCP requests on TCP you need to edit some files.
- Edit
/etc/X11/xdm/xdm-configto comment out theDisplayManager.requestPortline. By default, xdm is configured not to listen on for IP connections. - Edit
/etc/X11/xdm/Xaccessto uncomment the line allowing any host to get a login window. Alternatively, you can just add a line readinglocalhost. - You may want to edit
/etc/X11/xdm/Xsetupto uncomment thexsetrootline. xsetroot can also be used to provide a background picture or other effects.
Special settings for the local display(s)
I have a dual-screen setup which requires some setup for the desktop. I created the executable file /etc/X11/xdm/Xserver_0 to run the required setup. I wanted the login panel on the right screen. To handle this I added the following lines to /etc/X11/xdm/Xresouces.
#if WIDTH > 2000 xlogin*geometry: -400+300 #endif
Enabling gdm or kdm on the local display
gdm or kdm are the default display managers and can be used to manage the local display. This requires running two display managers. Use dpkg-reconfigure xdm to select the default display manger (gdm or kdm) to handle the main screen.
You will then need to edit two xdm files. Comment out all uncommented servers in /etc/X11/xdm/Xservers. This is the last line of the default configuration.
Edit /etc/init.d/xdm. Change HEED_DEFAULT_DISPLAY_MANGER to false. This can be done by adding a line just after the set -e line reading HEED_DEFAULT_DISPLAY_MANGER=false. This will enable both display managers to run. You can then start xdm with the command /etc/init.d/xmd start.
Installing xrdp
I have tried xrdp at various times in the past. Until recently, I haven’t managed to get it to work as expected. I tried the native version for Ubuntu Lucid (10.4) and still found it unsatisfactory. Ubuntu Maverick (10.10) has xrpd version 0.5. It is compatible with the packages installed for Lucid. I downloaded and install the Maverick package. Finally, I have a working version of xrdp. It starts a VNC server as needed.
I edited the Security section of /etc/xrdp/sesman.ini to disable root logins and limit the users who can connect. Review the man documentation and configure it appropriately for your situation.
I have had problems using the tightvncserver package dropping connections. This problem has been traced to a bug in how clipboard events are handled. I replaced it with the vnc4server package which does not share the clipboard events automatically. This requires a minor edit to the /etc/xrdp/sesman.ini file. In the [Xvnc] section change param2=-ac to param2=+kb.
I did not want most of the default xrdc connections. These are defined in /etc/xrdp/xrdp.ini. I deleted the lines from [xrdp2] to the end of the file. The sesman-X11rpd connection did not work for me, although I believe that it is likely the most desirable connection. This is because the required X server is not packaged yet. If you have multiple servers behind a firewall, you may want to enable the sesman-any connection on a host accessible via NAT. Be sure you secure and test your network accordingly.
Using Remote Desktop from Windows
The default configuration for Remote Desktop is to use 32-bit colors. xrdp only support 8-bit and 16-bit colors so the options need to be adjusted accordingly. If you define a user id, it will default the user id in the xrdp sesman login window. Enter the name or IP address and connect. You will get an xrdp login window after which you will get a desktop session.
Application Issues
Some applications only support a single session active at a time. These will cause problems if you are already logged in and have an active session.
By default, Firefox will not start a second session. If you have multiple profiles, you can select an inactive profile in the second session. To enable this set StartWithLastProfile=0 in ~/.mozilla/firefox/profiles.ini. Firefox will then start the session chooser when you start it. Alternatively, you can create an additional launcher specifying an alternate session.
xdrp does not handle sound requests from Windows well. It does not migrate the sound to the client if requested. Session shutdown may stop playback on the server.
vnc4server does not share clipboard events. These cause xrdp to drop the connection, so it is the preferred option in this case. If you are using xinetd you can enable clipboard sharing by running the vncconfig command. Running it as vncconfig -nowin & will run it in the background without a control window.
On systems that don’t already have a window manager, you may want to install one. Otherwise, you will be limited to what you can configure with ~/.xsession. I installed a minimal XFCE4 environment by installing xfdesktop4, Xorg, and ttf-freefont.
Were you able get clipboard sharing to work with xrdp? I read somewhere that you need to run “vncconfig -nowin” for this and confirmed from the man page that it should work, but the first time I ran it, the session got disconnected. I was able to connect back, but whenever I try to copy something, the session gets disconnected, so I ended up killing vncconfig.
Also, how do you configure what gets launched as part of the xrdp session? E.g., for vncserver, it uses .vnc/xstartup, so is there something like that for xrdp?
The first option using
xinetdwill give you a fixed size screen as specified in the definition. When I needed multiple sizes, I defined multiple services on different ports with appropriate sizes. You can also setup different services with different color depths.The second option using
xrdprequires a Windows RDP client. The screen size is the size specified by the client when you connect. VNC clients will not be able to successfully connect.I had not tried sharing the clipboard from VNC using
xdrp. I do most of my command line connections over SSH and clipboard works well with it. I found enabling the clipboard resulted the same problems you encountered. The clipboard works when running VNC viaxinetd.What programs run for your session is controlled by
~/.xsession. However, if you have a desktop manager installed it should already be run by the Xsession default files in/etc/Xsession/*. I have updated the notes section to include the packages required for a minimal XFCE desktop. My main system runs gnome, and I get my regular desktop resized appropriately.From a quick review of the package description,
x11vncdoes not work like either of the options I have presented here. With Solaris I tend to use ansshsession with X forwarding to a Linux host, or an Xserver running on Windows. There are open source Xservers that work well with Solaris. It is easy to create a Linux VirtualBox image. Unless I am running a program that requires an Xserver, I work from the command line in a Putty session from Windows.