NICE DCV licensing: How to deploy the RLM License Server

NICE DCV licensing

NICE DCV Server licensing is based on the Reprise LM (RLM) License Manager. RLM manages the number of concurrent NICE DCV sessions which are licensed by the installed license key.

In case you are looking for RLM on Windows – here is our Quick Start to install RLM on Windows.

You can download the RLM binaries from Reprise. Links can look similar to https://reprisesoftware.com/wp-content/uploads/2023/v15-1/rlm.v15.1BL2-x64_w4.admin.exe or https://reprisesoftware.com/wp-content/uploads/2023/v15-1/x64_l1.admin.tar.gz.

You can get more information about how to administer a RLM server at:

No license is required for the NICE DCV client component, called NICE DCV Endstation. The RLM license server has some similarities to FlexLM.

Deploying DCV demo license keys

Demo licenses are distributed as text files that look similar to the following sample:

LICENSE nice dcv 2019 25-apr-2022 uncounted hostid=ANY _ck=6d1efc7767
sig="60Q04580RS382GU11CVB69C36TSYCQQJNKNW79QY08AG11SVARK5TPEM464UQ1J
7T0ADB87GM07CP"

Demo licenses expire after 30 days from the date they were generated (reading the license you can easily get the expiration date) and are not bound to a specific host (hostid=ANY).

