Citrix Workspace error after Ubuntu upgrade: Keyboard mapping file is invalid or does not exist

Written by - 0 comments

Published on - last updated on November 14th 2022 - Listed in Linux


After my notebook was upgraded from Linux Mint 20.3 to 21.0, I needed to re-install a couple of applications as they were removed during the upgrade process. One of these applications was Citrix Workspace app.

Once Citrix Workspace app was installed on Linux Mint 21 (Ubuntu 22.04), everything seemed to work - at first. As soon as I tried to connect to a remote desktop, an error showed up:

Keyboard mapping file "" is invalid or does not exist.

Keyboard mapping file is invalid or does not exist error in Citrix Workspace

As the OS was upgraded and there was Citrix Workspace previously installed, there was still a local Citrix profile (located under ~/.ICAClient) present.

ck@WM2856L:~/.ICAClient$ ls -la
total 184
drwx------  8 ck ck  4096 Nov 14 06:40 ./
drwx------ 43 ck ck 12288 Nov 14 06:27 ../
-rw-------  1 ck ck 24491 Feb 13  2020 All_Regions.ini
srwxr-xr-x  1 ck ck     0 Nov 14 06:39 aml_communication_socket=
-rw-------  1 ck ck   358 Feb 13  2020 appsrv.ini
drwxr-xr-x  7 ck ck  4096 Nov 14 06:40 cache/
srwxr-xr-x  1 ck ck     0 Nov 14 06:39 clsync_socket=
drwxrwxr-x  2 ck ck  4096 Feb 13  2020 config/
drwxrwx---  2 ck ck  4096 Feb 13  2020 crls/
-rw-r--r--  1 ck ck     0 Nov 14 06:40 .customdimensions_sent
srwxr-xr-x  1 ck ck     0 Nov 14 06:39 customportal_socket=
-rw-------  1 ck ck     0 Feb 13  2020 .eula_accepted
-rw-r--r--  1 ck ck   132 Nov 14 06:40 .fileaccess
-rw-r--r--  1 ck ck     0 Nov 14 06:39 .heartbeat_sent
-rw-r--r--  1 ck ck    39 Nov 14 06:39 .ldflags.json
drwxrwxr-x  2 ck ck 12288 Nov 14 06:39 logs/
drwx------  2 ck ck  4096 Nov 14 06:40 .tmp/
-rw-------  1 ck ck   814 Feb 13  2020 Trusted_Region.ini
drwx------  2 ck ck  4096 Nov 14 06:40 UDS/
-rw-------  1 ck ck   454 Feb 13  2020 Unknown_Region.ini
-rw-------  1 ck ck   818 Feb 13  2020 Untrusted_Region.ini
srwxr-xr-x  1 ck ck     0 Nov 14 06:39 webkit_socket1=
srwxr-xr-x  1 ck ck     0 Nov 14 06:39 webkit_socket2=
-rw-------  1 ck ck     0 Nov 10 10:16 wfclient.ini

However something seems to be somewhat incompatible with the newer Citrix Workspace app or since the Linux Mint upgrade. The KeyboardMappingFile option (with an empty value) was found in ~/.ICAClient/All_Regions.ini:

ck@WM2856L:~/.ICAClient$ grep -rni keyboardmapping
All_Regions.ini:641:KeyboardMappingFile=

My first guess was that this is looking for local keymaps, usually installed with the kbd or console-data packages. But to my big surprise it turned out that there are no keymaps installed on Ubuntu 22.04 anymore!

ck@WM2856L:~$ localectl list-keymaps
Failed to read list of keymaps: No such file or directory

After digging deeper and eventually fixing the missing virtual keyboard keymap files on Ubuntu 22.04, the Citrix error is not caused by the missing keymaps, but rather some broken OS lookup (maybe Ubuntu 22.04 is not yet detected by the Citrix app?).

Citrix linux keyboard mapping not automatically loaded (OS not detected?)

It turns out that the prepared and ready to use Citrix Keyboard Mappings can be found in /opt/Citrix/ICAClient/keyboard/:

