I use Citrix Receiver on my home GNU/Linux Debian (testing) desktop to remote in to my work Windows machine.
I use Emacs extensively and I have many keybindings that use the super key or meta(alt)-shift combinations. However, neither my super keys (e.g. s-g) nor my meta-shift-letter combinations (e.g. M-<) are being passed through to the Windows machine. s-g seems to send g and M-< seems to send <.
- How can I pass through all my shifted keystrokes?
- How can I pass through the super modifier?
This is the closest thing I can find to documentation for the Citrix client settings, and I've not found anything of use: https://www.citrix.com/content/dam/citrix/en_us/documents/downloads/citrix-receiver/linux-oem-guide-13-0-bk.pdf
UPDATE by editing the ~/.ICAClient/All_Regions.ini file to include
[Virtual Channels\Keyboard]
TransparentKeyPassthrough=Remote
I can successfully nuke the super key on both local and remote. And M-< etc still don't get seen by the remote.
UPDATE http://support.citrix.com/article/CTX103576 introduces the -keylog command (which is obviously a major security hole, so ensure that you turn it off after using it) which allowed me to capture the keycodes that are being seen.
I realised that if I very slowly press M then shift then . (to achieve) M-< then Citrix is able to interpret it correctly and send the correct command to the remote emacs. This is less than ideal but at least it is a workaround. The keycodes that Citrix sees are
Key down: special 8/0x8
Key down: special 5/0x5
Key down: Unicode '<' - 60/0x3c
Key up: Unicode '<' - 60/0x3c
Key up: special 5/0x5
Key up: special 8/0x8
whereas a failed attempt looks like
Key down: special 5/0x5
Key down: special 64/0x40
Key down: Unicode '<' - 60/0x3c
Key up: Unicode '<' - 60/0x3c
Key up: special 64/0x40
Key up: special 5/0x5
The super key is being seen by citrix as special 65/0x41 and if I do s-f it looks like this in the keylogger
Key down: special 65/0x41
Key down: Unicode 'f' - 102/0x66
Key up: Unicode 'f' - 102/0x66
Key up: special 65/0x41
but the Remote Emacs only sees the f.
UPDATE this is very weird. The remote can see M-s- (meta-super) bindings. It's just not able to see s- bindings.