If you already installed NICE DCV on your application host, to install a demo license, you simply need to rename the license file you received from NICE to license.lic and copy it to the following directory:

  • On Linux: /etc/dcv/license.lic (Default; can be changed in the DCV configuration file /etc/dcv/dcv.conf
  • On Windows: <Program Files>\NICE\dcv\license\

To replace an old demo license with a new one, you can simply replace the old license.lic file with a new one.

Demo licenses must be installed on each DCV Application Host individually. They should not be used with the RLM License Server.

If you need to use a license server to distribute licenses check the next section “Installing a NICE DCV production license” and contact NI SP Support at our contact form to obtain a valid production license.

Changing the license path on a Windows Server

To update the license-file configuration parameter on a Windows server here are the steps:

  • Open the Windows Registry Editor.
  • Navigate to the HKEY_USERS/S-1-5-18/Software/GSettings/com/nicesoftware/dcv/license/ key and select the license-file parameter.If there is no license-file parameter in the registry key, create one:
    1. Open the context (right-click) menu for the license key in the left pane and choose NewString Value.
    2. For Name, enter license-file and press Enter.
  • Open the license-file parameter. For Value data, enter the full path to the license.lic file.
  • Choose OK and close the Windows Registry Editor.

Changing the license path on a Linux server

To update the license-file configuration parameter on a Linux server

  • Navigate to /etc/dcv/ and open the dcv.conf with your preferred text editor.
  • Locate the license-file parameter in the [license] section, and replace the existing path with the new full path to the license.lic file. If there is no license-file parameter in the [license] section, add it manually using the following format:
    license-file = "/full-path/license.lic"
  • Save and close the file.

Deploying DCV floating license keys

NICE DCV production licenses are floating and are managed by a license server. Such licenses allow the user to run the server component of NICE DCV on any machine that can access the license server. Licenses are counted in terms of concurrent remote desktops.

Production licenses are distributed as text files that look similar to the following sample:

HOST MyHost abcdabcdabcd 5053
ISV nice 
LICENSE nice dcv 2019 permanent 5 share=hi _ck=6cda023b55 sig="60P0451
2YCXT2UT2YDTE84926TJVXQXQUP78V0022G969R9P8AVABM03CSAWNX3NSTRCNP6BV4"

The license file specifies:

(HOST line): the license server host name ("MyHost"), the rlmhostid identifier which is typically the MAC address ("abcdabcdabcd") and the TCP port ("5053") to use.

(LICENSE line): supported software feature ("dcv") major version ("2019"), expiration date ("permanent" means no expiration) and maximum number of concurrent desktops ("5").

You must edit the license file with a common text editor to modify the HOST line:

  • specify the FQDN host name (replace “MyHost”): this host name must be resolved by the DNS used by the DCV Server node
  • optionally change the TCP port number (“5053”)

Notice that only the host name (“MyHost”) and the TCP port number can be changed without corrupting the signature of the license, which would make the license file invalid.

Please note that when ordering a new license for NICE DCV you might receive a “parked” license which states a preliminary delivery. Please follow the instructions in the email you received to provide the information for the final license.

Please note that when you replace the license file with a new license file with additional licenses or a new version and restart the RLM license server you might need to reload the license in the DCV server. This can be done with the following command on the respective DCV server: dcv reload-licenses.

Installing the RLM license server

This section describes how to install and configure the RLM License Server to distribute NICE DCV production licenses to Application Servers.

In case you already have an RLM Server you can skip this section and check section Installing nice.set file in an existing license server.

Please note this advice from the RLM admin manual: You should never run the rlm servers as a privileged user (root on unix or administrator on Windows). In case of the RLM v15 server on Windows this is enforced so the RLM server will fail to start with “Error 1067”. You can disable this behaviour with the -iai option on the command line.

Beginning with RLM v15.1, all users are required to have passwords to avoid automatic shutdown in 10 minutes. A default rlm.pw file is created during installation with the following default entry admin:admin:all. This can be adapted by changing the password in the rlm.pw file or leaving it empty. The format of the rlm.pw file is (list-of-permissions can be replaced by the keyword all):
username:password:list-of-permissions

If you need instructions on how to configure your RLM server in High Availability mode please see below.

Pre-installation Setup

  • Before installing, identify a server computer that will be able to host the RLM server. Supported Platforms: Linux and Windows (XP or later). Virtual Machines need to be explictely specified when requesting the license.
  • This server computer needs to be on your internal company network and must be reachable by all the computers in your organization that may need to check out licenses. In particular it must be reachable by all DCV application servers, but does not need to be reachable by DCV end stations. 
  • The license server should not be turned off. You will not be able to start new applications using DCV until the license server is restarted.
  • The load imposed on the server by RLM is extremely light, meaning a dedicated server is not required.
  • Once this server has been chosen it can be used by other products that use RLM as well.
  • Before installing the license file you need to modify the HOST line by replacing the MyHost placehoder with the real hostname of the RLM server.

Linux installation of the RLM License Server

You can install a stand-alone RLM Server following these instructions:

  1. Log in as root user
  2. Create a new group and user named rlm. This user can be any valid user/service account, but should NOT be root.
groupadd -r rlm
useradd -r -g rlm -d "/opt/nice/rlm" -s /sbin/nologin -c "RLM License Server" rlm

Create the /opt/nice folder and run the command to extract the files of the downloaded RLM server:

mkdir -p /opt/nice/rlm/license
tar xvf x64_l1.admin.tar.gz -C /opt/nice/rlm/ --strip-components 1

The rlm directory will be unpacked. Make sure the rlm user owns the /opt/nice/rlm directory and files:

chown -R rlm:rlm /opt/nice/rlm

Copy the license file license.lic to the /opt/nice/rlm/license/ folder:

cp license.lic /opt/nice/rlm/license/ 

Copy the /usr/share/dcv/license/nice.set (part of the DCV server installation) to /opt/nice/rlm:

cp /usr/share/dcv/license/nice.set /opt/nice/rlm/

Create a RLM server service. Open /opt/nice/rlm/dcv-rlm with your preferred editor and insert the following script (you can download the script here as well):

#!/bin/sh
# chkconfig: 35 99 01
# description: The Reprise License Manager daemon.
# processname: dcv-rlm

### BEGIN INIT INFO
# Provides: dcv-rlm
# Required-Start: $local_fs $remote_fs $syslog
# Required-Stop: $local_fs $remote_fs $syslog
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: The Reprise License Manager daemon.
# Description: A service that runs the Reprise License Manager daemon.
### END INIT INFO

# user used to run the daemon
RLM_USER="rlm"
# root of rlm installation
RLM_ROOT="/opt/nice/rlm"
# license directory (license files should have .lic extension)
RLM_LICENSE_DIR="/opt/nice/rlm/license"
# log file
RLM_LOG_FILE="/var/log/rlm.log"
_getpid() {
    pidof -o $$ -o $PPID -o %PPID -x "$1"
}
start() {
    echo -n "Starting rlm: "
    touch ${RLM_LOG_FILE}
    chown "${RLM_USER}" ${RLM_LOG_FILE}
    su -p -s /bin/sh "${RLM_USER}" -c "${RLM_ROOT}/rlm -c ${RLM_LICENSE_DIR} \
     -nows -dlog +${RLM_LOG_FILE} &"
    if [ $? -ne 0 ]; then
 echo "FAILED"
 return 1
    fi
    echo "OK"
}
stop() {
    echo -n "Stopping rlm: "
    pid=`_getpid ${RLM_ROOT}/rlm`
    if [ -n "$pid" ]; then
 kill $pid >/dev/null 2>&1
 sleep 3
 if [ -d "/proc/$pid" ] ; then
     echo "FAILED"
     return 1
 fi
    fi
    echo "OK"
}
status() {
    pid=`_getpid ${RLM_ROOT}/rlm`
    if [ -z "$pid" ]; then
 echo "rlm is stopped"
 return 3
    fi
    echo "rlm (pid $pid) is running..."
    return 0
}
restart() {
    stop
    start
}
case "$1" in
    start)
 start
 ;;
    stop)
 stop
 ;;
    status)
 status
 ;;
    restart)
 restart
 ;;
    *)
 echo $"Usage: $0 {start|stop|status|restart}"
 exit 1
