How to Type Thai on Linux and ChromeOS
Our main setup guide covers Windows, macOS, and mobile; this one fills the gap for Linux and ChromeOS. Both ship with Thai input — you just have to enable it, learn the key to switch, and confirm you are on the layout you are practising. The four-key test is the same as on Windows: with Thai active, D must be ก, F must be ด, J must be ่, G must be เ. If D is ง, you added Pattachote. ThaiTyper does not need this to run a drill — it maps KeyboardEvent.code through CHARS.kedmanee — but every other app on the machine does.
Linux has two stacks that both claim to be “Thai,” and mixing them is the main failure mode. An xkb layout (the GNOME/KDE Keyboard panel, `setxkbmap th`) is a keymap: physical keys become Thai characters. An input-method engine (ibus-libthai, fcitx5-libthai, ibus-m17n) can add sequence checking on top, or it can install a second Thai that is Pattachote or TIS-820.2538. If Super+Space does nothing, an IME is usually eating the chord. Pick one stack, delete the other Thai, then prove Kedmanee with D F J G.
Linux: GNOME (Ubuntu, Fedora)
Open Settings, go to Keyboard, and under Input Sources click + Add Input Source…. Search Thai. The plain source named Thai is Kedmanee (xkb `th`). Thai (Pattachote) is `th+pat`. Thai (TIS-820.2538) is a third variant you do not want unless a workplace specified it. Some rare variants are hidden until you run `gsettings set org.gnome.desktop.input-sources show-all-sources true` in a terminal and reopen the dialog. Add only Thai. If Pattachote is already in the list, select it and remove it.
GNOME puts a language indicator in the top bar once two sources exist. Switch with Super+Space (next) and Shift+Super+Space (previous). Those shortcuts live under Keyboard → Keyboard Shortcuts → View and Customize Shortcuts → Typing. If Super+Space opens the Activities overview instead, another binding stole it — GNOME’s Activities is Super by itself; Super+Space should be the input chooser. Do not enable Caps Lock as a layout switch. Caps Lock has to stay off so Shift is free for โ on Shift+F and ๊ on Shift+U.
Ubuntu’s older path said Region & Language. Current GNOME (46 and later, including Ubuntu 24.04+) is Settings → Keyboard → Input Sources. Fedora Workstation is the same panel. After adding Thai, the indicator should toggle between something like en and th, not between two Thais. Prove it in gedit or the terminal: D ก, F ด, J ่, G เ. Then type the same four keys in ThaiTyper. If they match, the OS and the trainer agree. If the trainer is Kedmanee and gedit types ง on D, the OS source is Pattachote even if the label said Thai.
- Settings → Keyboard → Input Sources → + Add Input Source… → Thai (not Pattachote, not TIS).
- Super+Space to switch. Shift+Super+Space for the previous source.
- gsettings get org.gnome.desktop.input-sources sources should list ('xkb', 'th'), not ('xkb', 'th+pat').
- Four-key test in a native app, not only in the browser trainer.
Linux: KDE and IBus/Fcitx
On KDE Plasma, add a Thai layout under System Settings → Keyboard → Layouts → Add. Pick Thai, variant Default or Kedmanee if the list spells it out, not Pattachote. Enable Configure layouts and a Layout Indicator in the panel. Plasma’s own switcher is often Meta+Alt+K or a configured shortcut under Keyboard → Layouts → Advanced; do not assume it is Super+Space unless you bound it. If IBus is also running (common on Ubuntu-based KDE spins), you now have two switchers. That is the Super+Space does nothing bug.
IBus: run ibus-setup or open Settings from the ibus panel icon. Add an input method. Prefer a plain xkb Thai if you only need a keymap. If you install ibus-libthai, you get an engine with three layouts inside it — Ketmanee, Pattachote, and TIS-820.2538 — plus sequence-check levels (Passthrough, Basic, Strict). Kedmanee learners want Ketmanee and Passthrough or Basic; Strict Check will swallow keystrokes that ThaiTyper still expects to see, because the trainer is not going through IBus. fcitx5-libthai is the Fcitx5 equivalent. Bind one switch shortcut (Ctrl+Space is a common IBus default) and disable the desktop’s competing chord, or the other way around.
A practical rule: one daemon. If GNOME is already switching with Super+Space via xkb, do not also add ibus-libthai “for better Thai.” You will get two Thais and a shortcut fight. Use ibus-libthai only when you want its sequence checker in native apps and you are willing to set the engine’s layout to Ketmanee explicitly. After any of these changes, run the four-key test in Kate or gedit, not in Chrome, because the browser may still be mapping codes itself inside ThaiTyper.
- Plasma: System Settings → Keyboard → Layouts → Add → Thai, default variant.
- IBus: ibus-setup → Input Method → Add. If you use ibus-libthai, open its Preferences and set Ketmanee, not Pattachote.
- Fcitx5: add fcitx5-libthai, then Configure → add Thai, layout Kedmanee.
- If Super+Space is dead, quit ibus-daemon or unbind IBus’s Ctrl+Space. Only one switcher.
ChromeOS
On a Chromebook, open Settings from the time in the shelf (bottom right). Under Device, open Keyboard and inputs (the label has been Keyboard → Change input settings on older builds, and Languages and inputs → Inputs and keyboards on others). Click Add input methods, search Thai, and add it. When ChromeOS offers a layout name, pick Thai Kedmanee. There is a Thai Pattachote option on many builds; do not add it “just in case.” Enable Show input options in the shelf so a language code sits next to the clock.
Switch with Ctrl+Shift+Space to cycle input methods, or Ctrl+Space to jump to the last one, depending on the build. Google’s help page currently documents Ctrl+Shift+Space to move until the language you want is selected, and Ctrl+Space to switch back. The shelf indicator is the source of truth: it should read a Thai code when Kedmanee is on, not US. Click it and look at the list — you want one Thai, named Kedmanee. Two Thais is the Win+Space problem with a ChromeOS accent.
ChromeOS can also show a virtual keyboard. You do not need it for Kedmanee on a physical Chromebook keyboard; turn it off if it covers the shelf indicator. Linux (Crostini) inside ChromeOS is a separate machine: adding Thai in ChromeOS Settings does not add Thai to the Debian container. If you type in a Crostini IDE, set up GNOME/xkb inside the container as in the sections above. ThaiTyper in the Chrome browser uses the Chromebook’s input method for any field that is not the trainer, and the trainer’s own CHARS table for the drill.
A Chromebook with a US-labelled keyboard is still a Kedmanee board once Thai Kedmanee is on: F is ด, J is ่, minus is ข. There are no Thai caps on most Chromebooks. Use the shelf indicator and the four-key test, not the printed legends. If you also enable the on-screen keyboard “for Thai,” you now have two ways to type the same character and a reason to look down. Physical keys plus the trainer glow are enough.
- Settings → Device → Keyboard and inputs → Add input methods → Thai Kedmanee.
- Turn on Show input options in the shelf. Confirm the list has one Thai.
- Ctrl+Shift+Space until the shelf shows Thai, then D F J G: ก ด ่ เ.
- If you use Crostini, add xkb Thai inside the container too. The two settings do not share.
Learn the switch shortcut
On every platform the workflow is the same: add Thai once, then rely on a single shortcut to flip between it and English. Super+Space (GNOME), Ctrl+Space (IBus/Fcitx, and sometimes ChromeOS), and Ctrl+Shift+Space (ChromeOS) are the common ones. Pick the chord, commit it to memory, and switching stops interrupting your typing. Glance at the indicator before a password, a URL, or a package name. จขช in a phone field is Digit0 minus Equal with Thai still on; it is not a broken form.
Conflicts are named, not mysterious. Super+Space vs GNOME Activities: Activities is Super alone. Super+Space vs IBus: disable one. Ctrl+Space vs IDE completion (VS Code IntelliSense): that is why some Chromebook programmers rebind “Switch to next available input method” in the Key Shortcuts app under Device. Do not use Caps Lock as a language key on any of these systems. You need both Shift keys for โ ๊ ๋ ็ ู and the Thai digits. A Caps-Lock-as-switch habit from Windows will follow you to Linux and wreck the same chords.
- GNOME: Super+Space next, Shift+Super+Space previous. Bindings live under Keyboard Shortcuts → Typing.
- IBus/Fcitx: Ctrl+Space is the common default. Kill it if GNOME already owns Super+Space.
- ChromeOS: Ctrl+Shift+Space cycles; Ctrl+Space jumps back. The shelf indicator is truth.
- Caps Lock is never the language key. You need both Shifts for โ (Shift+F) and ๊ (Shift+U).
Pick the Kedmanee layout
On every platform you will usually find a plain Thai option and sometimes a Thai (Pattachote) one. The plain Thai option is Kedmanee — the layout most learners want and the one ThaiTyper defaults to. xkb spells that as `th`. Pattachote is `th+pat` or the variant labelled Pattachote. TIS-820.2538 is a third map. ibus-libthai’s Preferences list Ketmanee, Pattachote, and TIS-820.2538 by those names; Ketmanee is the spelling they use for Kedmanee. If the keys do not match your practice, you probably selected the Pattachote variant.
ThaiTyper’s on-screen board can sit on Kedmanee while the OS is on Pattachote. Then D types ก in the trainer and ง in LibreOffice. That split is the whole reason this guide exists. Set the in-app layout switch to the same map as the OS. If you are learning Kedmanee, both are Kedmanee. Delete the other Thai from Input Sources, IBus, Fcitx, and the ChromeOS shelf. Presence in the list is how Super+Space or Ctrl+Shift+Space lands on the wrong home row after a reboot.
The four-key test, again, because Linux labels lie more than Windows labels. Thai, Thai (Thailand), Thai (Kedmanee), Ketmanee, and th can all be Kedmanee. Thai (Pattachote), Thai (Pat), th+pat, and pat are not. After every distro upgrade, run D F J G once. Upgrades have re-added Pattachote as a second source. Ten seconds. Saves a week of “Linux Thai is broken.”
The four-key test on Linux
Open a native text field — gedit, gnome-text-editor, Kate, the GNOME terminal after `setxkbmap` is not enough by itself if IBus is in the way. Switch to Thai with your chosen shortcut. Type D, F, J, G with no Shift. You want ก ด ่ เ. ง ท า ั is Pattachote’s home of those four physical keys (D F J G there are ง ก า ั). If you get Latin dfjg, Thai is not active. If you get a mix, two sources are fighting and the indicator is lying.
Then type the same four keys in ThaiTyper with the OS still on Thai. The trainer will produce ก ด ่ เ from CHARS.kedmanee even if the OS is Pattachote, which is how people think they are fine until they paste into Firefox. So the native-app test is the one that counts for “setup is done.” The trainer test only tells you the app’s own switch is Kedmanee. Keep them pointing at the same layout.
- Switch to Thai. Confirm the top-bar or shelf indicator.
- D F J G → ก ด ่ เ in gedit/Kate/ChromeOS Docs.
- If ง: remove Pattachote / th+pat / ibus-libthai Pattachote.
- If latin: the shortcut did not switch. Fix the binding, then retest.
xkb is a keymap; IBus is an engine
setxkbmap th (or GNOME’s Thai source) is enough to type Kedmanee. You do not need an IME for ordinary Thai the way you need one for Chinese or Japanese. ibus-libthai and fcitx5-libthai add sequence validation: they can block a tone mark typed with no consonant, which is a kindness in a word processor and a surprise in a game or a trainer that wants the raw key. ThaiTyper ignores that layer because it reads KeyboardEvent.code. LibreOffice will not. If ่ never appears in Writer but appears in the trainer, Strict Check on ibus-libthai is the suspect.
When you do want the engine, set its layout to Ketmanee and its check to Passthrough until you can type ไม่ (W, comma, J) without the engine deleting ไ. Then try Basic. Strict is for people who already type Thai and want the computer to refuse illegal clusters. It is not a teaching tool for week one. Mixing xkb Thai plus ibus-libthai Pattachote is how D becomes a random ง. One Thai. One stack.
Wayland, Caps Lock, and a dead Super+Space
On Wayland, setxkbmap from a terminal may not stick; GNOME and KDE own the keymap through their Settings panels. If you followed an X11 blog post and ran setxkbmap th, then logged back into a Wayland session, the change vanished. Use Settings → Keyboard. IBus on Wayland talks to the compositor; if ibus-daemon is not running, GTK 4 apps can lose combining marks. For Kedmanee you still only need xkb, but if ่ produces a dotted circle in a GTK 4 app and not in ThaiTyper, install ibus as the session IM and keep its engine on xkb Thai, not a second layout.
Caps Lock as a layout switch appears in some GNOME Tweaks and IBus preferences. Leave it off. The same-hand Shift problem from the mistakes guide is worse on Linux laptops with a short right Shift. You need that key for โ. If Super+Space stopped working after a Fedora upgrade, look at Keyboard Shortcuts → Typing, and at whether IBus reinstalled itself. The fix is a named binding, not “reinstall Thai fonts.” Thai fonts (fonts-thai-tlwg, fonts-noto-cjk) affect rendering, not which character D produces.
One machine, one Thai
The Windows guide’s rule is the Linux rule: never add a second Thai “just in case.” A spare Pattachote next to Kedmanee is the main reason a working setup starts typing ง on D after one Super+Space too many. Count the sources: English, Thai. That is the list. th+pat, TIS-820.2538, ibus-libthai Pattachote, and a ChromeOS Thai Pattachote are how the list becomes a lottery.
ThaiTyper can teach the fingers before the OS is ready. Real apps cannot. Finish the OS step once, verify with ก on D in a native field, and the layout you practised is the layout you will use in Firefox, LibreOffice, and a terminal. If you dual-boot with Windows, run the four-key test on each OS — they do not share Input Sources. The trainer will agree with whichever board you set in the app; the rest of the computer will not, until you do.
SSH sessions and remote desktops are a third machine. xkb Thai on the laptop does not follow you into a server that has no Thai locale. Type Thai locally, or install the same xkb `th` on the remote side. The four-key test has to pass in the window you will actually paste into. ThaiTyper in a browser on the laptop still only proves the trainer.
- GNOME: one ('xkb', 'th'). No th+pat.
- IBus: either xkb Thai or ibus-libthai Ketmanee, not both.
- ChromeOS: one Thai Kedmanee on the shelf. No Pattachote neighbour.
- Retest D F J G after every OS upgrade.
Related guides

A practical guide for learners who use a mechanical or laptop keyboard without Thai legends. Compare Thai keycaps, stickers, overlays, and blank keys, then choose the setup that supports real touch typing instead of constant key hunting.

Turn on the Thai keyboard and switch languages quickly on Windows, macOS, iOS, and Android — with how to confirm you are on Kedmanee and fix common snags.

Kedmanee is the Thai keyboard layout on nearly every device; Pattachote is faster on paper but rarely the default. Here is how their home rows compare and which one to learn.