Wrong characters in a remote session: keyboard layouts explained
You press a key and a different character appears. Nothing is broken — two machines are disagreeing about what your keyboard is, and there are only three ways that disagreement can happen.
The disagreement
A keyboard does not send letters. It sends scancodes — a number identifying a physical key position. The operating system then applies a layout to decide that position number 44 means z on a US layout, y on a German one, and z again on Turkish Q.
In a remote session there are two operating systems and therefore potentially two layouts. If the tool forwards scancodes, the host layout decides the character. If it forwards characters, your local layout decides. Neither approach is wrong, but they fail in opposite ways, and knowing which one your tool uses tells you immediately what to fix.
| Your tool sends | The character is decided by | Fails when |
|---|---|---|
| Scancodes (key positions) | The host's layout | The host layout differs from your physical keyboard |
| Characters (Unicode text) | Your local machine | Games, shortcuts, and anything reading raw key state |
| A mix | Depends on the key | Modifier keys and dead keys, most confusingly |
Turkish keyboards, specifically
Turkish is where this shows up most, for three reasons that compound.
- Two national layouts. Turkish Q and Turkish F place letters completely differently, and F is not a variant of Q — it is a different design. A host set to Q with an F keyboard in front of you is unusable, and vice versa.
- Letters that do not exist in ASCII.
ç ğ ı İ ö ş ülive in different places on each layout, and a US-configured host has no key positions for them at all. On a US host the letters simply cannot be produced by any key you press. - The dotted and dotless i. Turkish distinguishes
i/İfromı/I, and case conversion follows different rules. Software that assumes English casing can turn one into the other, which is bewildering when it happens inside a remote session where you are already suspecting the keyboard.
AltGr and dead keys
AltGr is not a modifier of its own on Windows — it is reported as Ctrl and Alt pressed together. Remote tools that forward modifiers naively can turn an AltGr combination into a Ctrl+Alt shortcut on the host, so instead of typing @ or { you trigger something. If a symbol on the third level of your keyboard does nothing or does something alarming, this is why.
Dead keys — the ones that produce an accent only when combined with the next keystroke — need the two presses to arrive in order and be interpreted by the same layout engine. If the two halves are handled by different sides of the connection, you get the accent character on its own, or nothing, or both letters unaccented.
Fixing it
- Set the host's layout to match your physical keyboard. The most reliable fix by a distance, and it is a one-time change. On Windows: Settings → Time & language → Language & region, add the layout, and make it the default so it survives a restart and applies at the login screen too.
- Check the language indicator on the host, not on your machine. Windows switches layout per application and remembers it, so one window can be on a different layout from the rest and it will look like the connection is at fault.
- Use the tool's text-input path for anything long. Some remote tools can send text as characters rather than key positions, which sidesteps layout entirely for typing. It is the right tool for a password or a paragraph and the wrong one for shortcuts.
- Use the on-screen keyboard for one awkward character. Clumsy, but it is generated on the host with the host's layout and it always produces what it shows.
- Check Caps Lock on both ends. Sounds trivial, and state can genuinely diverge between the two machines when a session drops mid-keypress.
The one that is not a layout problem
If every key is delayed rather than wrong, that is latency, not layout — the characters are correct but arrive late enough that you type ahead of the display. Different problem, different guide: why the remote cursor lags.
More guides
Never put RDP straight on the internet — and what to do instead
Port 3389 is scanned continuously, credential stuffing against it is automated, and it is the most common entry point for ransomware. Four safer ways to reach the same machine.
Why a remote connection will not establish, and how to tell which layer failed
NAT, CGNAT, symmetric NAT and corporate firewalls each break the connection in a different place. A diagnosis order that identifies the layer in a few minutes.
Why the remote cursor lags, and which of the six causes is yours
Network round-trip, upstream bandwidth, encoder delay, frame rate, resolution and relay hops each add lag in a different way. How to tell them apart and what actually helps.
Try RemoteFrames
Install the host on the computer you want to reach, then enter its 6-digit code in any browser. No account — two free 10-minute sessions a day.
Try RemoteFrames