Keyboard layout problems in Thinfinity Workspace sessions usually trace back to a mismatch between the client device, the Windows lock/logon screen, the user's profile, or the Thinfinity Access Profile. The wrong character appearing when you type @, ?, ç, or ã can also surface as account lockouts, because every wrong character at the password prompt counts as a failed logon.
This article walks you through a structured triage and the registry-level fixes for the four layers where the layout is decided: the Windows logon/lock screen (.DEFAULT), the user profile (HKCU), the host (HKLM), and the Thinfinity Access Profile.
Golden rule: never change passwords or registry keys without first capturing what is currently configured. The snapshot script below is the same one you attach to a support escalation.
Always capture the current state of the host before editing the registry. The snapshot doubles as a rollback reference and as evidence to attach to a support escalation.
Run this snapshot script on the affected session host as a local administrator:
@echo off
set OUT=C:\Temp\kbd_snapshot_%COMPUTERNAME%.txt
mkdir C:\Temp 2>nul
echo === HOST: %COMPUTERNAME% === > "%OUT%"
echo --- HKLM Keyboard Layout --- >> "%OUT%"
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout" >> "%OUT%" 2>&1
echo --- .DEFAULT Preload --- >> "%OUT%"
reg query "HKU\.DEFAULT\Keyboard Layout\Preload" >> "%OUT%" 2>&1
echo --- HKCU Preload --- >> "%OUT%"
reg query "HKCU\Keyboard Layout\Preload" >> "%OUT%" 2>&1
powershell -NoProfile -Command "Get-WinUserLanguageList | Format-List" >> "%OUT%" 2>&1Export each affected key so you can re-import it if needed:
reg export "HKU\.DEFAULT\Keyboard Layout\Preload" C:\Temp\backup_default_preload.reg /y
reg export "HKCU\Keyboard Layout\Preload" C:\Temp\backup_hkcu_preload.reg /y
reg export "HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout" C:\Temp\backup_hklm_keyboard.reg /yUse these questions to classify the problem and jump to the right section.
| Symptom | Most likely cause | Jump to fix |
|---|---|---|
| Wrong layout indicator on the Windows logon screen (e.g., ENG instead of PTB) | Logon/lock screen reads from .DEFAULT hive | HKU\.DEFAULT + HKLM → |
| Win+Space cycles the wrong layouts inside an active session | User profile holds a legacy preload | HKCU\Keyboard Layout\Preload → |
| Special keys wrong only in Thinfinity, correct in native RDP | Thinfinity Access Profile or browser layer | Workspace Manager → Access Profiles → Keyboard → |
| Users locking out with Event 4625 + 4740 | Layout mismatch on lock/logon screen | Security log on host and DC → |
| Layout correct on host A, wrong on host B in the same pool | Image or GPO drift | Pool-wide snapshot diff → |
| Layout reverts after each reconnect | Client-side layout is being honored | IgnoreRemoteKeyboardLayout not set → |
Once the triage above pointed you to the right layer, use this map to match a specific symptom to its most likely cause and the test that confirms it.
| Symptom | Most likely cause | Verify with |
|---|---|---|
@ becomes ", or ? becomes _ | Server has EN-US loaded; client is ABNT2; IgnoreRemoteKeyboardLayout not set | HKLM key + .DEFAULT\Preload |
| Logon works some days, fails others (different machine each time) | Inconsistent configuration across host pool | Run snapshot on every host and diff |
| User typed the correct password, gets incorrect password, then locks out | Layout mismatch on lock screen / logon screen — not a brute-force attack | Event 4625 + 4740 correlation (see When users are getting locked out) |
| AltGr key (right Alt) does not work | Browser swallows AltGr / pass-through disabled in Thinfinity profile | Test in alternate browser; check Access Profile pass-through setting |
Dead keys (~, ^, `, ´) produce literal characters | Keyboard sent in Unicode mode while Windows expects scancode + dead-key state | Switch the Access Profile to Scancode mode and test |
| Numpad sends wrong characters | NumLock state out of sync; some browsers do not propagate the LED state | Toggle NumLock twice; check pass-through in the Access Profile |
| Keyboard works, then degrades after a reconnect | Reconnect re-applies the client-side layout because IgnoreRemoteKeyboardLayout is not set | Re-check HKLM after the reconnect |
| New users are fine, existing users are wrong | HKCU on the existing profile still holds the legacy layout | Inspect HKU\<SID>\Keyboard Layout |
The Windows logon and lock screens read from the .DEFAULT hive, not from any user profile. This is the layer most often responsible for password-prompt lockouts.
reg query "HKU\.DEFAULT\Keyboard Layout\Preload"
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout" /v IgnoreRemoteKeyboardLayoutExpected values for Brazilian ABNT2:
Preload\1 = 00010416 (REG_SZ)IgnoreRemoteKeyboardLayout = 0x1 (REG_DWORD).DEFAULT is in charge — not the client.HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options for any custom Welcome screen overrides, and check whether Copy settings → Welcome screen and system accounts was applied via intl.cpl → Administrative.reg add "HKU\.DEFAULT\Keyboard Layout\Preload" /v 1 /t REG_SZ /d 00010416 /f
for %i in (2 3 4 5) do reg delete "HKU\.DEFAULT\Keyboard Layout\Preload" /v %i /f 2>nul
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout" /v IgnoreRemoteKeyboardLayout /t REG_DWORD /d 1 /f.DEFAULT hive.Once a profile has stored a layout in HKCU\Keyboard Layout\Preload, fixing .DEFAULT alone is not enough — the existing profile keeps using its stored value.
reg query "HKCU\Keyboard Layout\Preload"
reg query "HKCU\Keyboard Layout\Substitutes"wmic useraccount where name="user.name" get sid
reg query "HKU\<SID>\Keyboard Layout\Preload"Load the offline hive (mount the FSLogix VHDX first if applicable):
reg load HKU\OfflineUser "C:\Users\username\NTUSER.DAT"
reg query "HKU\OfflineUser\Keyboard Layout\Preload"
reg unload HKU\OfflineUserreg add "HKCU\Keyboard Layout\Preload" /v 1 /t REG_SZ /d 00010416 /f while the user is logged on, then have them log off and back on.HKCU\Keyboard Layout\Preload\1 = 00010416). Add Item-Level Targeting to scope by AD group during a pilot..cmd that runs the same reg add at every logon — slower than GPP but audit-friendly.If keyboard input is correct with mstsc.exe to the same host but wrong through the Thinfinity browser session, the issue is in the profile or the browser, not in Windows.
kbdLayout (e.g. 0x00010416 for ABNT2), the keyboard mode (Scancode vs Unicode), and the pass-through option.kbdLayout is left blank, the host's IgnoreRemoteKeyboardLayout setting is what decides — make sure it is set to 1.event.code is the physical key; event.key is the character. If event.key is already wrong before reaching Thinfinity, the local OS layout is the culprit.A layout mismatch on the password prompt looks like a security incident: every wrong character counts toward the Account Lockout Threshold. Confirm the chain before treating it as a brute-force.
Useful PowerShell to pull the last 100 failed logons:
Get-WinEvent -FilterHashtable @{LogName="Security"; Id=4625} -MaxEvents 100 |
Select-Object TimeCreated,
@{n="User"; e={$_.Properties[5].Value}},
@{n="Source"; e={$_.Properties[19].Value}},
@{n="Reason"; e={$_.Properties[8].Value}}In a multi-DC environment, find which Domain Controller actually processed the lockout — Event 4740 only lives there:
Get-ADUser -Identity user.name -Properties LockedOut, AccountLockoutTime, LastBadPasswordAttempt
Get-ADDomainController -Filter * | ForEach-Object {
Get-WinEvent -ComputerName $_.HostName `
-FilterHashtable @{LogName="Security"; Id=4740} `
-MaxEvents 5 -ErrorAction SilentlyContinue
}Never log a user's password or its perceived form. The goal is to confirm that lockouts coincide with Thinfinity sessions and stop after the layout fix is applied — not to reproduce the password.
If you are also evaluating whether real brute-force attempts are mixed in, see Brute Force Detection in Thinfinity Workspace.
In host pools, drift is common: one image was rebuilt last quarter and got the new GPO, the other still runs the old image. FSLogix complicates the picture because it carries HKCU between hosts but not HKLM or .DEFAULT.
Run a host-pool sweep to find the outliers:
Invoke-Command -ComputerName (Get-Content hosts.txt) -ScriptBlock {
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Keyboard Layout" -ErrorAction SilentlyContinue |
Select PSComputerName, IgnoreRemoteKeyboardLayout
}For FSLogix-specific cases:
HKLM\SOFTWARE\FSLogix\Profiles → VHDLocations and that it mounted at the latest logon (event log: Microsoft-FSLogix-Apps/Operational).NTUSER.DAT, and inspect Keyboard Layout\Preload.HKLM and .DEFAULT live on the host's C: drive — not in the FSLogix container. Re-imaging without re-applying these will break logon screens again.HKLM or .DEFAULT.@ ? / \ ; : ' ç ã — and capture a screenshot.If the change introduces a new problem, restore the keys from the backup files you exported earlier:
reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout" /v IgnoreRemoteKeyboardLayout /f
reg import C:\Temp\backup_default_preload.reg
reg import C:\Temp\backup_hkcu_preload.reg
reg import C:\Temp\backup_hklm_keyboard.regReboot the host after any rollback that touched HKLM.
| Need | Command or value |
|---|---|
| Force server-side layout for all RDP/Thinfinity sessions | reg add "HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout" /v IgnoreRemoteKeyboardLayout /t REG_DWORD /d 1 /f |
| Set ABNT2 on the logon screen | reg add "HKU\.DEFAULT\Keyboard Layout\Preload" /v 1 /t REG_SZ /d 00010416 /f |
| Set ABNT2 for the current user | reg add "HKCU\Keyboard Layout\Preload" /v 1 /t REG_SZ /d 00010416 /f |
| List active layouts | Get-WinUserLanguageList |
| ABNT2 KLID | 00010416 |
| ABNT (legacy) KLID | 00000416 |
| Failed logon event | Event ID 4625 — host Security log |
| Account lockout event | Event ID 4740 — DC Security log |
If the layout is still wrong after applying the fixes above, gather the following before contacting Cybele Software support so the case can be triaged in a single round-trip: