IGEL RD Client for AVD/Windows365 -the hidden options…

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.

The list of options you can configure for the session in the registry for a RD client session

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.

cmd_ext..


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!

Customizing the IGEL RD Client using command-line extensions.

That’s it for today! Stay safe out there!

/Fred