Terminal Server Session Sharing Explained
In the simplest terms, terminal server session sharing is a feature of Windows Terminal Server add-on products like Citrix Presentation Server, which allows different seamless applications to operate using use the same terminal server session on the same terminal server.
What is a terminal server session?
A terminal server session is a user’s operating environment when logging onto a Windows Terminal Server, with or without Citrix Presentation Server. Each terminal server session is assigned a per-server, unique ID at logon. Session IDs start at the number zero, which is reserved for the console connection. It makes no difference whether the client is physically logged on to the console, or connecting to the console via the Microsoft Remote Desktop Client or the Citrix Presentation Server Client. That console connection always uses session zero. There can only be one concurrent console session, so a user logging on to the console of a terminal server with the same credentials as the logged on user would assume that user’s session. If a user were to log on to the console of a terminal server with credentials different than that of the current console session, the current console session would be logged off and a new user would log on and assume session zero.
Non console terminal server sessions begin at the number one and increment dynamically to the physical limit of the terminal server, or the maximum number of sessions limit defined in the terminal server configuration.
It’s notable that while Windows XP Professional allows terminal server connections via the Microsoft Remote Desktop Client, these are always to session zero, i.e. the console session. Since there can only be one concurrent console session, and the console session is always session zero, one can conclude that it is impossible to “legally” have more than one terminal server session on an XP Pro Remote Desktop Host.
Terminal server session behavior
As stated in the introduction, session sharing is a feature of terminal server add-on products, like Citrix Presentation Server. When connecting to a terminal server with the Microsoft Remote Desktop Client, or legacy Terminal Services Client, every successful connection creates a new, unique session.
This has significance as although it is possible to set the Microsoft Remote Desktop Client’s startup program to something other than the default explorer shell, this would cause performance and usability problems.
From a performance standpoint, a user launching multiple concurrent applications via the Remote Desktop Client and “Start the following program on connection” setting would greatly reduce the scalability of a given terminal server. This is because each application would generate a new terminal server session, which consumes memory and CPU cycles.
From a usability standpoint launching applications in different sessions can be confusing for the end user. For example, as it is easy to overwrite one’s personalized application settings when working with multiple concurrent terminal server sessions, as the last logoff will overwrite the settings that may have been changed in one of the other sessions that was previously closed.
How does one enable and configure session sharing on Citrix Presentation Server?
Since session sharing is not a built-in feature of Windows 2000 Server terminal services or Windows Server 2003 terminal server, the following information is specific to Citrix Presentation Server which adds this feature. Windows Server Codenamed “Longhorn” will add terminal server session sharing functionality, when it is released.
Terminal server session sharing is enabled by default on Citrix MetaFrame 1.8 SP1 and Citrix MetaFrame XP for Windows NT4 Terminal Server Edition. It is also enabled by default on Citrix MetaFrame 1.8 and higher, running on Windows 2000 Server and Windows Server 2003.
If terminal server session sharing is enabled by default, one might wonder why an article needs to be written to explain how it works and how to enable it. The answer to this question is that it is very simple to inadvertently disable this feature. Information Technologists not very experienced with managing Citrix Presentation Server applications often wonder why users' applications are launching in separate sessions, as they don’t know the requirements for session sharing to work.
Put simply, for terminal server session sharing to work on a few things need to be true:
- In the ICA Client Connection Preferences, the Window Size must be configured as Seamless. Subsequent applications launched in any other configuration will create a second terminal server session.
- The applications being launched must be published to the same Citrix Presentation Server. If a user launches a published application that is not published on the same server as their initial terminal server session, a new terminal server session will be created on the second server.
- Published Applications will not share a terminal server session with a Published Desktop, even if they are both seamless and launched on the same Citrix Presentation Server.
- When creating published applications in the Citrix Presentation Server Console, or via MFCOM Script, it is imperative that each application be configured to operate in the same manner. Settings that are commonly configured differently that would cause session sharing to not work are:
Application Appearance – publishing applications with different Session Window Size or Color Depth would cause terminal server session sharing to not work with the applications.
Client Options – publishing applications with different settings for Encryption, Legacy Audio or SSL and TLS protocols would cause session sharing to not work with the applications.
- If the seamless published application is running on a thin client computer, i.e. Windows Based Terminal (WBT) running Windows CE, the Citrix ICA Client on the terminal must be version 9.x or higher. Session sharing is currently not supported on PocketPC ICA Clients.
When is it not desirable to use terminal server session sharing?
While it is generally a good practice to configure applications to take advantage of the session sharing feature, there are times when terminal server session sharing is not desirable.
Resource intensive applications that do not scale well, are often published in terminal server silos (group of terminal servers configured to host a specific application, or set of applications) specifically configured to run only these applications. Since these published applications are assigned to a specific server silo, launching an application that is siloed and other applications that are not running on the same silo servers will generate more than one terminal server session. This is done on purpose to ensure that the siloed and non-siloed applications operate with optimum end user perceived performance.
Applications that have compatibility issues, i.e. different versions of the same application, are often installed, published and assigned to different silos of terminal servers. This is done to ensure that the applications operate properly, on separate servers. Session sharing between the two incompatible applications is impossible because they operate on separate servers.
Terminal Server Session Sharing is a feature of Citrix Presentation Server, and many other competitive terminal server add-on suites. Since it’s enabled by default on Citrix Presentation Server, it’s important to know the requirements to keep this feature enabled, when it should not be used, and how to disable it, when necessary. Session sharing of seamless terminal server applications is a planned feature of Windows Server Codenamed “Longhorn”, the next release of Windows Server.