esac
exit $?
# ex:ts=4:et:

Now we are ready to deploy and activate our RLM server startup script:

chmod +x /opt/nice/rlm/dcv-rlm 
cp -a /opt/nice/rlm/dcv-rlm /etc/init.d/
chkconfig --add dcv-rlm

Start the RLM Server:

service dcv-rlm start

The RLM server logs are in /var/log/rlm.log file. You should see a line similar to

date_time (nice) Server started on license1 (hostid: host_id) for: dcv dcv-gl

Your server will now start automatically on boot.

For maximum security, the dcv-rlm script disables the RLM web interface with the “-nows” option. You might want to change the password for the admin user in the rlm.pw file as per above note.

In case you want to enable the web interface, edit the dcv-rlm script and remove the “-nows” option. If you decide to use the web interface make sure to configure its authentication and access control mechanisms properly.

In case of need you can change the following parameters directly in the /etc/init.d/dcv-rlm file:

# user used to run the daemon
RLM_USER="rlm"
# root of rlm installation included in NICE DCV
RLM_ROOT="/opt/nice/rlm"
# license directory (license files should have .lic extension)
RLM_LICENSE_DIR="/opt/nice/rlm/license"
# log file
RLM_LOG_FILE="/var/log/dcv-rlm.log"

The DCV server needs to know as well where to connect to the license server. This is configured in the dcv.conf file. Open the /etc/dcv/dcv.conf file with your favorite editor e.g.:

vim /etc/dcv/dcv.conf

And find the [license] section where you can adapt the license-file parameter replacing the existing path with the RLM server’s port and hostname (or IP address) in the 5053@RLM_server_hostname format:

license-file = "5053@RLM_server_hostname"

The port 5053 is the standard RLM port which can be adapted in the license.lic file deployed above and the dcv.conf file.

The RLMUtil program allows you to work with the RLM server. It is located at:

/opt/nice/rlm/rlmutil

Description of options:

Usage: rlmutil program <args>, -OR-
              program <args>
 where program is one of:
  rlmadduser rlmdebug   rlmdown
  rlmhostid  rlmnewlog  rlmremove
  rlmreread  rlmstat    rlmswitch
  rlmswitchr
 args are:
 -c license_file | port@host - to specify license
 -dat - use *.dat instead of *.lic for license file
 -h - print usage information and exit
 -q - don't prompt on rlmdown/rlmremove/rlmswitch(r)
      and don't check license checksums
 -v - print version and exit
 -z password - specify license password
  rlmadduser options-filename username password
  rlmdebug [product]
  rlmdown [isv] [RLM]
  rlmhostid -q [[-]32|disksn|ether|gc|host|ip|internet|rlmid1|user|uuid]
  rlmnewlog isv log-file-name
  rlmremove server_host port isv handle
  rlmreread [isv]
  rlmstat [-a] [-f] [-i [isv]] -I [-l [isv]] [-n [node]] [-p [product]] [-u [user]]
  rlmstat -avail [-b] [-i isv] [-p product]
  rlmswitch isv new-file
  rlmswitchr isv new-file

Using RLMUtil:

  • Find the hostid of the RLM server (which is the MAC address):
    /opt/nice/rlm/rlmutil rlmhostid
  • Reread the license in case there was a change or you are debugging:
    /opt/nice/rlm/rlmutil rlmreread -c /opt/nice/rlm/license/license.lic
  • Get the RLM server status:
    /opt/nice/rlm/rlmutil rlmstat -c /opt/nice/rlm/license/license.lic or
    /opt/nice/rlm/rlmutil rlmstat -c 5053@RLM_server_hostname
  • Switch to new license file:
    /opt/nice/rlm/rlmutil rlmswitch nice new-license-file-with-path -c /opt/nice/rlm/license/license.lic

Windows installation of the RLM License Server