ck@WM2856L:~$ ls -la /opt/Citrix/ICAClient/keyboard/
total 252
drwxr-xr-x  2 root root 4096 Nov 10 10:13 ./
drwxr-xr-x 18 root root 4096 Nov 10 10:13 ../
-rw-r--r--  1 root root 1860 Nov  7 17:29 age2.kbd
-rw-r--r--  1 root root 1902 Nov  7 17:29 agex2.kbd
-rw-r--r--  1 root root  308 Nov  7 17:29 automatic.kbd
-rw-r--r--  1 root root 2097 Nov  7 17:29 dcint401.kbd
-rw-r--r--  1 root root 2021 Nov  7 17:29 dcintpcx.kbd
-rw-r--r--  1 root root  824 Nov  7 17:29 dcus401.kbd
-rw-r--r--  1 root root  416 Nov  7 17:29 dcuspcx.kbd
-rw-r--r--  1 root root  819 Nov  7 17:29 dec401.kbd
-rw-r--r--  1 root root 2092 Nov  7 17:29 dec401uk.kbd
-rw-r--r--  1 root root  411 Nov  7 17:29 decpcx.kbd
-rw-r--r--  1 root root 2016 Nov  7 17:29 decpcxuk.kbd
-rw-r--r--  1 root root  995 Nov  7 17:29 dgfr.kbd
-rw-r--r--  1 root root  694 Nov  7 17:29 dggr.kbd
-rw-r--r--  1 root root  338 Nov  7 17:29 dg.kbd
-rw-r--r--  1 root root  410 Nov  7 17:29 dguk.kbd
-rw-r--r--  1 root root  343 Nov  7 17:29 dgus.kbd
-rw-r--r--  1 root root  547 Nov  7 17:29 hp101.kbd
-rw-r--r--  1 root root  598 Nov  7 17:29 hpfritf.kbd
-rw-r--r--  1 root root  655 Nov  7 17:29 hpgritf.kbd
-rw-r--r--  1 root root  795 Nov  7 17:29 hpint101.kbd
-rw-r--r--  1 root root  793 Nov  7 17:29 hpintps2.kbd
-rw-r--r--  1 root root  546 Nov  7 17:29 hpitf.kbd
-rw-r--r--  1 root root  509 Nov  7 17:29 hpps2.kbd
-rw-r--r--  1 root root  790 Nov  7 17:29 hpuk101.kbd
-rw-r--r--  1 root root  866 Nov  7 17:29 hpukitf.kbd
-rw-r--r--  1 root root  788 Nov  7 17:29 hpukps2.kbd
-rw-r--r--  1 root root  552 Nov  7 17:29 hpus101.kbd
-rw-r--r--  1 root root  551 Nov  7 17:29 hpusitf.kbd
-rw-r--r--  1 root root  485 Nov  7 17:29 hpusps2.kbd
-rw-r--r--  1 root root 2019 Nov  7 17:29 ibm.kbd
-rw-r--r--  1 root root 4838 Nov  7 17:29 keyboard.ini
-rw-r--r--  1 root root  520 Nov  7 17:29 linux-ja.kbd
-rw-r--r--  1 root root  443 Nov  7 17:29 linux.kbd
-rw-r--r--  1 root root 1490 Nov  7 17:29 mac101.kbd
-rw-r--r--  1 root root  473 Nov  7 17:29 ncdn-101.kbd
-rw-r--r--  1 root root  485 Nov  7 17:29 ncdn-102.kbd
-rw-r--r--  1 root root  437 Nov  7 17:29 netbsd.kbd
-rw-r--r--  1 root root  454 Nov  7 17:29 scoos5.kbd
-rw-r--r--  1 root root  448 Nov  7 17:29 scouw2.kbd
-rw-r--r--  1 root root  851 Nov  7 17:29 sgindyfr.kbd
-rw-r--r--  1 root root  746 Nov  7 17:29 sgindygr.kbd
-rw-r--r--  1 root root  423 Nov  7 17:29 sgindy.kbd
-rw-r--r--  1 root root  562 Nov  7 17:29 sgindyuk.kbd
-rw-r--r--  1 root root  428 Nov  7 17:29 sgindyus.kbd
-rw-r--r--  1 root root 2011 Nov  7 17:29 sg.kbd
-rw-r--r--  1 root root  418 Nov  7 17:29 sngr.kbd
-rw-r--r--  1 root root  573 Nov  7 17:29 sparc3.kbd
-rw-r--r--  1 root root  722 Nov  7 17:29 sparc4.kbd
-rw-r--r--  1 root root  919 Nov  7 17:29 sparc5.kbd
-rw-r--r--  1 root root  407 Nov  7 17:29 sparc6usb.kbd
-rw-r--r--  1 root root 1507 Nov  7 17:29 sparcfr4.kbd
-rw-r--r--  1 root root 1580 Nov  7 17:29 sparcfr5.kbd
-rw-r--r--  1 root root 1486 Nov  7 17:29 sparcgr4.kbd
-rw-r--r--  1 root root 1580 Nov  7 17:29 sparcgr5.kbd
-rw-r--r--  1 root root  512 Nov  7 17:29 sparcuk4.kbd
-rw-r--r--  1 root root 2111 Nov  7 17:29 sparcuk5.kbd
-rw-r--r--  1 root root  578 Nov  7 17:29 sparcus3.kbd
-rw-r--r--  1 root root  512 Nov  7 17:29 sparcus4.kbd
-rw-r--r--  1 root root  949 Nov  7 17:29 sparcus5.kbd
-rw-r--r--  1 root root  823 Nov  7 17:29 trimodal.kbd

