Sunstone/Fireedge can't handle pt-br keyboard

Hi!

I’m trying to config a linux machine to use my pt-br keyboard, however with no success. I’m using the new Sunstone/FireEdge version. The VM Template and the VM itself are configured do use “pt-br” keybord map. Also tryed to set br-abnt2 keyboard in my Oracle Linux 8.

Pleass, help!

My VM is as follows:

<VM>
<ID>335</ID>
<UID>0</UID>
<GID>0</GID>
<UNAME>oneadmin</UNAME>
<GNAME>oneadmin</GNAME>
<NAME>ol8-pt-br-vm01</NAME>
<PERMISSIONS>
<OWNER_U>1</OWNER_U>
<OWNER_M>1</OWNER_M>
<OWNER_A>0</OWNER_A>
<GROUP_U>0</GROUP_U>
<GROUP_M>0</GROUP_M>
<GROUP_A>0</GROUP_A>
<OTHER_U>0</OTHER_U>
<OTHER_M>0</OTHER_M>
<OTHER_A>0</OTHER_A>
</PERMISSIONS>
<LAST_POLL>1656365612</LAST_POLL>
<STATE>3</STATE>
<LCM_STATE>3</LCM_STATE>
<PREV_STATE>3</PREV_STATE>
<PREV_LCM_STATE>3</PREV_LCM_STATE>
<RESCHED>0</RESCHED>
<STIME>1656365037</STIME>
<ETIME>0</ETIME>
<DEPLOY_ID>6885457d-56ba-457c-93a3-4e4c2c5f4622</DEPLOY_ID>
<MONITORING>
<CPU><![CDATA[1.0]]></CPU>
<DISKRDBYTES><![CDATA[284607180]]></DISKRDBYTES>
<DISKRDIOPS><![CDATA[13499]]></DISKRDIOPS>
<DISKWRBYTES><![CDATA[49479168]]></DISKWRBYTES>
<DISKWRIOPS><![CDATA[758]]></DISKWRIOPS>
<DISK_SIZE>
<ID><![CDATA[0]]></ID>
<SIZE><![CDATA[3854]]></SIZE>
</DISK_SIZE>
<DISK_SIZE>
<ID><![CDATA[1]]></ID>
<SIZE><![CDATA[1]]></SIZE>
</DISK_SIZE>
<ID><![CDATA[335]]></ID>
<MEMORY><![CDATA[882692]]></MEMORY>
<NETRX><![CDATA[22056]]></NETRX>
<NETTX><![CDATA[13220]]></NETTX>
<TIMESTAMP><![CDATA[1656365612]]></TIMESTAMP>
</MONITORING>
<TEMPLATE>
<AUTOMATIC_DS_REQUIREMENTS><![CDATA[(“CLUSTERS/ID” @> 109)]]></AUTOMATIC_DS_REQUIREMENTS>
<AUTOMATIC_NIC_REQUIREMENTS><![CDATA[(“CLUSTERS/ID” @> 109)]]></AUTOMATIC_NIC_REQUIREMENTS>
<AUTOMATIC_REQUIREMENTS><![CDATA[(CLUSTER_ID = 109) & !(PUBLIC_CLOUD = YES) & !(PIN_POLICY = PINNED)]]></AUTOMATIC_REQUIREMENTS>
<CONTEXT>
<DISK_ID><![CDATA[1]]></DISK_ID>
<ETH0_DNS><![CDATA[172.19.200.5]]></ETH0_DNS>
<ETH0_EXTERNAL><![CDATA]></ETH0_EXTERNAL>
<ETH0_GATEWAY><![CDATA[172.16.55.210]]></ETH0_GATEWAY>
<ETH0_GATEWAY6><![CDATA]></ETH0_GATEWAY6>
<ETH0_IP><![CDATA[172.16.55.1]]></ETH0_IP>
<ETH0_IP6><![CDATA]></ETH0_IP6>
<ETH0_IP6_GATEWAY><![CDATA]></ETH0_IP6_GATEWAY>
<ETH0_IP6_METHOD><![CDATA]></ETH0_IP6_METHOD>
<ETH0_IP6_METRIC><![CDATA]></ETH0_IP6_METRIC>
<ETH0_IP6_PREFIX_LENGTH><![CDATA]></ETH0_IP6_PREFIX_LENGTH>
<ETH0_IP6_ULA><![CDATA]></ETH0_IP6_ULA>
<ETH0_MAC><![CDATA[02:00:ac:10:37:01]]></ETH0_MAC>
<ETH0_MASK><![CDATA]></ETH0_MASK>
<ETH0_METHOD><![CDATA]></ETH0_METHOD>
<ETH0_METRIC><![CDATA]></ETH0_METRIC>
<ETH0_MTU><![CDATA]></ETH0_MTU>
<ETH0_NETWORK><![CDATA]></ETH0_NETWORK>
<ETH0_SEARCH_DOMAIN><![CDATA]></ETH0_SEARCH_DOMAIN>
<ETH0_VLAN_ID><![CDATA]></ETH0_VLAN_ID>
<ETH0_VROUTER_IP><![CDATA]></ETH0_VROUTER_IP>
<ETH0_VROUTER_IP6><![CDATA]></ETH0_VROUTER_IP6>
<ETH0_VROUTER_MANAGEMENT><![CDATA]></ETH0_VROUTER_MANAGEMENT>
<NETWORK><![CDATA[YES]]></NETWORK>
<SSH_PUBLIC_KEY><![CDATA]></SSH_PUBLIC_KEY>
<TARGET><![CDATA[hda]]></TARGET>
</CONTEXT>
<CPU><![CDATA[2]]></CPU>
<DISK>
<ALLOW_ORPHANS><![CDATA[YES]]></ALLOW_ORPHANS>
<CLONE><![CDATA[YES]]></CLONE>
<CLONE_TARGET><![CDATA[SYSTEM]]></CLONE_TARGET>
<CLUSTER_ID><![CDATA[109]]></CLUSTER_ID>
<DATASTORE><![CDATA[dsi]]></DATASTORE>
<DATASTORE_ID><![CDATA[136]]></DATASTORE_ID>
<DEV_PREFIX><![CDATA[sd]]></DEV_PREFIX>
<DISK_ID><![CDATA[0]]></DISK_ID>
<DISK_SNAPSHOT_TOTAL_SIZE><![CDATA[0]]></DISK_SNAPSHOT_TOTAL_SIZE>
<DISK_TYPE><![CDATA[FILE]]></DISK_TYPE>
<DRIVER><![CDATA[raw]]></DRIVER>
<FORMAT><![CDATA[raw]]></FORMAT>
<IMAGE><![CDATA[ol8vm-DATA]]></IMAGE>
<IMAGE_ID><![CDATA[366]]></IMAGE_ID>
<IMAGE_STATE><![CDATA[2]]></IMAGE_STATE>
<IMAGE_UNAME><![CDATA[oneadmin]]></IMAGE_UNAME>
<LN_TARGET><![CDATA[SYSTEM]]></LN_TARGET>
<ORDER><![CDATA[1]]></ORDER>
<ORIGINAL_SIZE><![CDATA[12288]]></ORIGINAL_SIZE>
<READONLY><![CDATA[NO]]></READONLY>
<SAVE><![CDATA[NO]]></SAVE>
<SIZE><![CDATA[12288]]></SIZE>
<SOURCE><![CDATA[/var/lib/one//datastores/136/91308ed6cd1a8f85f465520b2a618043]]></SOURCE>
<TARGET><![CDATA[sda]]></TARGET>
<TM_MAD><![CDATA[ssh]]></TM_MAD>
<TYPE><![CDATA[FILE]]></TYPE>
</DISK>
<GRAPHICS>
<KEYMAP><![CDATA[pt-br]]></KEYMAP>
<LISTEN><![CDATA[0.0.0.0]]></LISTEN>
<PORT><![CDATA[6235]]></PORT>
<TYPE><![CDATA[VNC]]></TYPE>
</GRAPHICS>
<MEMORY><![CDATA[2048]]></MEMORY>
<NIC>
<AR_ID><![CDATA[0]]></AR_ID>
<BRIDGE><![CDATA[onebr55]]></BRIDGE>
<BRIDGE_TYPE><![CDATA[linux]]></BRIDGE_TYPE>
<CLUSTER_ID><![CDATA[109]]></CLUSTER_ID>
<GATEWAY><![CDATA[172.16.55.210]]></GATEWAY>
<IP><![CDATA[172.16.55.1]]></IP>
<MAC><![CDATA[02:00:ac:10:37:01]]></MAC>
<NAME><![CDATA[NIC0]]></NAME>
<NETWORK><![CDATA[onprem-bridge-mvmr]]></NETWORK>
<NETWORK_ID><![CDATA[48]]></NETWORK_ID>
<NETWORK_UNAME><![CDATA[oneadmin]]></NETWORK_UNAME>
<NIC_ID><![CDATA[0]]></NIC_ID>
<SECURITY_GROUPS><![CDATA[0,100,101,102]]></SECURITY_GROUPS>
<SSH><![CDATA[YES]]></SSH>
<TARGET><![CDATA[one-335-0]]></TARGET>
<VN_MAD><![CDATA[fw]]></VN_MAD>
</NIC>
<OS>
<BOOT><![CDATA[disk0]]></BOOT>
<FIRMWARE><![CDATA]></FIRMWARE>
<FIRMWARE_SECURE><![CDATA[YES]]></FIRMWARE_SECURE>
<UUID><![CDATA[6885457d-56ba-457c-93a3-4e4c2c5f4622]]></UUID>
</OS>
<SECURITY_GROUP_RULE>
<PROTOCOL><![CDATA[ALL]]></PROTOCOL>
<RULE_TYPE><![CDATA[OUTBOUND]]></RULE_TYPE>
<SECURITY_GROUP_ID><![CDATA[0]]></SECURITY_GROUP_ID>
<SECURITY_GROUP_NAME><![CDATA[default]]></SECURITY_GROUP_NAME>
</SECURITY_GROUP_RULE>
<SECURITY_GROUP_RULE>
<PROTOCOL><![CDATA[ALL]]></PROTOCOL>
<RULE_TYPE><![CDATA[INBOUND]]></RULE_TYPE>
<SECURITY_GROUP_ID><![CDATA[0]]></SECURITY_GROUP_ID>
<SECURITY_GROUP_NAME><![CDATA[default]]></SECURITY_GROUP_NAME>
</SECURITY_GROUP_RULE>
<SECURITY_GROUP_RULE>
<AR_ID><![CDATA[0]]></AR_ID>
<IP><![CDATA[172.16.55.1]]></IP>
<MAC><![CDATA[02:00:ac:10:37:01]]></MAC>
<NETWORK_ID><![CDATA[27]]></NETWORK_ID>
<PROTOCOL><![CDATA[TCP]]></PROTOCOL>
<RANGE><![CDATA[22]]></RANGE>
<RULE_TYPE><![CDATA[inbound]]></RULE_TYPE>
<SECURITY_GROUP_ID><![CDATA[100]]></SECURITY_GROUP_ID>
<SECURITY_GROUP_NAME><![CDATA[VDI - Acesso SSH]]></SECURITY_GROUP_NAME>
<SIZE><![CDATA[254]]></SIZE>
<TYPE><![CDATA[IP4]]></TYPE>
</SECURITY_GROUP_RULE>
<SECURITY_GROUP_RULE>
<AR_ID><![CDATA[0]]></AR_ID>
<IP><![CDATA[172.16.55.1]]></IP>
<MAC><![CDATA[02:00:ac:10:37:01]]></MAC>
<NETWORK_ID><![CDATA[27]]></NETWORK_ID>
<PROTOCOL><![CDATA[TCP]]></PROTOCOL>
<RANGE><![CDATA[3389]]></RANGE>
<RULE_TYPE><![CDATA[inbound]]></RULE_TYPE>
<SECURITY_GROUP_ID><![CDATA[101]]></SECURITY_GROUP_ID>
<SECURITY_GROUP_NAME><![CDATA[VDI - Acesso RDP]]></SECURITY_GROUP_NAME>
<SIZE><![CDATA[254]]></SIZE>
<TYPE><![CDATA[IP4]]></TYPE>
</SECURITY_GROUP_RULE>
<SECURITY_GROUP_RULE>
<AR_ID><![CDATA[0]]></AR_ID>
<IP><![CDATA[172.16.55.1]]></IP>
<MAC><![CDATA[02:00:ac:10:37:01]]></MAC>
<NETWORK_ID><![CDATA[27]]></NETWORK_ID>
<PROTOCOL><![CDATA[TCP]]></PROTOCOL>
<RANGE><![CDATA[5900:7000]]></RANGE>
<RULE_TYPE><![CDATA[inbound]]></RULE_TYPE>
<SECURITY_GROUP_ID><![CDATA[102]]></SECURITY_GROUP_ID>
<SECURITY_GROUP_NAME><![CDATA[VDI - Acesso VNC]]></SECURITY_GROUP_NAME>
<SIZE><![CDATA[254]]></SIZE>
<TYPE><![CDATA[IP4]]></TYPE>
</SECURITY_GROUP_RULE>
<TEMPLATE_ID><![CDATA[226]]></TEMPLATE_ID>
<TM_MAD_SYSTEM><![CDATA[ssh]]></TM_MAD_SYSTEM>
<VMID><![CDATA[335]]></VMID>
</TEMPLATE>
<USER_TEMPLATE>
<HOT_RESIZE>
<CPU_HOT_ADD_ENABLED><![CDATA[NO]]></CPU_HOT_ADD_ENABLED>
<MEMORY_HOT_ADD_ENABLED><![CDATA[NO]]></MEMORY_HOT_ADD_ENABLED>
</HOT_RESIZE>
<HYPERVISOR><![CDATA[kvm]]></HYPERVISOR>
<INPUTS_ORDER><![CDATA]></INPUTS_ORDER>
<MEMORY_UNIT_COST><![CDATA[MB]]></MEMORY_UNIT_COST>
<SCHED_DS_REQUIREMENTS><![CDATA[ID=“135” | ID=“208”]]></SCHED_DS_REQUIREMENTS>
</USER_TEMPLATE>
<HISTORY_RECORDS>
<HISTORY>
<OID>335</OID>
<SEQ>0</SEQ>
<HOSTNAME>one-node-kvm-01</HOSTNAME>
<HID>24</HID>
<CID>109</CID>
<STIME>1656365037</STIME>
<ETIME>0</ETIME>
<VM_MAD><![CDATA[kvm]]></VM_MAD>
<TM_MAD><![CDATA[ssh]]></TM_MAD>
<DS_ID>135</DS_ID>
<PSTIME>1656365037</PSTIME>
<PETIME>1656365054</PETIME>
<RSTIME>1656365054</RSTIME>
<RETIME>0</RETIME>
<ESTIME>0</ESTIME>
<EETIME>0</EETIME>
<ACTION>0</ACTION>
<UID>-1</UID>
<GID>-1</GID>
<REQUEST_ID>-1</REQUEST_ID>
</HISTORY>
</HISTORY_RECORDS>
</VM>

Thanks for the detailed feedback. We’ll try to reproduce your behaviour and get back to you.

Hi @marcusrocha,

The VM in OpenNebula needs to have the correct keyboard layout for Guacamole VNC to work correctly. First, you will need to set the KEYMAP to an available option, in your case, pt-br. After that, an internal configuration is needed; you must connect to the VM and change the keyboard layout to match the selected keymap.

Regards,
Frederick

Hi @fborges ,

thanks for your answer. However, this is exactly what I did before posting.

A more detailed description of the situation follows:

  • My VM is confugired to the required keymap:

<GRAPHICS>
<KEYMAP>
<LISTEN>
<PORT>
<TYPE>
</GRAPHICS>

  • Also my VM is configured with the proper keymap, which is br-abnt2. Sorry, I do not know if it is possible to include an image here on order to show keymap configuration in Oracle Linux 8 or Windows 10 configuration showing that VM keymap is ok. Anyway, the command set keymaps in Oracle Linux 8 would be “localectl set-keymap br-abnt2”. Moreover, “localectl” alone will show locale and keymap sets.

  • This said, characters such as “âêãÓú” and so on will not be correctly displayed I use a VNC connection. Other misplaced characters are correctly placed after this configuration;

  • However, both tigerVNC and virt-viewer can connect to the KVM host and properly use the keymap pt-abnt2 (again, I’m sorry I cannot show inages here). Also tryed to copy br-abnt2 to pt-br with no results.

Finally, after posting, I decided to peruse guacamole’s docs and forum. There I found that guaca cannot cirrectly use non-us keymaps. It would require a different lib to process VNC, which conflicts with gacamoles´s design goals, as stated in the posts bellow:

Regards,
Marcus Rocha

Hi again,

Can you please confirm that it is working with the Apache Guacamole web interface, without using OpenNebula?

Regards,
Frederick

Hi @fborges ,

no, it does not work with the Apache Guacmole web interface without using Guacamole.
Thus, after a bit testing, I came to believe it is not an OpenNebula issue. This why I used the term ’ “fix” '.
Anyway, it would limit the access to remote machine where the access through KVM’s VNC server would be required.

Regards,
Marcus

Hi

As it is on the Apache Guacamole website, “Guacamole is actually independent of keyboard layout, and will send the true local identity of the key pressed. The behavior of each key within the remote desktop should identically match the local behavior of that key”.

We have been trying with a Non-US keyboard, and it works for us. We see only one difference: our layout is the same in our keyboard, the VNC graphics section, and the one set on the VM.

From what we have been reading, we can see in yours the following configurations:

  • We assume your keyboard is pt-br, the same as your keymap.
  • Keymap set to pt-br.
  • The VM keymap is set to br-abnt2

Can you try to set the same language in all three?

Regards,
Frederick

Hi!

Sorry for the delay, I took some time to perform a more thorough testing with Oracle Linux 8, Ubuntu 20.04.4 and AlmaLinux 8.6. Results are the same to all of these distros.

There’s a catch with our keyboards: most distros reffer to our current keyboards really as br-abnt2, nevertheless language setting is usually pt-br. So, what I had to do is to copy br-abnt2 keymap to a previously inexistent pt-br keymap.

Results:

  1. If VM is not set to pt-br, many special characters as misplaced.
  2. 2.1) If VM is set to pt-br and VM keymap is ok, all of the characters are placed in the expected locations.
    2.2) Problems arise when it comes to diacritics marks ` ´ ^ ~ which do not work. So, characters such as “ãÃâÂéÉèÈ” and so on cannot be typed,

Best regards

Hi,

We cannot reproduce this issue.
We recommend you ask Apache Guacamole to receive a solution.

Regards,
Frederick

Hi!

Thanks for your effort.

Regards,
Marcus Rocha

Hi,

Did you solve your problem? I’m getting the same issue with Spanish keyboard.

Thanks.

Hi, @Daniel_Ruiz_Molina !

Too bad, I was not able to solve the problem. I managed to fix the keyboard layout but could not have the dead keys (accents) working properly.

To solve this problem, the best solution I could find is to start a direct SSH connection to Linux VMs or a direct RDP connection to Windows VMs, thus avoiding to use OpenNebula’s Guacamole connections.

Regards,
Marcus

Hi, @marcusrocha

for my OpenNebula environment, it’s “impossible” to allow incoming connections to all my VMs, because normally, my OpenNebula is executing more than 500 VMs, all of them with private IP (and some could do NAT form inside to outside), but they haven’t got public IP, si I would have to configure a SNAT for each connection to redirect incoming connection to each private IP VM… isn’t it? mmmmm

Buffff…

Thanks.

Hi, @Daniel_Ruiz_Molina

Sure, for this number of hosts manual configuration would not be reasonable. Maybe you could use OpenVPN to stablish a VPN between your private network and your VMs (which should be assigned to some range of your private network). Actually, we are testing this setup. It seams to work fine, but we do not know yet the impact of the overhead imposed by the VPN.
Thus, you would be able to access your VMs directly.

On the bright side you will be able to use this VPN no matter which cloud provider you use.

Regards