We have created a pre-packaged RLM bundle including the nice.set vendor daemon:

  1. Download the RLM NICE Bundle and extract it in your designated RLM directory – e.g. C:\RLM
  2. Adapt the hostname in the license file provided and copy the license file into license\license.lic
  3. As Administrator in a Powershell terminal run the PS script installrlm.ps1 to install the RLM service (specify the user in case with “.\”, e.g., “.\joe” or continue with step 6 below):
    # Uncomment the following line in case the script cannot be executed due to Windows scripting policy
    # Set-ExecutionPolicy RemoteSigned
    .\installrlm.ps1

Alternatively you can follow the steps below from 1 – 5

  1. You can download the RLM License Administration Bundle for free from the Reprise Software website
  2. During the installation you can specify where to install the RLM bundle. Recommendation is C:\RLM. The default is Documents\Reprise\rlm.v?????.admin which is fine as well – remember to adapt the paths below.
  3. Copy the edited license.lic file to C:\RLM\license\
  4. Copy the C:\Program Files\NICE\DCV\Server\license\nice.set file from your NICE DCV server and place it in the C:\RLM\ folder on your RLM server.
  5. Open a Command Prompt (CMD.EXE) or Powershell as an Administrator
  6. Install the RLM Server as a Windows Service (recommended is a non-admin local user to start the RLM server):
cd "C:\RLM"
.\rlm.exe -nows -dlog "C:\RLM\rlm.log" -c "C:\RLM\license\license.lic" -install_service -service_name DCV-RLM -user <service user name> -password <service password>

Windows expects the username argument to be domain\user. To use the local system domain, specify “.\”, e.g., “.\joe”. Without the “.\” you will get a service creation failure. In order to run a service, the account specified by the -user argument must have the “Log on as a Service” property set.

Now you can start the RLM Server with:

net start dcv-rlm

In case you encounter an “System error 1067” you are using an admin user to start the RLM server. Please see the note below.

You can use .\rlm -verify -c license\license.lic to verify your installation. You can remove the service with
.\rlm.exe -delete_service -service_name DCV-RLM .

Please note: Starting with RLM daemon version 15 the RLM service on Windows 10 cannot run as “Local account”. To mitigate this, you can edit the “dcv-rlm” service properties, and set a “Log On” (2nd tab) instead of “Local Account”, specifying a valid user account and password (it can be a local user dedicated to this execution, created ad-hoc for this reason). Or you can use the RLM server -iai option in case you really want to use the admin user. In this case the RLM service would look like: .\rlm.exe -nows -iai -dlog "C:\RLM\rlm.log" -c "C:\RLM\license\license.lic" -install_service -service_name DCV-RLM

Configuring your firewall to allow the RLM port

Your firewall needs to be configured to let the license server accept TCP connections from all your NICE DCV application hosts. RLM uses two TCP ports to communicate:

  • one for the RLM License Server
  • one for the NICE ISV Server

The RLM License Server, by default, runs on TCP port 5053. This can be changed in the first line of your license.lic file

HOST MyHost abcdabcdabcd port

The NICE ISV server by default dynamically binds to a random high level port.

To specify a static port for the NICE ISV server, add port=port_number to the ISV line of your license.lic file

ISV nice port=port_number

where port_number is the TCP port you want the NICE ISV server to listen on.

The RLM license server web interface by default runs on TCP port 5054.

To open the port on a Linux RLM server you can apply the following commands:

sudo iptables-save
# open default RLM port 5053 in firewall
sudo firewall-cmd --zone=public --add-port=5053/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
# sudo iptables-save | grep 8443

In case you are running the RLM server on a cloud server please adapt the inbound networking rule as well.

Installing nice.set file in an existing RLM License Server

To use an existing RLM Server for DCV you need to add to the RLM License Server the NICE ISV vendor file nice.set:

On Windows:

  1. The nice.set file can be found in the C:\Program Files\NICE\DCV\Server\license directory of the DCV server installation:
  2. C:\Program Files\NICE\DCV\Server\license\nice.set Obtain the nice-rlm.vXXX.exe file from the NICE DCV distribution
  3. Create the folder C:\RLM
  4. Install the RLM server for Windows (download can be found at the beginning of this page)
  5. Copy the nice.set file from to your RLM Server installation
  6. Restart the RLM Server

On Linux:

  1. Copy the /usr/share/dcv/license/nice.set (part of the DCV server installation) to your RLM Server installation:
cp /usr/share/dcv/license/nice.set (path_to_RLM_server_installation)

Setting up RLM license server failover

