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.
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?).
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.
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.
No comments yet.
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 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