In our case the keyboard.ini and the linux.kdb files are the relevant ones to look at. Looking at the config file keyboard.ini shows a section [LINUX]:

;
;  LINUX keyboard Types
;

[LINUX]
ButtonType = Cascade
ButtonLabel = Linux
Standard=
JapaneseKDE=

[Standard]
ButtonLabel = Standard
KeyboardDescription = LINUX
KeyboardMappingFile = linux.kbd

[JapaneseKDE]
ButtonLabel = Japanese KDE
KeyboardDescription = LINUX (Japanese KDE)
KeyboardMappingFile = linux-ja.kbd

This section is most likely automatically loaded (that's a guess), when LINUX was detected as operating system. When it is loaded, it sets the KeyboardMappingFile value to linux.kbd, which is the kbd file on the same path.

However because the OS is not detected, linux.kbd is not loaded and the KeyboardMappingFile remains empty - causing the error in the Citrix Workspace app.

To avoid this automatic detection, you can manually configure to use linux.kbd in your user's ICAClient settings:

ck@WM2856L:~$ grep KeyboardMap ~/.ICAClient/All_Regions.ini
KeyboardMappingFile=linux.kbd

This will automatically append the path /opt/Citrix/ICAClient/keyboard/ and will therefore find /opt/Citrix/ICAClient/keyboard/linux.kbd.

After another start of Citrix Workspace app, the error didn't show up anymore.

OS not detected using os-prober

How exactly Citrix Workspace does the OS detection is not sure, however there's the os-prober command which can be used to run a Operating System detection. But when running this, I was surprised to find no result:

ck@WM2856L:~$ sudo os-prober && echo $?
0

Maybe this command is used in the background by Citrix Workspace - who knows - it would certainly explain a lot.


Add a comment

Show form to leave a comment

Comments (newest first)

No comments yet.

RSS feed

Blog Tags:

  AWS   Android   Ansible   Apache   Apple   Atlassian   BSD   Backup   Bash   Bluecoat   CMS   Chef   Cloud   Coding   Consul   Containers   CouchDB   DB   DNS   Database   Databases   Docker   ELK   Elasticsearch   Filebeat   FreeBSD   Galera   Git   GlusterFS   Grafana   Graphics   HAProxy   HTML   Hacks   Hardware   Icinga   Icingaweb   Icingaweb2   Influx   Internet   Java   KVM   Kibana   Kodi   Kubernetes   LVM   LXC   Linux   Logstash   Mac   Macintosh   Mail   MariaDB   Minio   MongoDB   Monitoring   Multimedia   MySQL   NFS   Nagios   Network   Nginx   OSSEC   OTRS   Office   PGSQL   PHP   Perl   Personal   PostgreSQL   Postgres   PowerDNS   Proxmox   Proxy   Python   Rancher   Rant   Redis   Roundcube   SSL   Samba   Seafile   Security   Shell   SmartOS   Solaris   Surveillance   Systemd   TLS   Tomcat   Ubuntu   Unix   VMWare   VMware   Varnish   Virtualization   Windows   Wireless   Wordpress   Wyse   ZFS   Zoneminder   


Update cookies preferences