by Fredrik Brattstig @virtualbrat
16 March 2022
IGEL RD client (named AVD in the configuration utility) client as we all know can connect to Microsoft Azure Virtual Desktop and Windows 365 and that there are quite some configuration options. But there is more! Continue reading if you are interested in how you can customize the RD Client. I will go through a use case of setting up an IGEL OS endpoint as a pure kiosk mode RD client, and we will have a look at a few of the hidden parameters. Let’s start with the registry!
IGEL Setup is segmented into categories, where the AVD client configuration options are seen under the category “Sessions”. But when you have an AVD session configured, we can look in the registry for some hidden options. So, how do you find those options?
expand the System category, go to registry expand sessions and you will find wvd0. Note, you can find wvd0, wvd1, wvd2, etc based on how many RD client sessions you have configured. If you have multiple, the registry entry name (eg sessions.wvd0.name) will give you a good hint on which session you currently are configuring. It is important that you configure the correct session. But if there is only one, which is the normal use case, it shouldn’t be very confusing because then you will only have wvd0 referenced.

There are quite some options available for you to configure, some of them are visible on the general AVD session configuration pages, while others aren’t and this is by intention. One thing that you see on this list is a thing we are going to drill deeper into, the “cmd_ext” option! cmd_ext stands for command extensions and here you can freely add multiple start-up parameters to the IGEL RC Client.

