XRDP – How to Install XRDP on Ubuntu 16.10 – The easy way !

Hello World

In our previous post, we have provided a quick overview of the small changes that Ubuntu 16.10 have been introduced and the way it might possibly impact the usage of the xRDP package.  We have seen that the VNC Server capabilities does not seem to work as expected and that a new xrdp package version is available in the repository.  

To have xRDP solution working on Ubuntu Distribution, we have two installation options : 

  • using the common approach where an alternate desktop will be installed (in our case, it would be Mate-Desktop)
  • using new approach and try to connect to Unity Desktop directly within the remote session

This post will describe the most common approach that has been used within the last years in order to have xRDP installed and working on Ubuntu systems.  The common approach is to install an alternate desktop.  In our next post, we will (try) describe how to perform the xRDP installation in order to use the Unity Desktop interface natively…

If you are ready, let’s see if the installation and usage process has changed a lot or not for Ubuntu 16.10....

Standard XRDP installation on Ubuntu 16.10

Assumptions

For this post, we have make some assumptions.

  • Ubuntu 16.10 (Final Release version) is used
  • Installation is performed on fresh new install
  • The Mate-desktop will be installed on the machine (as alternative desktop environment)
  • We will configure our system to match on localized version (i.e. we are using a Belgian french keyboard)
  • No additional configuration is needed to reconnect to the same session if you are using the latest version of the xrdp package found in the Ubuntu Repository

Installation Process 

Step 1 – Install XRDP Package from Ubuntu Repository

A standard installation for us means that we will be using the xrdp package available within the Ubuntu repository. To install the xrdp software from Ubuntu repository, you will need to issue the following command in a terminal.

sudo apt-get install xrdp -y 

Because of the sudo command, you will be prompted for a password. After entering your password, your xrdp installation will start. Wait for completion 

xrdp_test_2

Click on Picture for Better Resolution

Based on our previous post, by running the command, we can check the version of the xrdp package

xrdp -v

We can see that indeed the xRDP package version available in Ubuntu 16.10 is the version 0.9.0 which replace the version 0.6.x

01.xrdp_test_3

Click on Picture for Better Resolution

In the past, when installing the xrdp package (version 0.6-x), the vnc4server software was installed as well.  With this new package, if you check for any vncserver running, we can see that none of them are present or installed on the system.

xrdp_test_1

Click on Picture for Better Resolution

Step 2 – Install an alternative Desktop 

At this stage of the installation, you can try to perform a remote connection to your Ubuntu machine.  Two things might happen : either you are disconnected after a few seconds or you will see a grey or black screen displayed. The workaround to this problem is to install an alternate Desktop that will be used during the remote session. 

Note : 

In this post, we have demonstrated that with Ubuntu 16.04, it is possible to perform a remote session against the Unity Desktop directly.   In a coming post, we will see if this is still an option….

Our preferred desktop alternative is Mate-Desktop.  This post will show you how to install the Mate-Desktop and have it working with the xrdp software solution. To install the Mate-desktop, issue the following command from the Terminal Session

sudo apt-get update

sudo apt-get install mate-core mate-desktop-environment mate-notification-daemon

 

Note :

Desktop interface such as XFCE, LXDE,LXQT, KDE, Gnome Classic  are all potential candidates. Installation of such candidates have been describes in our previous posts. 

 

Step 3 – Configuring xRDP to use your desktop environment

At this stage, we need to configure our system in order to tell xrdp that an alternate desktop needs to be used.  In our case, we have to tell xrdp that we want to use Mate-Desktop as alternate desktop. In order to configure this settings for all users on the system, we will need to modify the following file /etc/xrdp/startwm.sh

Issue the following command in your terminal 

sudo gedit /etc/xrdp/startwm.sh

The file opens and look like this

xrdp_DE_1

Click on Picture for Better Resolution

 

You will need to comment the last two lines and add at the bottom the command mate-session 

Xrdp_DE_2

Click on Picture for Better Resolution

Save the file 

 

Step 4 – Configuring xRDP Keyboard 

Another thing that seems to be changed is the keyboard layout used in the xRDP login screen.  In the past, the keyboard layout was set by default to en-us layout.  With the package 0.9.0, the login screen seems to detect the keyboard layout installed on the system.  

However, inside the remote session, the English layout keyboard is still defined as default and not changed automatically. To try to set the proper keyboard layout within your remote session, you can execute the following commands

# Set keyboard layout in xrdp sessions 
cd /etc/xrdp 
test=$(setxkbmap -query | awk -F":" '/layout/ {print $2}') 
echo "your current keyboard layout is.." $test
setxkbmap -layout $test 
sudo cp /etc/xrdp/km-0409.ini /etc/xrdp/km-0409.ini.bak 
sudo xrdp-genkeymap km-0409.ini

Step 5 – Reconnect to the Same Session

Since Ubuntu 14.10, the xrdp package available in the repository fixes a long time issue related to the fact that users could not reconnect to the same session.  If you are using the package xrdp 0.6.1-1 or later, you do not need to perform any customization, you will reconnect automatically to the same session.

Test your connection 

At this stage, you should be ready to test your connection.  Get the ip address or the hostname of your ubuntu machine and fire up your mstsc.exe client on a windows machine. 

Xrdp_DE_3

Click on Picture for Better Resolution

In the xRDP Login page, provide your credentials and accept the default settings presented to your for the session choice.  You should see the option sesman-xorg-xrdp

02.xrdp_test_4

Click on Picture for Better Resolution

Within your remote session, you might see this error popup. Press Close and proceed.  

XRDP_DE4

Click on Picture for Better Resolution

At this stage, if everything is fine, you should see your Mate-desktop through the remote session 

Xrdp_DE_5

Click on Picture for Better Resolution

This version of xrdp is supposed to support drive redirection and clipboard function.  If you open your home folder, you should see something like this 

XRDP_DE6

Click on Picture for Better Resolution

You do not see any drive redirection by default.  You have to display the hidden files and folders in nautilus (press ctrl + H).  After displaying the hidden files, you can see that there is a new folder called .thinclient_drives.  If you click on it, you will see the drive redirected to your remote session 

XRDP_DE7

Click on Picture for Better Resolution

We have played a little bit with it and we have to say that the performance are not good and the feature does not seem to be really stable. We will further investigate on this topic later on….

 

Final Notes

This is it for this post ! All in all the old process to have xrdp installed and working on Ubuntu is still valid. If you install an alternate desktop with xRDP software package, you will be able to perform remote sessioins to your Ubuntu machine using RDP protocol. 

In Ubuntu 16.10, the package version of xrdp has been upgraded to the version 0.9.0 which brings some changes but also bring some improvements.  First improvement is that you do not need to rely anymore on vnc server package. connection is handled by the xorg-rdp new driver made available by the team behind xrdp.  The other improvement is that the drive redirection and clipboard functionalities are available out of the box.  However, these features does not seems to be working really well. copying small files can take ages.   

In the next post, we will try to come up with a process that could allow a user to connect directly to the Unity Desktop avoiding the installation of alternate desktop

 

Till next time

See ya