High Availability strategy can be implemented running a second RLM server, that connects to the primary server and normally stays silent. In case the primary fails, it takes the role of license server. This procedure occurs transparently with respect to the applications: running sessions will continue to run, new sessions will checkout the license tokens from the same pool of licenses.

The failover license file looks different from the primary:

HOST myfailoverserver fedcbafedcba 5053
ISV nice  
LICENSE nice rlm_failover_server 1.0 permanent 1 hostid=00a0ed2b71ba
  _primary_server=5053@myprimaryserver _ck=f053fc302a sig="60PG450T2K25M8C
  RESXKQEWQMH5H9K33BGD2QG822M0AAGBN2QE2GTD3PRVQ25NU19GM9G2149M0"

Notice that it does not contain any token count, but just the address and port of the primary server. Further information about setting up a failover RLM server can be found in this document: DCV RLM Failover Licenses. The syntax to specify the primary and failover license servers in the DCV configuration (dcv.conf) e.g. is: license-file = "5053@primary-server:5053@failover-server" (Linux) or license-file = "5053@primary-server;5053@failover-server" (Windows; please note the separator “;”) .

In addition we list the steps recommended by Reprise for setting up the Failover RLM License server:

When you receive the rlm_failover license file, do the following to install your failover license server:

  1. Install rlm and your ISV server on the failover license server node.
  2. Install all license files from the primary server.
  3. Edit the license file with the rlm_failover or rlm_failover_server license to put the hostname of the primary server in the _primary_server= (or _failover_host=) field, and the hostname of the failover license server on the HOST line. (Put the port@host of the rlm process on the primary server in the _primary_server= (or _failover_host=) field for the case of rlm_failover_server licenses).
  4. Install any ISV options in an options file, and make it accessible to the ISV server either through it’s license file or by giving it the default options filename of isv.opt.
  5. Insure that rlm will process all the license files above, and start rlm.
  6. Modify your user’s RLM_LICENSE environment variables to include port@host of the failover license server. OR be sure to include the failover license server’s license file where your application will find it. If you omit this step, the failover license server will take over, but your application will not be able to check out a license from the failover server.

Configuring the DCV SERVER licensing to use the RLM Server

In the DCV Windows server the RLM license server is configured in the registry at

\HKEY_USERS\S-1-5-18\Software\GSettings\com\nicesoftware\dcv\license\license-file

which you can either configure via regedit or in the Powershell. In this case start Powershell as Administrator user and issue:

New-ItemProperty -Path "Microsoft.PowerShell.Core\Registry::\HKEY_USERS\S-1-5-18\Software\GSettings\com\nicesoftware\dcv\license\license-file" -Name parameter_name -PropertyType String -Value "5053@YOUR_RLM_HOSTNAME_OR_IP" -Force

In the DCV Linux server the RLM license server is configured in /etc/dcv/dcv.conf. Locate the [license] section and configure the license-file parameter as follows:

license-file = "5053@RLM_server_hostname_OR_IP" 

or in case of a fail-over license server:

  • Windows DCV server: license-file = “5053@primary-server;5053@failover-server”
  • Linux DCV server: license-file = “5053@primary-server:5053@failover-server”

Reserving DCV Licenses in the RLM License Manager

Question: Is there a way to preserve some of the licenses based on IP? If I e.g. want to keep 2 licenses preserved for a certain site.

Answer: You can use the RESERVE command (more info here http://www.reprisesoftware.com/RLM_License_Administration.pdf on page 77).

RESERVE num product user|host|group|host_group|internet|internet_group|
project who [id=nnn]
The RESERVE line reserves num licenses of product for use by a particular user, host, group, 
host_group, IP address, or project. If you specify group, host_group, or internet_group, it must be 
defined by a GROUP or HOST_GROUP or INTERNET_GROUP line in the options file.

E.g. with the following command you can reserve 2 licenses to a IP range:

RESERVE 2 dcv internet 192.168.38.*

Updating the DCV License

Starting from NICE DCV version 2021, you can use the following command as administrator in order to force the license update immediately:

dcv reload-licenses

Troubleshooting the RLM License Server

The best source for troubleshooting RLM issues is looking at the RLM logfiles. On Windows the default location is \NICE\RLM\rlm.log. On Linux the default is /var/log/rlm.log.

If you get the error: “Unable to find ISV binary” on a Linux RLM server you need to copy the ISV binary nice.set file inside the rlm directory. You can find the nice.set file under the /usr/share/dcv/license/ folder of the Linux DCV server. 

Partially based on a NICE support article. Please let us know if there are any questions.