Let’s start by: how do I know what cmd_ext‘s?? If you open a terminal and run the command /services/avd/bin/igelrdp3 –help (note the double minus sign in front of help) you will get a list returned of all extensions and a short description. Some of the extensions are also shown in the RD Client configuration pages, some are shown in the registry, and some you just have to add manually as a cmd_ext. if you want to have multiple command-line options, just separate with a blank character “–showFPS –networkbutton”
Here is the output of /services/avd/bin/igelrdp3 –help :
Usage: /services/avd/bin/igelrdp3 [options]
IGEL rdcore application
Options:
-h, --help Displays help on commandline
options.
--help-all Displays help including Qt specific
options.
-v, --version Displays version information.
-c, --configfile <configfile> Use <configfile> for session
configuration (set to "-" to read
from stdin).
-l, --login <mode> Use <mode> as the login mode:
None,DefaultOnPremise,DefaultAVD,Auto
OnPremise,AutoAVD.
--optimization <mode> Optimization mode to use:
NoOptimization,QOpenGLWidget,QOpenGL,
AutoOptimization.
-u, --username <username> Use <username> as the login user
(set to "-" to read from stdin). When
username starts with @ it presets the
domain, so only the username without
domain is needed for the user to be
typed in.
-p, --password <password> Use <password> as the login password
(set to "-" to read from stdin).
--server <server> Server address to connect to for
on-prem .
--gwusername <username> Use <username> as the gateway user
(set to "-" to read from stdin).
--gwpassword <password> Use <password> as the gateway
password (set to "-" to read from
stdin).
--sessionusername <username> Use <username> as the session user
(set to "-" to read from stdin).
--sessionpassword <password> Use <password> as the session
password (set to "-" to read from
stdin).
--alwayspromptsessionuserandpw Always prompt for username and
password upon session connection.
--alwayspromptsessionpw Always prompt for password upon
session connection.
--compact Show AAD login in compact view.
--proxy <http://hostname:port> Use proxy.
--httpuseragent <agent string> Custom HTTP user agent string like
"Mozilla/5.0 (X11; Windows x86_64)
AppleWebKit/537.36 (KHTML, like
Gecko) QtWebEngine/5.9.5
Chrome/56.0.2924.122 Safari/537.360"
-f, --rdpfile <rdp file> RDP file to use for on-prem
connection
-s, --start <session> Start <session> automatically.
--autostartsingle Automatically start if there is only
a single session.
--allowpresetdomainoverwrite When you have a preset domain, allow
the user to overwrite it with
username@other.domain
-t, --toolbar, --inSessionBar Enable in-session toolbar.
--smartcard Enable smartcard redirection.
-d, --drive Enable drive redirection.
--printer Enable printer redirection.
--printermap <pmap[,pmap]> Select printers to redirect and map
printer names to drivers optionally
printernameregex[=drivername].
Default driver is "Microsoft PS Class
Driver". Valid printer driver names
are Windows and printer driver vendor
specific. For example: --printermap
'.*LaserJet.*,.*DeskJet.*' or whith
printerdriver specified: --printermap
'.*LaserJet.*=HP Universal Printing
PS'
--metrics Enable connection metrics.
--audio-out Enable audio out redirection.
--audio-in Enable audio in redirection.
--osVersion <versionstring> OS version string
--deviceHardwareId <id> Device unique hardware identifier is
a 64-bit unsigned integer value
--hostname, --deviceIdentifier <name> Hostname the client should appear
within the session.
--userIdOption <user identifier> User identifier like the local user
name
-a, --appbar Enable appbar.
-q, --quit Quit program automatically when last
session is closed.
-n <sessionNumber> Set Session number for Logfile name
--clientLogLevel <clientLogLevel> Set Log Level for client log
messages [0 - 5, where 0=critical,
1=err, 2=warn, 3=info, 4=debug,
5=trace]
--rdcoreLogLevel <rdcoreLogLevel> Set Log Level for rdcore log
messages [0 - 3]
--webRTCLogLevel <webRTCLogLevel> Set Log Level for WebRTC log
messages
[verbose,info,warning,error,none]
--clipboard Enable clipboard redirection
--resolution <res> Set session screen resolution
[fullscreen|workarea|<width>x<height>
--monitor <monitor number> Start monitor for the session [0 -
x]
--multimonitor <Single|Multi|Expand> Multi monitor mode to use
[Single|Multi|Expand]
--multimonitormask <1-3|2-|-3|1,2,3...> Multi monitor mask to enable/disable
certain monitors [0-63]
--disable-aac Disable AAC Audio Codec
--disable-timezone Disable TimeZone Redirection
--disable-webrtc-redirection Disable WebRTC Redirection
--disable-webrtc-unifiedplan Disable WebRTC UnifiedPlan support
--disable-webrtc-datachannel Disable WebRTC data channel support
--workspacezoom <percentage> Set the workspace zoom
[50,000000%-300,000000%]
--scalefactor <factor> Set the display scale factor
[100|125|150|175|200|250|300|400|500]
--ezeep <ezeep.tokens-file> Enable ThinPrint's Ezeep support
--grabkeyboard Grab the whole keyboard (no local
shortcuts while in session window)
--remotekeymapping Send key events as windows scancodes
instead of unicode symbols so that
the keyboard mapping in the remote
session has precedence
--debugkeys Debug keys (ie. Ctrl+Alt+P to pause
rendering)
--noVersionCheck Disable version check.)
--inputLocaleId <ID> The active input locale identifier.
See [MS-RDPBCGR] section 4.10 for
examples and further reference.
--activeLanguageId <LCID> The active language identifier. See
[MS-RDPBCGR] section 4.10 for
examples and further reference.
--showFPS Show frames per second info
--workspaces <wspace[+++wspace>]> Azure Workspace Feeds
wspace=clientAppId,redirectUri,resour
ceUri,feedUrl[,refreshToken]
--showAllWorkspaces Show all workspaces even when we
havn't seen them at
OnAdditionalWorkspaceAvailable.
--svc <plugin[,arg[,arg]]> Static Virtual Channel Plugins
--dvc <plugin[,arg[,arg]]> Dynamic Virtual Channel Plugins
--nobackground Disables background.
--background <color or file> Use given background color (ie.
"#88FF88") or filename.
--nologo Disables company logo.
--logo <logo-file-name> Use given file as logo.
--nopowerbutton Disables power button.
--networkbutton Enables network button.
--kioskmode Enables Kiosk Mode.
Some of the command line parameters you see above are for testing purposes only, and some are preparations for future implementations. If you are about to try all of them, some simply won’t work.
Let’s have a look at two of them that I think is good to know of.
1. –showFPS = as it sounds like, it will show the current frames per second that the igelrdp3 RD Client is displaying.
2. –networkbutton = this option will add a button named “Network” to your RD Client login mask. The cool thing is that it will detect if your device has functional network connectivity, if it doesn’t, it will blink with a red border. This will in turn allow the user to intercept that there needs to be a WiFi connection established before logging in. Connecting to Azure virtual machines is really hard without network connectivity…
When a user clicks on the “Network” button, the WiFi selector will be displayed, and the user can choose the network to connect to in a regular manner.
This is especially useful when you have users roaming between office<->public Internet<->home. With having this setting enabled you can lock the complete user interface for the user to make the endpoint extremely secure and reliable while still maintaining the possibility for the user to adapt to multiple physical location requirements.
Below is a video on how it could look, I’m taking you through how to enable the “networkbutton” and how it will look for your users. I’ll throw in the FPS counter too!
That’s it for today! Stay safe out there!
/Fred