19 thoughts on “XRDP – How to Install XRDP on Ubuntu 16.10 – The easy way !

  1. @Franz,

    Thank you for the visit and the positive feedback
    It’s always nice to see that our work can be useful at the end 🙂
    Till next time
    See ya

  2. Thanks for the article. I was able to get this to work on Win 10 + Ubuntu 16.10 Hyper-V VM setup. Unfortunately, after I rebooted my Linux VM I was no longer able to remotely login to it. I can get to the xRDP Login page and provide the credentials but it stays hung on the login screen. Any ideas?

  3. @AJ,

    We did not encounter this issue…I’m assuming that you are using the sesma-xorgxrdp option in the xrdp login screen
    are they any errors in the log files (~/.xsession-errors) that can help troubleshoot the issue
    have you tried to restart the xrdp service ?

    Till next time
    See ya

  4. @Griffon @AJ
    I ‘ve encountered exactly the same problem , and I checked ~/.xsession-errors file , it’s empty.
    and I done restart the the xrdp service and still no luck .
    Please advice.

  5. @Ticols Ford,

    Happy to see that by browsing our blog, you have find the solution..in the article “XRDP – How to install XRDP on Ubuntu 16.04 – Easy Way”

    Till next time
    See ya

  6. Definitely broken with xfce desktop, I specified ‘xfce4-session’ instead of the ‘mate-session’ as per your instruction. This had been working since forever, right up until 16.10 and the new XRDP version. Now I always ended up with just a light blue window and a black mouse pointer.

  7. @Hai Vu,

    xfce desktop should be working as well on Ubuntu 16.10. We will try to post some additional posts/information about that
    What do you see in your xsession-errors file ? did you create a .xsession file or did you update the startwm.sh file ? How does it look like ?

    Till next time
    See ya

  8. @Griffon,
    The xsession-errors file contains a bunch of errors, though these are generated before I attempted to connect to the XRDP session, remotely. I assume they were generated at system startup. There is a lot of stuff in this file, here’s the last bits in it:

    (xfsettingsd:15968): xfsettingsd-CRITICAL **: No RANDR extension found in display :1.0. Display settings won’t be applied.
    Xlib: extension “XInputExtension” missing on display “:1.0”.

    (xfsettingsd:15968): xfsettingsd-CRITICAL **: XI is not present.

    (xfsettingsd:15968): xfsettingsd-CRITICAL **: Failed to initialize the Xkb extension.

    (xfsettingsd:15968): xfsettingsd-CRITICAL **: Failed to initialize the Accessibility extension.

    (xfsettingsd:15968): GLib-CRITICAL **: g_hash_table_destroy: assertion ‘hash_table != NULL’ failed

    (xfsettingsd:15968): GLib-GObject-CRITICAL **: object XklEngine 0x81659100 finalized while still in-construction

    (xfsettingsd:15968): GLib-GObject-CRITICAL **: Custom constructor for class XklEngine returned NULL (which is invalid). Please use GInitable instead.
    Failure: Module initialization failed
    Xlib: extension “RANDR” missing on display “:1.0”.
    Xlib: extension “RANDR” missing on display “:1.0”.

    (nm-applet:15997): Gdk-CRITICAL **: gdk_window_thaw_toplevel_updates: assertion ‘window->update_and_descendants_freeze_count > 0’ failed
    Xlib: extension “XInputExtension” missing on display “:1.0”.
    Xlib: extension “XInputExtension” missing on display “:1.0”.
    Xlib: extension “XInputExtension” missing on display “:1.0”.

    (evolution-alarm-notify:16000): evolution-alarm-notify-WARNING **: alarm.c:253: Requested removal of nonexistent alarm!

    (evolution-alarm-notify:16000): evolution-alarm-notify-WARNING **: alarm.c:253: Requested removal of nonexistent alarm!
    Client is not authorized to connect to Serverthunar-volman: Cannot open display: .
    Client is not authorized to connect to Serverthunar-volman: Cannot open display: .
    Client is not authorized to connect to Serverthunar-volman: Cannot open display: .
    Client is not authorized to connect to Serverthunar-volman: Cannot open display: .
    Client is not authorized to connect to Serverthunar-volman: Cannot open display: .

    (xfdesktop:15966): libxfce4ui-WARNING **: ICE I/O Error

    (xfdesktop:15966): libxfce4ui-WARNING **: Disconnected from session manager.
    xfwm4: Fatal IO error 4 (Interrupted system call) on X server :1.0.
    xfdesktop: Fatal IO error 25 (Inappropriate ioctl for device) on X server :1.0.

  9. @Griffon
    I kept a journal of everything I do, and here is the bit on XRDP on Ubuntu, which used to work until the advent of 16.10:

    “…
    XRDP will fail to start on system reboot (at least up to 9.04, I think this may have been fixed in 9.10), leaving behind an artifact in /var/run/xrdp which must be cleaned up before xrdp can be restarted.
    XRDP will not work with Unity, so you will need to install XFCE in your latest Ubuntu distro.
    In pre-16.04, you will need to add the file ~/.xsession with a single line that says: “xfce4-session” for XRDP to work properly with XFCE. However, starting with 16.04, this was broken, you will now need to ALSO add the line with “xfce4-session” just before the one with “. /etc/X11/Xsession”, in the file /etc/xrdp/startwm.sh. Here’s mine:

    #!/bin/sh

    if [ -r /etc/default/locale ]; then
    . /etc/default/locale
    export LANG LANGUAGE
    fi

    . /etc/environment
    . /etc/profile
    xfce4-session
    . /etc/X11/Xsession
    …”

  10. @Hai Vu,

    I do not understand the trouble you are having. We have performed a fresh install of Ubuntu 16.10, installed xfce4 as alternate desktop (even if you could simply use Unity Desktop in this version !), updated the /etc/xrdp/startwm.sh accordingly and perform the remote desktop connection. This was that simple and this is working really nicely

    What have you done on your system ?
    is this a fresh install or upgrade installation
    which version of xrdp is installed (xrdp -v -> result should be either 0.6.x or 0.9.0)

    if 0.9.0 is installed in the XRDP Login box, you have to choose the option Xorg for the session manager
    if you have 0.6.x installed, maybe remove it and remove the vncserver you were using and perform the install again using the ubuntu xrdp package from Ubuntu repository which should be 0.9.0

    Finally, in the /etc/xrdp/startwm.sh (if xrdp version 0.9.0 is installed), you will need to comment at the end of the file 2 lines and add your xfce4-session info
    the file should look like

    ….
    #test -x (……)
    #exec /bin/sh (…)
    EXPORT PULSE_SERVER (…..)
    xfce4-session

    Hope this help
    Till next time
    See ya

  11. Seems like I am not able to set a higher resolution than 1600×1200. Otherwise the screen stays blank.
    Any idea how to solve this?

  12. @Stern,

    Do not have an idea about that…the biggest screen resolution I can use is 1440×900 and I do not have the problem….
    Check that your rdp client settings are set correctly in term of color depth (try the smallest color and give it a try)…
    For the rest, do not really know…We would need to test and check if there is indeed an issue….

    Hope this help
    Till next time
    See ya

  13. Hi Griffon, I still have an issue with the keyboard. In the meantime I even re-setup the complete Ubuntu 16.10 installation and thoroughly followed your description above (using v 0.9.0) on Ubuntu 16.10 (Linux ThinkPad 4.8.0-37-generic #39-Ubuntu SMP Thu Jan 26 02:27:07 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux) I continue to see the following warning: [20170204-22:23:17] [WARN ] local keymap file for 0x0409 found and doesn’t match built in keymap, using local keymap file. Behavior is: if I use “Remmina” from within Ubuntu and connect to itself, all keys work nicely. If I connect from an iPad (current OS) or even Windows 10 using rdp client no key works but Enter. I tried you suggestion sudo xrdp-genkeymap km-0409.ini and even to use km-0407.ini instead and next copying 0407 over 0409, nothing changed anything. By the way I am using a German keyboard layout:

    xkb_keymap {
    xkb_keycodes { include “evdev+aliases(qwertz)” };
    xkb_types { include “complete” };
    xkb_compat { include “complete” };
    xkb_symbols { include “pc+de+inet(evdev)” };
    xkb_geometry { include “pc(pc105)” };
    };

    Do you have an idea? Thanks a lot for your support.

  14. Adding: Followed your suggestions on http://c-nergy.be/blog/?p=3858 and created a local and remote dump using xmodmap -pk. Remote was very tricky since keys only work if I press the onscreen Windows key and the key, so +x creates an x and onscreen Shift key + key creates a capital letter. The space bar does not work though, so I had to fiddle around to copy a space within another app. The diff (diff RemoteConsole.txt Consolekblayout.txt) created the following results (apologies for the long post):
    1c1
    There are 7 KeySyms per KeyCode; KeyCodes range from 8 to 255.
    6,60c6,60
    < 8 0xff7e (Mode_switch) 0x0000 (NoSymbol) 0xff7e (Mode_switch) 0x0000 (NoSymbol)0xff7e (Mode_switch)
    < 9 0xff1b (Escape) 0x0000 (NoSymbol) 0xff1b (Escape) 0x0000 (NoSymbol) 0xff1b (Escape)
    < 10 0x0031 (1) 0x0021 (exclam) 0x0031 (1) 0x0021 (exclam) 0x0031 (1) 0x0021 (exclam)
    < 11 0x0032 (2) 0x0040 (at) 0x0032 (2) 0x0040 (at) 0x0032 (2) 0x0040 (at)
    < 12 0x0033 (3) 0x0023 (numbersign) 0x0033 (3) 0x0023 (numbersign) 0x0033 (3) 0x0023 (numbersign)
    < 13 0x0034 (4) 0x0024 (dollar) 0x0034 (4) 0x0024 (dollar) 0x0034 (4) 0x0024 (dollar)
    < 14 0x0035 (5) 0x0025 (percent) 0x0035 (5) 0x0025 (percent) 0x0035 (5) 0x0025 (percent)
    < 15 0x0036 (6) 0x005e (asciicircum) 0x0036 (6) 0x005e (asciicircum) 0x0036 (6) 0x005e (asciicircum)
    < 16 0x0037 (7) 0x0026 (ampersand) 0x0037 (7) 0x0026 (ampersand) 0x0037 (7) 0x0026 (ampersand)
    < 17 0x0038 (8) 0x002a (asterisk) 0x0038 (8) 0x002a (asterisk) 0x0038 (8) 0x002a (asterisk)
    < 18 0x0039 (9) 0x0028 (parenleft) 0x0039 (9) 0x0028 (parenleft) 0x0039 (9) 0x0028 (parenleft)
    < 19 0x0030 (0) 0x0029 (parenright) 0x0030 (0) 0x0029 (parenright) 0x0030 (0) 0x0029 (parenright)
    < 20 0x002d (minus) 0x005f (underscore) 0x002d (minus) 0x005f (underscore) 0x002d (minus) 0x005f (underscore)
    < 21 0x003d (equal) 0x002b (plus) 0x003d (equal) 0x002b (plus) 0x003d (equal) 0x002b (plus)
    < 22 0xff08 (BackSpace) 0xff08 (BackSpace) 0xff08 (BackSpace) 0xff08 (BackSpace) 0xff08 (BackSpace) 0xff08 (BackSpace)
    < 23 0xff09 (Tab) 0xfe20 (ISO_Left_Tab) 0xff09 (Tab) 0xfe20 (ISO_Left_Tab) 0xff09 (Tab) 0xfe20 (ISO_Left_Tab)
    < 24 0x0071 (q) 0x0051 (Q) 0x0071 (q) 0x0051 (Q) 0x0071 (q) 0x0051 (Q)
    < 25 0x0077 (w) 0x0057 (W) 0x0077 (w) 0x0057 (W) 0x0077 (w) 0x0057 (W)
    < 26 0x0065 (e) 0x0045 (E) 0x0065 (e) 0x0045 (E) 0x0065 (e) 0x0045 (E)
    < 27 0x0072 (r) 0x0052 (R) 0x0072 (r) 0x0052 (R) 0x0072 (r) 0x0052 (R)
    < 28 0x0074 (t) 0x0054 (T) 0x0074 (t) 0x0054 (T) 0x0074 (t) 0x0054 (T)
    < 29 0x0079 (y) 0x0059 (Y) 0x0079 (y) 0x0059 (Y) 0x0079 (y) 0x0059 (Y)
    < 30 0x0075 (u) 0x0055 (U) 0x0075 (u) 0x0055 (U) 0x0075 (u) 0x0055 (U)
    < 31 0x0069 (i) 0x0049 (I) 0x0069 (i) 0x0049 (I) 0x0069 (i) 0x0049 (I)
    < 32 0x006f (o) 0x004f (O) 0x006f (o) 0x004f (O) 0x006f (o) 0x004f (O)
    < 33 0x0070 (p) 0x0050 (P) 0x0070 (p) 0x0050 (P) 0x0070 (p) 0x0050 (P)
    < 34 0x005b (bracketleft) 0x007b (braceleft) 0x005b (bracketleft) 0x007b (braceleft) 0x005b (bracketleft) 0x007b (braceleft)
    < 35 0x005d (bracketright) 0x007d (braceright) 0x005d (bracketright) 0x007d (braceright) 0x005d (bracketright) 0x007d (braceright)
    < 36 0xff0d (Return) 0x0000 (NoSymbol) 0xff0d (Return) 0x0000 (NoSymbol) 0xff0d (Return)
    < 37 0xffe3 (Control_L) 0x0000 (NoSymbol) 0xffe3 (Control_L) 0x0000 (NoSymbol)0xffe3 (Control_L)
    < 38 0x0061 (a) 0x0041 (A) 0x0061 (a) 0x0041 (A) 0x0061 (a) 0x0041 (A)
    < 39 0x0073 (s) 0x0053 (S) 0x0073 (s) 0x0053 (S) 0x0073 (s) 0x0053 (S)
    < 40 0x0064 (d) 0x0044 (D) 0x0064 (d) 0x0044 (D) 0x0064 (d) 0x0044 (D)
    < 41 0x0066 (f) 0x0046 (F) 0x0066 (f) 0x0046 (F) 0x0066 (f) 0x0046 (F)
    < 42 0x0067 (g) 0x0047 (G) 0x0067 (g) 0x0047 (G) 0x0067 (g) 0x0047 (G)
    < 43 0x0068 (h) 0x0048 (H) 0x0068 (h) 0x0048 (H) 0x0068 (h) 0x0048 (H)
    < 44 0x006a (j) 0x004a (J) 0x006a (j) 0x004a (J) 0x006a (j) 0x004a (J)
    < 45 0x006b (k) 0x004b (K) 0x006b (k) 0x004b (K) 0x006b (k) 0x004b (K)
    < 46 0x006c (l) 0x004c (L) 0x006c (l) 0x004c (L) 0x006c (l) 0x004c (L)
    < 47 0x003b (semicolon) 0x003a (colon) 0x003b (semicolon) 0x003a (colon) 0x003b (semicolon) 0x003a (colon)
    < 48 0x0027 (apostrophe) 0x0022 (quotedbl) 0x0027 (apostrophe) 0x0022 (quotedbl)0x0027 (apostrophe) 0x0022 (quotedbl)
    < 49 0x0060 (grave) 0x007e (asciitilde) 0x0060 (grave) 0x007e (asciitilde) 0x0060 (grave) 0x007e (asciitilde)
    < 50 0xffe1 (Shift_L) 0x0000 (NoSymbol) 0xffe1 (Shift_L) 0x0000 (NoSymbol)0xffe1 (Shift_L)
    < 51 0x005c (backslash) 0x007c (bar) 0x005c (backslash) 0x007c (bar) 0x005c (backslash) 0x007c (bar)
    < 52 0x007a (z) 0x005a (Z) 0x007a (z) 0x005a (Z) 0x007a (z) 0x005a (Z)
    < 53 0x0078 (x) 0x0058 (X) 0x0078 (x) 0x0058 (X) 0x0078 (x) 0x0058 (X)
    < 54 0x0063 (c) 0x0043 (C) 0x0063 (c) 0x0043 (C) 0x0063 (c) 0x0043 (C)
    < 55 0x0076 (v) 0x0056 (V) 0x0076 (v) 0x0056 (V) 0x0076 (v) 0x0056 (V)
    < 56 0x0062 (b) 0x0042 (B) 0x0062 (b) 0x0042 (B) 0x0062 (b) 0x0042 (B)
    < 57 0x006e (n) 0x004e (N) 0x006e (n) 0x004e (N) 0x006e (n) 0x004e (N)
    < 58 0x006d (m) 0x004d (M) 0x006d (m) 0x004d (M) 0x006d (m) 0x004d (M)
    < 59 0x002c (comma) 0x003c (less) 0x002c (comma) 0x003c (less) 0x002c (comma) 0x003c (less)
    < 60 0x002e (period) 0x003e (greater) 0x002e (period) 0x003e (greater) 0x002e (period) 0x003e (greater)
    < 61 0x002f (slash) 0x003f (question) 0x002f (slash) 0x003f (question) 0x002f (slash) 0x003f (question)
    8
    > 9 0xff1b (Escape) 0x0000 (NoSymbol) 0xff1b (Escape)
    > 10 0x0031 (1) 0x0021 (exclam) 0x0031 (1) 0x0021 (exclam) 0x00b9 (onesuperior) 0x00a1 (exclamdown) 0x00b9 (onesuperior)
    > 11 0x0032 (2) 0x0022 (quotedbl) 0x0032 (2) 0x0022 (quotedbl) 0x00b2 (twosuperior) 0x0ac3 (oneeighth) 0x00b2 (twosuperior)
    > 12 0x0033 (3) 0x00a7 (section) 0x0033 (3) 0x00a7 (section) 0x00b3 (threesuperior) 0x00a3 (sterling) 0x00b3 (threesuperior)
    > 13 0x0034 (4) 0x0024 (dollar) 0x0034 (4) 0x0024 (dollar) 0x00bc (onequarter) 0x00a4 (currency) 0x00bc (onequarter)
    > 14 0x0035 (5) 0x0025 (percent) 0x0035 (5) 0x0025 (percent) 0x00bd (onehalf) 0x0ac4 (threeeighths) 0x00bd (onehalf)
    > 15 0x0036 (6) 0x0026 (ampersand) 0x0036 (6) 0x0026 (ampersand) 0x00ac (notsign) 0x0ac5 (fiveeighths) 0x00ac (notsign)
    > 16 0x0037 (7) 0x002f (slash) 0x0037 (7) 0x002f (slash) 0x007b (braceleft) 0x0ac6 (seveneighths) 0x007b (braceleft)
    > 17 0x0038 (8) 0x0028 (parenleft) 0x0038 (8) 0x0028 (parenleft) 0x005b (bracketleft) 0x0ac9 (trademark) 0x005b (bracketleft)
    > 18 0x0039 (9) 0x0029 (parenright) 0x0039 (9) 0x0029 (parenright) 0x005d (bracketright) 0x00b1 (plusminus) 0x005d (bracketright)
    > 19 0x0030 (0) 0x003d (equal) 0x0030 (0) 0x003d (equal) 0x007d (braceright) 0x00b0 (degree) 0x007d (braceright)
    > 20 0x00df (ssharp) 0x003f (question) 0x00df (ssharp) 0x003f (question) 0x005c (backslash) 0x00bf (questiondown) 0x1001e9e (U1E9E)
    > 21 0xfe51 (dead_acute) 0xfe50 (dead_grave) 0xfe51 (dead_acute) 0xfe50 (dead_grave) 0xfe5b (dead_cedilla) 0xfe5c (dead_ogonek) 0xfe5b (dead_cedilla)
    > 22 0xff08 (BackSpace) 0xff08 (BackSpace) 0xff08 (BackSpace) 0xff08 (BackSpace)
    > 23 0xff09 (Tab) 0xfe20 (ISO_Left_Tab) 0xff09 (Tab) 0xfe20 (ISO_Left_Tab)
    > 24 0x0071 (q) 0x0051 (Q) 0x0071 (q) 0x0051 (Q) 0x0040 (at) 0x07d9 (Greek_OMEGA) 0x0040 (at)
    > 25 0x0077 (w) 0x0057 (W) 0x0077 (w) 0x0057 (W) 0x01b3 (lstroke) 0x01a3 (Lstroke) 0x01b3 (lstroke)
    > 26 0x0065 (e) 0x0045 (E) 0x0065 (e) 0x0045 (E) 0x20ac (EuroSign) 0x20ac (EuroSign) 0x20ac (EuroSign)
    > 27 0x0072 (r) 0x0052 (R) 0x0072 (r) 0x0052 (R) 0x00b6 (paragraph) 0x00ae (registered) 0x00b6 (paragraph)
    > 28 0x0074 (t) 0x0054 (T) 0x0074 (t) 0x0054 (T) 0x03bc (tslash) 0x03ac (Tslash) 0x03bc (tslash)
    > 29 0x007a (z) 0x005a (Z) 0x007a (z) 0x005a (Z) 0x08fb (leftarrow) 0x00a5 (yen) 0x08fb (leftarrow)
    > 30 0x0075 (u) 0x0055 (U) 0x0075 (u) 0x0055 (U) 0x08fe (downarrow) 0x08fc (uparrow) 0x08fe (downarrow)
    > 31 0x0069 (i) 0x0049 (I) 0x0069 (i) 0x0049 (I) 0x08fd (rightarrow) 0x02b9 (idotless) 0x08fd (rightarrow)
    > 32 0x006f (o) 0x004f (O) 0x006f (o) 0x004f (O) 0x00f8 (oslash) 0x00d8 (Oslash) 0x00f8 (oslash)
    > 33 0x0070 (p) 0x0050 (P) 0x0070 (p) 0x0050 (P) 0x00fe (thorn) 0x00de (THORN) 0x00fe (thorn)
    > 34 0x00fc (udiaeresis) 0x00dc (Udiaeresis) 0x00fc (udiaeresis) 0x00dc (Udiaeresis) 0xfe57 (dead_diaeresis) 0xfe58 (dead_abovering) 0xfe57 (dead_diaeresis)
    > 35 0x002b (plus) 0x002a (asterisk) 0x002b (plus) 0x002a (asterisk) 0x007e (asciitilde) 0x00af (macron) 0x007e (asciitilde)
    > 36 0xff0d (Return) 0x0000 (NoSymbol) 0xff0d (Return)
    > 37 0xffe3 (Control_L) 0x0000 (NoSymbol) 0xffe3 (Control_L)
    > 38 0x0061 (a) 0x0041 (A) 0x0061 (a) 0x0041 (A) 0x00e6 (ae) 0x00c6 (AE) 0x00e6 (ae)
    > 39 0x0073 (s) 0x0053 (S) 0x0073 (s) 0x0053 (S) 0x100017f (U017F) 0x1001e9e (U1E9E) 0x100017f (U017F)
    > 40 0x0064 (d) 0x0044 (D) 0x0064 (d) 0x0044 (D) 0x00f0 (eth) 0x00d0 (ETH) 0x00f0 (eth)
    > 41 0x0066 (f) 0x0046 (F) 0x0066 (f) 0x0046 (F) 0x01f0 (dstroke) 0x00aa (ordfeminine) 0x01f0 (dstroke)
    > 42 0x0067 (g) 0x0047 (G) 0x0067 (g) 0x0047 (G) 0x03bf (eng) 0x03bd (ENG) 0x03bf (eng)
    > 43 0x0068 (h) 0x0048 (H) 0x0068 (h) 0x0048 (H) 0x02b1 (hstroke) 0x02a1 (Hstroke) 0x02b1 (hstroke)
    > 44 0x006a (j) 0x004a (J) 0x006a (j) 0x004a (J) 0xfe60 (dead_belowdot) 0xfe56 (dead_abovedot) 0xfe60 (dead_belowdot)
    > 45 0x006b (k) 0x004b (K) 0x006b (k) 0x004b (K) 0x03a2 (kra) 0x0026 (ampersand) 0x03a2 (kra)
    > 46 0x006c (l) 0x004c (L) 0x006c (l) 0x004c (L) 0x01b3 (lstroke) 0x01a3 (Lstroke) 0x01b3 (lstroke)
    > 47 0x00f6 (odiaeresis) 0x00d6 (Odiaeresis) 0x00f6 (odiaeresis) 0x00d6 (Odiaeresis) 0xfe59 (dead_doubleacute) 0xfe60 (dead_belowdot) 0xfe59 (dead_doubleacute)
    > 48 0x00e4 (adiaeresis) 0x00c4 (Adiaeresis) 0x00e4 (adiaeresis) 0x00c4 (Adiaeresis) 0xfe52 (dead_circumflex) 0xfe5a (dead_caron) 0xfe52 (dead_circumflex)
    > 49 0xfe52 (dead_circumflex) 0x00b0 (degree) 0xfe52 (dead_circumflex) 0x00b0 (degree) 0x1002032 (U2032) 0x1002033 (U2033) 0x1002032 (U2032)
    > 50 0xffe1 (Shift_L) 0x0000 (NoSymbol) 0xffe1 (Shift_L)
    > 51 0x0023 (numbersign) 0x0027 (apostrophe) 0x0023 (numbersign) 0x0027 (apostrophe) 0x0ad1 (rightsinglequotemark) 0xfe55 (dead_breve) 0x0ad1 (rightsinglequotemark)
    > 52 0x0079 (y) 0x0059 (Y) 0x0079 (y) 0x0059 (Y) 0x00bb (guillemotright) 0x100203a (U203A) 0x00bb (guillemotright)
    > 53 0x0078 (x) 0x0058 (X) 0x0078 (x) 0x0058 (X) 0x00ab (guillemotleft) 0x1002039 (U2039) 0x00ab (guillemotleft)
    > 54 0x0063 (c) 0x0043 (C) 0x0063 (c) 0x0043 (C) 0x00a2 (cent) 0x00a9 (copyright) 0x00a2 (cent)
    > 55 0x0076 (v) 0x0056 (V) 0x0076 (v) 0x0056 (V) 0x0afe (doublelowquotemark) 0x0afd (singlelowquotemark) 0x0afe (doublelowquotemark)
    > 56 0x0062 (b) 0x0042 (B) 0x0062 (b) 0x0042 (B) 0x0ad2 (leftdoublequotemark) 0x0ad0 (leftsinglequotemark) 0x0ad2 (leftdoublequotemark)
    > 57 0x006e (n) 0x004e (N) 0x006e (n) 0x004e (N) 0x0ad3 (rightdoublequotemark) 0x0ad1 (rightsinglequotemark) 0x0ad3 (rightdoublequotemark)
    > 58 0x006d (m) 0x004d (M) 0x006d (m) 0x004d (M) 0x00b5 (mu) 0x00ba (masculine) 0x00b5 (mu)
    > 59 0x002c (comma) 0x003b (semicolon) 0x002c (comma) 0x003b (semicolon) 0x00b7 (periodcentered) 0x00d7 (multiply) 0x00b7 (periodcentered)
    > 60 0x002e (period) 0x003a (colon) 0x002e (period) 0x003a (colon) 0x1002026 (U2026) 0x00f7 (division) 0x1002026 (U2026)
    > 61 0x002d (minus) 0x005f (underscore) 0x002d (minus) 0x005f (underscore) 0x0aaa (endash) 0x0aa9 (emdash) 0x0aaa (endash)
    > 62 0xffe2 (Shift_R) 0x0000 (NoSymbol) 0xffe2 (Shift_R)
    62,64c62,64
    < 64 0xffe9 (Alt_L) 0xffe7 (Meta_L) 0xffe9 (Alt_L) 0xffe7 (Meta_L) 0xffe9 (Alt_L) 0xffe7 (Meta_L)
    < 65 0x0020 (space) 0x0000 (NoSymbol) 0x0020 (space) 0x0000 (NoSymbol) 0x0020 (space)
    64 0xffe9 (Alt_L) 0xffe7 (Meta_L) 0xffe9 (Alt_L) 0xffe7 (Meta_L)
    > 65 0x0020 (space) 0x0000 (NoSymbol) 0x0020 (space)
    > 66 0xffe5 (Caps_Lock) 0x0000 (NoSymbol) 0xffe5 (Caps_Lock)
    75,79c75,79
    < 77 0xff7f (Num_Lock) 0x0000 (NoSymbol) 0xff7f (Num_Lock) 0x0000 (NoSymbol)0xff7f (Num_Lock)
    < 78 0xff14 (Scroll_Lock) 0x0000 (NoSymbol) 0xff14 (Scroll_Lock) 0x0000 (NoSymbol)0xff14 (Scroll_Lock)
    < 79 0xff95 (KP_Home) 0xffb7 (KP_7) 0xff95 (KP_Home) 0xffb7 (KP_7) 0xff95 (KP_Home) 0xffb7 (KP_7)
    < 80 0xff97 (KP_Up) 0xffb8 (KP_8) 0xff97 (KP_Up) 0xffb8 (KP_8) 0xff97 (KP_Up) 0xffb8 (KP_8)
    77 0xff7f (Num_Lock) 0x0000 (NoSymbol) 0xff7f (Num_Lock)
    > 78 0xff14 (Scroll_Lock) 0x0000 (NoSymbol) 0xff14 (Scroll_Lock)
    > 79 0xff95 (KP_Home) 0xffb7 (KP_7) 0xff95 (KP_Home) 0xffb7 (KP_7)
    > 80 0xff97 (KP_Up) 0xffb8 (KP_8) 0xff97 (KP_Up) 0xffb8 (KP_8)
    > 81 0xff9a (KP_Prior) 0xffb9 (KP_9) 0xff9a (KP_Prior) 0xffb9 (KP_9)
    81,83c81,83
    < 83 0xff96 (KP_Left) 0xffb4 (KP_4) 0xff96 (KP_Left) 0xffb4 (KP_4) 0xff96 (KP_Left) 0xffb4 (KP_4)
    < 84 0xff9d (KP_Begin) 0xffb5 (KP_5) 0xff9d (KP_Begin) 0xffb5 (KP_5) 0xff9d (KP_Begin) 0xffb5 (KP_5)
    83 0xff96 (KP_Left) 0xffb4 (KP_4) 0xff96 (KP_Left) 0xffb4 (KP_4)
    > 84 0xff9d (KP_Begin) 0xffb5 (KP_5) 0xff9d (KP_Begin) 0xffb5 (KP_5)
    > 85 0xff98 (KP_Right) 0xffb6 (KP_6) 0xff98 (KP_Right) 0xffb6 (KP_6)
    85,90c85,90
    < 87 0xff9c (KP_End) 0xffb1 (KP_1) 0xff9c (KP_End) 0xffb1 (KP_1) 0xff9c (KP_End) 0xffb1 (KP_1)
    < 88 0xff99 (KP_Down) 0xffb2 (KP_2) 0xff99 (KP_Down) 0xffb2 (KP_2) 0xff99 (KP_Down) 0xffb2 (KP_2)
    < 89 0xff9b (KP_Next) 0xffb3 (KP_3) 0xff9b (KP_Next) 0xffb3 (KP_3) 0xff9b (KP_Next) 0xffb3 (KP_3)
    < 90 0xff9e (KP_Insert) 0xffb0 (KP_0) 0xff9e (KP_Insert) 0xffb0 (KP_0) 0xff9e (KP_Insert) 0xffb0 (KP_0)
    < 91 0xff9f (KP_Delete) 0xffae (KP_Decimal) 0xff9f (KP_Delete) 0xffae (KP_Decimal) 0xff9f (KP_Delete) 0xffae (KP_Decimal)
    87 0xff9c (KP_End) 0xffb1 (KP_1) 0xff9c (KP_End) 0xffb1 (KP_1)
    > 88 0xff99 (KP_Down) 0xffb2 (KP_2) 0xff99 (KP_Down) 0xffb2 (KP_2)
    > 89 0xff9b (KP_Next) 0xffb3 (KP_3) 0xff9b (KP_Next) 0xffb3 (KP_3)
    > 90 0xff9e (KP_Insert) 0xffb0 (KP_0) 0xff9e (KP_Insert) 0xffb0 (KP_0)
    > 91 0xff9f (KP_Delete) 0xffac (KP_Separator) 0xff9f (KP_Delete) 0xffac (KP_Separator)
    > 92 0xfe03 (ISO_Level3_Shift) 0x0000 (NoSymbol) 0xfe03 (ISO_Level3_Shift)
    95,117c95,117
    < 97 0xff50 (Home) 0x0000 (NoSymbol) 0xff50 (Home) 0x0000 (NoSymbol) 0xff50 (Home)
    < 98 0xff52 (Up) 0x0000 (NoSymbol) 0xff52 (Up) 0x0000 (NoSymbol) 0xff52 (Up)
    < 99 0xff55 (Prior) 0x0000 (NoSymbol) 0xff55 (Prior) 0x0000 (NoSymbol) 0xff55 (Prior)
    < 100 0xff51 (Left) 0x0000 (NoSymbol) 0xff51 (Left) 0x0000 (NoSymbol) 0xff51 (Left)
    < 101
    < 102 0xff53 (Right) 0x0000 (NoSymbol) 0xff53 (Right) 0x0000 (NoSymbol) 0xff53 (Right)
    < 103 0xff57 (End) 0x0000 (NoSymbol) 0xff57 (End) 0x0000 (NoSymbol) 0xff57 (End)
    < 104 0xff54 (Down) 0x0000 (NoSymbol) 0xff54 (Down) 0x0000 (NoSymbol) 0xff54 (Down)
    < 105 0xff56 (Next) 0x0000 (NoSymbol) 0xff56 (Next) 0x0000 (NoSymbol) 0xff56 (Next)
    < 106 0xff63 (Insert) 0x0000 (NoSymbol) 0xff63 (Insert) 0x0000 (NoSymbol) 0xff63 (Insert)
    < 107 0xffff (Delete) 0x0000 (NoSymbol) 0xffff (Delete) 0x0000 (NoSymbol) 0xffff (Delete)
    < 108 0xff8d (KP_Enter) 0x0000 (NoSymbol) 0xff8d (KP_Enter) 0x0000 (NoSymbol)0xff8d (KP_Enter)
    < 109 0xffe4 (Control_R) 0x0000 (NoSymbol) 0xffe4 (Control_R) 0x0000 (NoSymbol)0xffe4 (Control_R)
    < 110 0xff13 (Pause) 0xff6b (Break) 0xff13 (Pause) 0xff6b (Break) 0xff13 (Pause) 0xff6b (Break)
    < 111 0xff61 (Print) 0xff15 (Sys_Req) 0xff61 (Print) 0xff15 (Sys_Req) 0xff61 (Print) 0xff15 (Sys_Req)
    < 112 0xffaf (KP_Divide) 0xffaf (KP_Divide) 0xffaf (KP_Divide) 0xffaf (KP_Divide) 0xffaf (KP_Divide) 0xffaf (KP_Divide) 0x1008fe20 (XF86Ungrab)
    < 113 0xffea (Alt_R) 0xffe8 (Meta_R) 0xffea (Alt_R) 0xffe8 (Meta_R) 0xffea (Alt_R) 0xffe8 (Meta_R)
    < 114
    < 115 0xffeb (Super_L) 0x0000 (NoSymbol) 0xffeb (Super_L) 0x0000 (NoSymbol)0xffeb (Super_L)
    < 116 0xffec (Super_R) 0x0000 (NoSymbol) 0xffec (Super_R) 0x0000 (NoSymbol)0xffec (Super_R)
    < 117 0xff67 (Menu) 0x0000 (NoSymbol) 0xff67 (Menu) 0x0000 (NoSymbol) 0xff67 (Menu)
    < 118
    97
    > 98 0xff26 (Katakana) 0x0000 (NoSymbol) 0xff26 (Katakana)
    > 99 0xff25 (Hiragana) 0x0000 (NoSymbol) 0xff25 (Hiragana)
    > 100 0xff23 (Henkan_Mode) 0x0000 (NoSymbol) 0xff23 (Henkan_Mode)
    > 101 0xff27 (Hiragana_Katakana) 0x0000 (NoSymbol) 0xff27 (Hiragana_Katakana)
    > 102 0xff22 (Muhenkan) 0x0000 (NoSymbol) 0xff22 (Muhenkan)
    > 103
    > 104 0xff8d (KP_Enter) 0x0000 (NoSymbol) 0xff8d (KP_Enter)
    > 105 0xffe4 (Control_R) 0x0000 (NoSymbol) 0xffe4 (Control_R)
    > 106 0xffaf (KP_Divide) 0xffaf (KP_Divide) 0xffaf (KP_Divide) 0xffaf (KP_Divide) 0xffaf (KP_Divide) 0xffaf (KP_Divide) 0x1008fe20 (XF86Ungrab)
    > 107 0xff61 (Print) 0xff15 (Sys_Req) 0xff61 (Print) 0xff15 (Sys_Req)
    > 108 0xfe03 (ISO_Level3_Shift) 0x0000 (NoSymbol) 0xfe03 (ISO_Level3_Shift)
    > 109 0xff0a (Linefeed) 0x0000 (NoSymbol) 0xff0a (Linefeed)
    > 110 0xff50 (Home) 0x0000 (NoSymbol) 0xff50 (Home)
    > 111 0xff52 (Up) 0x0000 (NoSymbol) 0xff52 (Up)
    > 112 0xff55 (Prior) 0x0000 (NoSymbol) 0xff55 (Prior)
    > 113 0xff51 (Left) 0x0000 (NoSymbol) 0xff51 (Left)
    > 114 0xff53 (Right) 0x0000 (NoSymbol) 0xff53 (Right)
    > 115 0xff57 (End) 0x0000 (NoSymbol) 0xff57 (End)
    > 116 0xff54 (Down) 0x0000 (NoSymbol) 0xff54 (Down)
    > 117 0xff56 (Next) 0x0000 (NoSymbol) 0xff56 (Next)
    > 118 0xff63 (Insert) 0x0000 (NoSymbol) 0xff63 (Insert)
    > 119 0xffff (Delete) 0x0000 (NoSymbol) 0xffff (Delete)
    119,129c119,129
    < 121
    < 122
    < 123
    < 124 0xfe03 (ISO_Level3_Shift) 0x0000 (NoSymbol) 0xfe03 (ISO_Level3_Shift) 0x0000 (NoSymbol) 0xfe03 (ISO_Level3_Shift)
    < 125 0x0000 (NoSymbol) 0xffe9 (Alt_L) 0x0000 (NoSymbol) 0xffe9 (Alt_L) 0x0000 (NoSymbol) 0xffe9 (Alt_L)
    < 126 0xffbd (KP_Equal) 0x0000 (NoSymbol) 0xffbd (KP_Equal) 0x0000 (NoSymbol)0xffbd (KP_Equal)
    < 127 0x0000 (NoSymbol) 0xffeb (Super_L) 0x0000 (NoSymbol) 0xffeb (Super_L)0x0000 (NoSymbol) 0xffeb (Super_L)
    < 128 0x0000 (NoSymbol) 0xffed (Hyper_L) 0x0000 (NoSymbol) 0xffed (Hyper_L)0x0000 (NoSymbol) 0xffed (Hyper_L)
    < 129
    < 130
    121 0x1008ff12 (XF86AudioMute) 0x0000 (NoSymbol) 0x1008ff12 (XF86AudioMute)
    > 122 0x1008ff11 (XF86AudioLowerVolume) 0x0000 (NoSymbol) 0x1008ff11 (XF86AudioLowerVolume)
    > 123 0x1008ff13 (XF86AudioRaiseVolume) 0x0000 (NoSymbol) 0x1008ff13 (XF86AudioRaiseVolume)
    > 124 0x1008ff2a (XF86PowerOff) 0x0000 (NoSymbol) 0x1008ff2a (XF86PowerOff)
    > 125 0xffbd (KP_Equal) 0x0000 (NoSymbol) 0xffbd (KP_Equal)
    > 126 0x00b1 (plusminus) 0x0000 (NoSymbol) 0x00b1 (plusminus)
    > 127 0xff13 (Pause) 0xff6b (Break) 0xff13 (Pause) 0xff6b (Break)
    > 128 0x1008ff4a (XF86LaunchA) 0x0000 (NoSymbol) 0x1008ff4a (XF86LaunchA)
    > 129 0xffae (KP_Decimal) 0xffae (KP_Decimal) 0xffae (KP_Decimal) 0xffae (KP_Decimal)
    > 130 0xff31 (Hangul) 0x0000 (NoSymbol) 0xff31 (Hangul)
    > 131 0xff34 (Hangul_Hanja) 0x0000 (NoSymbol) 0xff34 (Hangul_Hanja)
    131,146c131,146
    < 133
    < 134 0xffae (KP_Decimal) 0xffae (KP_Decimal) 0xffae (KP_Decimal) 0xffae (KP_Decimal) 0xffae (KP_Decimal) 0xffae (KP_Decimal)
    < 135
    < 136
    < 137
    < 138
    < 139
    < 140
    < 141
    < 142
    < 143
    < 144
    < 145
    < 146
    < 147
    133 0xffeb (Super_L) 0x0000 (NoSymbol) 0xffeb (Super_L)
    > 134 0xffec (Super_R) 0x0000 (NoSymbol) 0xffec (Super_R)
    > 135 0xff67 (Menu) 0x0000 (NoSymbol) 0xff67 (Menu)
    > 136 0xff69 (Cancel) 0x0000 (NoSymbol) 0xff69 (Cancel)
    > 137 0xff66 (Redo) 0x0000 (NoSymbol) 0xff66 (Redo)
    > 138 0x1005ff70 (SunProps) 0x0000 (NoSymbol) 0x1005ff70 (SunProps)
    > 139 0xff65 (Undo) 0x0000 (NoSymbol) 0xff65 (Undo)
    > 140 0x1005ff71 (SunFront) 0x0000 (NoSymbol) 0x1005ff71 (SunFront)
    > 141 0x1008ff57 (XF86Copy) 0x0000 (NoSymbol) 0x1008ff57 (XF86Copy)
    > 142 0x1008ff6b (XF86Open) 0x0000 (NoSymbol) 0x1008ff6b (XF86Open)
    > 143 0x1008ff6d (XF86Paste) 0x0000 (NoSymbol) 0x1008ff6d (XF86Paste)
    > 144 0xff68 (Find) 0x0000 (NoSymbol) 0xff68 (Find)
    > 145 0x1008ff58 (XF86Cut) 0x0000 (NoSymbol) 0x1008ff58 (XF86Cut)
    > 146 0xff6a (Help) 0x0000 (NoSymbol) 0xff6a (Help)
    > 147 0x1008ff65 (XF86MenuKB) 0x0000 (NoSymbol) 0x1008ff65 (XF86MenuKB)
    > 148 0x1008ff1d (XF86Calculator) 0x0000 (NoSymbol) 0x1008ff1d (XF86Calculator)
    148,151c148,151
    < 150
    < 151
    < 152
    150 0x1008ff2f (XF86Sleep) 0x0000 (NoSymbol) 0x1008ff2f (XF86Sleep)
    > 151 0x1008ff2b (XF86WakeUp) 0x0000 (NoSymbol) 0x1008ff2b (XF86WakeUp)
    > 152 0x1008ff5d (XF86Explorer) 0x0000 (NoSymbol) 0x1008ff5d (XF86Explorer)
    > 153 0x1008ff7b (XF86Send) 0x0000 (NoSymbol) 0x1008ff7b (XF86Send)
    153,165c153,165
    < 155
    < 156 0x0000 (NoSymbol) 0xffe7 (Meta_L) 0x0000 (NoSymbol) 0xffe7 (Meta_L) 0x0000 (NoSymbol) 0xffe7 (Meta_L)
    < 157
    < 158
    < 159
    < 160
    < 161
    < 162
    < 163
    < 164
    < 165
    < 166
    155 0x1008ff8a (XF86Xfer) 0x0000 (NoSymbol) 0x1008ff8a (XF86Xfer)
    > 156 0x1008ff41 (XF86Launch1) 0x0000 (NoSymbol) 0x1008ff41 (XF86Launch1)
    > 157 0x1008ff42 (XF86Launch2) 0x0000 (NoSymbol) 0x1008ff42 (XF86Launch2)
    > 158 0x1008ff2e (XF86WWW) 0x0000 (NoSymbol) 0x1008ff2e (XF86WWW)
    > 159 0x1008ff5a (XF86DOS) 0x0000 (NoSymbol) 0x1008ff5a (XF86DOS)
    > 160 0x1008ff2d (XF86ScreenSaver) 0x0000 (NoSymbol) 0x1008ff2d (XF86ScreenSaver)
    > 161 0x1008ff74 (XF86RotateWindows) 0x0000 (NoSymbol) 0x1008ff74 (XF86RotateWindows)
    > 162 0x1008ff7f (XF86TaskPane) 0x0000 (NoSymbol) 0x1008ff7f (XF86TaskPane)
    > 163 0x1008ff19 (XF86Mail) 0x0000 (NoSymbol) 0x1008ff19 (XF86Mail)
    > 164 0x1008ff30 (XF86Favorites) 0x0000 (NoSymbol) 0x1008ff30 (XF86Favorites)
    > 165 0x1008ff33 (XF86MyComputer) 0x0000 (NoSymbol) 0x1008ff33 (XF86MyComputer)
    > 166 0x1008ff26 (XF86Back) 0x0000 (NoSymbol) 0x1008ff26 (XF86Back)
    > 167 0x1008ff27 (XF86Forward) 0x0000 (NoSymbol) 0x1008ff27 (XF86Forward)
    167,175c167,175
    < 169
    < 170
    < 171
    < 172
    < 173
    < 174
    < 175
    < 176
    169 0x1008ff2c (XF86Eject) 0x0000 (NoSymbol) 0x1008ff2c (XF86Eject)
    > 170 0x1008ff2c (XF86Eject) 0x1008ff2c (XF86Eject) 0x1008ff2c (XF86Eject) 0x1008ff2c (XF86Eject)
    > 171 0x1008ff17 (XF86AudioNext) 0x0000 (NoSymbol) 0x1008ff17 (XF86AudioNext)
    > 172 0x1008ff14 (XF86AudioPlay) 0x1008ff31 (XF86AudioPause) 0x1008ff14 (XF86AudioPlay) 0x1008ff31 (XF86AudioPause)
    > 173 0x1008ff16 (XF86AudioPrev) 0x0000 (NoSymbol) 0x1008ff16 (XF86AudioPrev)
    > 174 0x1008ff15 (XF86AudioStop) 0x1008ff2c (XF86Eject) 0x1008ff15 (XF86AudioStop) 0x1008ff2c (XF86Eject)
    > 175 0x1008ff1c (XF86AudioRecord) 0x0000 (NoSymbol) 0x1008ff1c (XF86AudioRecord)
    > 176 0x1008ff3e (XF86AudioRewind) 0x0000 (NoSymbol) 0x1008ff3e (XF86AudioRewind)
    > 177 0x1008ff6e (XF86Phone) 0x0000 (NoSymbol) 0x1008ff6e (XF86Phone)
    177,180c177,180
    < 179
    < 180
    < 181
    179 0x1008ff81 (XF86Tools) 0x0000 (NoSymbol) 0x1008ff81 (XF86Tools)
    > 180 0x1008ff18 (XF86HomePage) 0x0000 (NoSymbol) 0x1008ff18 (XF86HomePage)
    > 181 0x1008ff73 (XF86Reload) 0x0000 (NoSymbol) 0x1008ff73 (XF86Reload)
    > 182 0x1008ff56 (XF86Close) 0x0000 (NoSymbol) 0x1008ff56 (XF86Close)
    183,194c183,194
    < 185
    < 186
    < 187
    < 188
    < 189
    < 190
    < 191
    < 192
    < 193
    < 194
    < 195
    185 0x1008ff78 (XF86ScrollUp) 0x0000 (NoSymbol) 0x1008ff78 (XF86ScrollUp)
    > 186 0x1008ff79 (XF86ScrollDown) 0x0000 (NoSymbol) 0x1008ff79 (XF86ScrollDown)
    > 187 0x0028 (parenleft) 0x0000 (NoSymbol) 0x0028 (parenleft)
    > 188 0x0029 (parenright) 0x0000 (NoSymbol) 0x0029 (parenright)
    > 189 0x1008ff68 (XF86New) 0x0000 (NoSymbol) 0x1008ff68 (XF86New)
    > 190 0xff66 (Redo) 0x0000 (NoSymbol) 0xff66 (Redo)
    > 191 0x1008ff81 (XF86Tools) 0x0000 (NoSymbol) 0x1008ff81 (XF86Tools)
    > 192 0x1008ff45 (XF86Launch5) 0x0000 (NoSymbol) 0x1008ff45 (XF86Launch5)
    > 193 0x1008ff46 (XF86Launch6) 0x0000 (NoSymbol) 0x1008ff46 (XF86Launch6)
    > 194 0x1008ff47 (XF86Launch7) 0x0000 (NoSymbol) 0x1008ff47 (XF86Launch7)
    > 195 0x1008ff48 (XF86Launch8) 0x0000 (NoSymbol) 0x1008ff48 (XF86Launch8)
    > 196 0x1008ff49 (XF86Launch9) 0x0000 (NoSymbol) 0x1008ff49 (XF86Launch9)
    196,199c196,199
    < 198
    < 199
    < 200
    198 0x1008ffb2 (XF86AudioMicMute) 0x0000 (NoSymbol) 0x1008ffb2 (XF86AudioMicMute)
    > 199 0x1008ffa9 (XF86TouchpadToggle) 0x0000 (NoSymbol) 0x1008ffa9 (XF86TouchpadToggle)
    > 200 0x1008ffb0 (XF86TouchpadOn) 0x0000 (NoSymbol) 0x1008ffb0 (XF86TouchpadOn)
    > 201 0x1008ffb1 (XF86TouchpadOff) 0x0000 (NoSymbol) 0x1008ffb1 (XF86TouchpadOff)
    201,216c201,216
    < 203
    < 204
    < 205
    < 206
    < 207
    < 208
    < 209
    < 210
    < 211
    < 212
    < 213
    < 214 0x1008ff59 (XF86Display) 0x0000 (NoSymbol) 0x1008ff59 (XF86Display) 0x0000 (NoSymbol) 0x1008ff59 (XF86Display)
    < 215 0x1008ff04 (XF86KbdLightOnOff) 0x0000 (NoSymbol) 0x1008ff04 (XF86KbdLightOnOff) 0x0000 (NoSymbol) 0x1008ff04 (XF86KbdLightOnOff)
    < 216 0x1008ff06 (XF86KbdBrightnessDown) 0x0000 (NoSymbol) 0x1008ff06 (XF86KbdBrightnessDown) 0x0000 (NoSymbol) 0x1008ff06 (XF86KbdBrightnessDown)
    < 217 0x1008ff05 (XF86KbdBrightnessUp) 0x0000 (NoSymbol) 0x1008ff05 (XF86KbdBrightnessUp) 0x0000 (NoSymbol) 0x1008ff05 (XF86KbdBrightnessUp)
    203 0xff7e (Mode_switch) 0x0000 (NoSymbol) 0xff7e (Mode_switch)
    > 204 0x0000 (NoSymbol) 0xffe9 (Alt_L) 0x0000 (NoSymbol) 0xffe9 (Alt_L)
    > 205 0x0000 (NoSymbol) 0xffe7 (Meta_L) 0x0000 (NoSymbol) 0xffe7 (Meta_L)
    > 206 0x0000 (NoSymbol) 0xffeb (Super_L) 0x0000 (NoSymbol) 0xffeb (Super_L)
    > 207 0x0000 (NoSymbol) 0xffed (Hyper_L) 0x0000 (NoSymbol) 0xffed (Hyper_L)
    > 208 0x1008ff14 (XF86AudioPlay) 0x0000 (NoSymbol) 0x1008ff14 (XF86AudioPlay)
    > 209 0x1008ff31 (XF86AudioPause) 0x0000 (NoSymbol) 0x1008ff31 (XF86AudioPause)
    > 210 0x1008ff43 (XF86Launch3) 0x0000 (NoSymbol) 0x1008ff43 (XF86Launch3)
    > 211 0x1008ff44 (XF86Launch4) 0x0000 (NoSymbol) 0x1008ff44 (XF86Launch4)
    > 212 0x1008ff4b (XF86LaunchB) 0x0000 (NoSymbol) 0x1008ff4b (XF86LaunchB)
    > 213 0x1008ffa7 (XF86Suspend) 0x0000 (NoSymbol) 0x1008ffa7 (XF86Suspend)
    > 214 0x1008ff56 (XF86Close) 0x0000 (NoSymbol) 0x1008ff56 (XF86Close)
    > 215 0x1008ff14 (XF86AudioPlay) 0x0000 (NoSymbol) 0x1008ff14 (XF86AudioPlay)
    > 216 0x1008ff97 (XF86AudioForward) 0x0000 (NoSymbol) 0x1008ff97 (XF86AudioForward)
    > 217
    > 218 0xff61 (Print) 0x0000 (NoSymbol) 0xff61 (Print)
    218c218
    220 0x1008ff8f (XF86WebCam) 0x0000 (NoSymbol) 0x1008ff8f (XF86WebCam)
    221,227c221,227
    < 223
    < 224
    < 225
    < 226
    < 227
    < 228
    223 0x1008ff19 (XF86Mail) 0x0000 (NoSymbol) 0x1008ff19 (XF86Mail)
    > 224 0x1008ff8e (XF86Messenger) 0x0000 (NoSymbol) 0x1008ff8e (XF86Messenger)
    > 225 0x1008ff1b (XF86Search) 0x0000 (NoSymbol) 0x1008ff1b (XF86Search)
    > 226 0x1008ff5f (XF86Go) 0x0000 (NoSymbol) 0x1008ff5f (XF86Go)
    > 227 0x1008ff3c (XF86Finance) 0x0000 (NoSymbol) 0x1008ff3c (XF86Finance)
    > 228 0x1008ff5e (XF86Game) 0x0000 (NoSymbol) 0x1008ff5e (XF86Game)
    > 229 0x1008ff36 (XF86Shop) 0x0000 (NoSymbol) 0x1008ff36 (XF86Shop)
    229,244c229,244
    < 231
    < 232
    < 233
    < 234
    < 235
    < 236
    < 237
    < 238
    < 239
    < 240
    < 241
    < 242
    < 243
    < 244
    < 245
    231 0xff69 (Cancel) 0x0000 (NoSymbol) 0xff69 (Cancel)
    > 232 0x1008ff03 (XF86MonBrightnessDown) 0x0000 (NoSymbol) 0x1008ff03 (XF86MonBrightnessDown)
    > 233 0x1008ff02 (XF86MonBrightnessUp) 0x0000 (NoSymbol) 0x1008ff02 (XF86MonBrightnessUp)
    > 234 0x1008ff32 (XF86AudioMedia) 0x0000 (NoSymbol) 0x1008ff32 (XF86AudioMedia)
    > 235 0x1008ff59 (XF86Display) 0x0000 (NoSymbol) 0x1008ff59 (XF86Display)
    > 236 0x1008ff04 (XF86KbdLightOnOff) 0x0000 (NoSymbol) 0x1008ff04 (XF86KbdLightOnOff)
    > 237 0x1008ff06 (XF86KbdBrightnessDown) 0x0000 (NoSymbol) 0x1008ff06 (XF86KbdBrightnessDown)
    > 238 0x1008ff05 (XF86KbdBrightnessUp) 0x0000 (NoSymbol) 0x1008ff05 (XF86KbdBrightnessUp)
    > 239 0x1008ff7b (XF86Send) 0x0000 (NoSymbol) 0x1008ff7b (XF86Send)
    > 240 0x1008ff72 (XF86Reply) 0x0000 (NoSymbol) 0x1008ff72 (XF86Reply)
    > 241 0x1008ff90 (XF86MailForward) 0x0000 (NoSymbol) 0x1008ff90 (XF86MailForward)
    > 242 0x1008ff77 (XF86Save) 0x0000 (NoSymbol) 0x1008ff77 (XF86Save)
    > 243 0x1008ff5b (XF86Documents) 0x0000 (NoSymbol) 0x1008ff5b (XF86Documents)
    > 244 0x1008ff93 (XF86Battery) 0x0000 (NoSymbol) 0x1008ff93 (XF86Battery)
    > 245 0x1008ff94 (XF86Bluetooth) 0x0000 (NoSymbol) 0x1008ff94 (XF86Bluetooth)
    > 246 0x1008ff95 (XF86WLAN) 0x0000 (NoSymbol) 0x1008ff95 (XF86WLAN)

    I am lost. Best regards, Jörg

  15. @Jorg,

    Sorry for the late answer….but really busy….
    I do not have really an idea why this is happening…..In the post, we mentioned that you need to run the xrdp genkey map utility to set your correct keyboard layout…
    If you using version Ubuntu 16.10, you can try to set the keyboard layout within the XRDP session (as long as you are using the xorgxrdp session manager…)
    Try this and tell us if this could fix your issue….?

    The strange thing here is that it seems to work with all the systems except your IPAD device….

    Till next time
    See ya

  16. @Jorg,

    have you tried to set language keyboard layout within the remote session (xrdp) using the interface or the command line….
    Is this working for you ?

    Hope this help
    Till next time
    See ya

  17. Thanks, Griffon, for your reply. I guess you are referring to:

    setxkbmap -layout de ($Test)
    sudo cp /etc/xrdp/km-0409.ini /etc/xrdp/km-0409.ini.bak
    sudo xrdp-genkeymap km-0409.ini

    I even copied 0407 in another try over 0409 but nothing helped. Did both locally and remote.

    The strange result is that I get visible keys only if I press onscreen (iPad) the Windows key + letter = Win+x = x or Shift+x = X. Is there a general setting I cannot see?

    Thanks again.

    Best regards,

    Jörg

  18. Solved (but not fixed with MS RDP client on iOS):
    I think this is an issue with the MS RDP client on IOS:
    1. Found two more identical issue descriptions on the web:
    http://askubuntu.com/questions/714272/xrdp-connection-to-ubuntu-15-10-with-ipad-app-keyboard-mapping-wrong
    https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=92343
    2. xrdp from a Windows clients works nicely.
    3. Remotix Lite (for iOS) works, too.
    Cost me countless hours and still would like to have it with MS RDP client but it works without, too.

    Thank Griffon, for your work and support.
    Regards,
    Jörg

Leave a Reply