How to Type Symbols on Linux (Ctrl + Shift + U)

Igor R.

July 2, 2026

Quick answer: In most Linux apps, hold Ctrl + Shift, press U, type the symbol’s Unicode hex code (2192 for →), then press Enter or Space. If nothing happens, the app isn’t wired into an input method — use a Compose key instead (Compose, then o, then c gives ©), or just copy the symbol below.

Tap to copyCopied!

What’s actually happening when you press Ctrl + Shift + U

This is the part most guides skip, and it explains almost every problem you’ll hit.

Ctrl + Shift + U is not a kernel feature or a desktop feature. It belongs to the text-input layer your app is using. Three different things can provide it:

  • IBus — the input method framework that ships by default on GNOME, Ubuntu, Fedora Workstation, and ChromeOS. It catches the keystroke before your app sees it and inserts the character.
  • GTK itself — GTK’s built-in input context supports hex entry natively, so GTK apps handle Ctrl + Shift + U even when no framework is running.
  • fcitx5 — the main IBus alternative. Its Unicode module supports the same shortcut.

Qt has no built-in equivalent. Neither does a bare terminal console. That’s the whole story: when Ctrl + Shift + U does nothing, it’s because the app has no input layer that implements it — not because Linux is broken. Every fix below follows from that one fact.

Method 1: Ctrl + Shift + U (Unicode hex entry)

Best for: a one-off symbol you’ll probably never type again.

  1. Put your cursor where you want the symbol.
  2. Hold Ctrl + Shift and press U. An underlined u appears.
  3. Release the keys and type the hex code point00b0 for °, 2192 for →, 03c0 for π.
  4. Press Enter or Space to commit it.

The hex code is simply the U+ number without the U+ prefix: U+00B0 becomes 00b0. Case doesn’t matter — 00B0 and 00b0 both work, and leading zeros can usually be dropped. Type the full four digits anyway; it’s the reliable habit.

Need the code point for a character you already have? Paste it into the Symbol Identifier and it will tell you.

Typing a Unicode hex code on Linux with Ctrl Shift U

Where it works

EnvironmentCtrl + Shift + U?
GNOME apps (Text Editor, Files, GNOME Terminal)✅ Yes
Firefox, Chrome, Chromium✅ Yes
GTK apps generally✅ Yes — GTK provides hex entry itself, IBus or not
KDE Plasma / Qt apps (Kate, Konsole, Dolphin)⚠️ Only with an input method attached (QT_IM_MODULE=ibus or fcitx5)
Electron apps (VS Code, Slack, Discord)⚠️ Inconsistent — depends on which IM module the app detects
LibreOffice⚠️ Works with IBus running; otherwise use Alt + X (Method 3)
Plain TTY / console (Ctrl+Alt+F3)❌ No — there’s no input method layer at all

On fcitx5, the shortcut behaves the same way: Ctrl + Shift + U, type the hex, press Space. It also gives you something IBus doesn’t — Ctrl + Shift + Alt + U opens a search box where you can find a character by its description (“eggplant”, “arrow”) instead of its code.

Common code points

SymbolNameHex codeUnicodeHTML entity
°Degree00b0U+00B0°
Right arrow2192U+2192→
Bullet2022U+2022•
©Copyright00a9U+00A9©
Euro20acU+20AC€
Em dash2014U+2014—
×Multiplication00d7U+00D7×
÷Division00f7U+00F7÷
±Plus-minus00b1U+00B1±
πPi03c0U+03C0π
Trademark2122U+2122™
Not equal2260U+2260≠

Method 2: The Compose key

Best for: symbols and accents you type every day. Once it’s set up, Compose o c for © is far easier to remember than Ctrl+Shift+U 00a9.

Step 1 — Enable it

There is no Compose key by default; you have to assign one. Common choices are Right Alt, the Menu key, or Caps Lock.

DesktopWhere to set it
GNOMESettings → Keyboard → Compose Key (older releases: GNOME Tweaks → Keyboard & Mouse → Compose Key)
KDE PlasmaSystem Settings → Keyboard → Advanced → Position of Compose key
Xfce / Cinnamon / MATEKeyboard settings → Layout → Options → Compose key position
Any X11 session (temporary)setxkbmap -option compose:ralt
GNOME on Wayland (permanent)gsettings set org.gnome.desktop.input-sources xkb-options "['compose:ralt']"
Debian / Ubuntu (system-wide)Add XKBOPTIONS="compose:ralt" to /etc/default/keyboard, then sudo dpkg-reconfigure keyboard-configuration

Step 2 — Use it

Press Compose, release it, then type the sequence one key at a time. You don’t hold anything down.

SymbolCompose sequence
©o c
®o r
t m
°o o
±+ -
×x x
÷: -
— (em dash)- - -
– (en dash)- - .
- >
é' e
ñ~ n
ü" u
= e
£- L
½1 2
. .
” “< " and > "

Where to find your exact sequences

Your system ships the authoritative list as a plain text file. Open it and search:

bash

grep '"©"' /usr/share/X11/locale/en_US.UTF-8/Compose

This is the single best trick in this article. Every sequence your machine supports is in that file — no guessing, no stale blog posts. (GTK apps read that file too, along with ~/.XCompose and ~/.config/gtk-4.0/Compose.)

Step 3 — Make your own sequences

Create or edit ~/.XCompose:

include "%L"

<Multi_key> <c> <c> : "✓"
<Multi_key> <x> <x> <x> : "✗"
<Multi_key> <s> <h> : "¯\\_(ツ)_/¯"

The include "%L" line pulls in all the default sequences — without it, you’d lose them. Save, then log out and back in. IBus reads ~/.XCompose as well, but it caches it, so run ibus restart if a new sequence doesn’t take.

Method 3: App-specific methods

LibreOffice: type the code, then Alt + X

LibreOffice has its own converter that works whether or not IBus is running — useful in exactly the situation where Ctrl + Shift + U fails.

  1. Type the hex code directly into your document: 2192
  2. Press Alt + X.
  3. The code flips into the character: →

Press Alt + X again immediately afterwards and it toggles back to the code — handy for identifying a character you didn’t type yourself. This has been in LibreOffice since 5.1. On a Mac it’s Cmd + Option + X, and in a few locales where Alt + X collides with the menus it’s Alt + C instead. Code points below U+0020 aren’t converted.

Terminal and code

WhereHow
Bash / Zshprintf '\u2192\n' or echo -e '\u2192'
Vim / Neovim (insert mode)Ctrl + V, then u, then 2192
EmacsC-x 8 RET, then the code point or the character’s name
Python"\u2192"
HTML&rarr; or &#8594;
CSScontent:"\2192"
JavaScript"\u2192"

Full list: HTML entity codes for every symbol.

Character Map and emoji

  • GNOME Characters (gnome-characters) or Character Map (gucharmap) — search any character by name, see its U+ code, copy it. Install with sudo apt install gnome-characters or your distro’s equivalent.
  • Emoji picker in GTK apps: press Ctrl + . (period). GTK also has a hidden gem: Ctrl + Shift + E followed by a name inserts an emoji directly.
  • Emoji picker on KDE Plasma: press Meta + . (Plasma 5.18 and later). It copies your pick to the clipboard — paste it with Ctrl + V.

Method 4: Copy and paste

If a shortcut isn’t working and you just need the character now, copy it from the strip at the top of this page, or grab it from the copy & paste symbol tool. It works in every app, on every desktop, with no setup — including the Qt and Electron apps where the shortcuts are unreliable.

Do Windows Alt codes work on Linux?

No. Codes like Alt + 0176 for ° are a Windows feature and do nothing on a standard Linux desktop. If you came here out of Windows habit, use this mapping instead:

Windows habitLinux equivalent
Alt + 0176 (°)Ctrl + Shift + U → 00b0, or Compose o o
Alt + 0169 (©)Ctrl + Shift + U → 00a9, or Compose o c
Win + . (emoji)Ctrl + . in GTK apps, Meta + . on KDE
Word’s Alt + XWorks the same in LibreOffice

The good news: Compose sequences are a lot easier to remember than four-digit Alt codes. (Still on Windows too? See why Alt codes stop working and the Alt Code Finder.)

Which method should you use?

SituationBest method
A rare symbol, onceCtrl + Shift + U + hex code
Accents and symbols you type dailyCompose key
Writing in LibreOfficeType the code, press Alt + X
Qt / KDE apps where shortcuts failCharacter Map or copy-paste
Terminal, scripts, or codeprintf '\uXXXX' or the language’s escape
Browsing for a symbol you can’t nameGNOME Characters / gucharmap
You just need it in your clipboard nowCopy-paste

Troubleshooting

Ctrl + Shift + U does nothing

Work through these in order:

  1. Check IBus is running: ps aux | grep ibus-daemon. If it isn’t, and the app isn’t GTK, nothing is listening for the shortcut.
  2. Check your input method environment: run echo $GTK_IM_MODULE $QT_IM_MODULE $XMODIFIERS. On an X11 session with IBus you want ibus, ibus, @im=ibus. On Wayland, GTK_IM_MODULE is normally left unset or wayland — forcing it to ibus there causes more problems than it solves.
  3. You’re in a Qt or Electron app. Qt has no built-in hex entry, so it needs QT_IM_MODULE=ibus (or fcitx5) to be set. Some Electron apps only cooperate with GTK_IM_MODULE=xim. Use the Compose key or copy-paste instead.
  4. You’re on fcitx5. The shortcut works, but the Unicode addon has to be enabled in fcitx5’s configuration.
  5. You’re in a plain console. There’s no input framework in a TTY. Nothing will work there.

If none of that applies, don’t fight it — set up a Compose key. It runs through a different mechanism (XKB), so it very often works where Ctrl + Shift + U doesn’t.

The Compose key isn’t working

  • It has to be enabled and assigned first — there’s no default (see Method 2).
  • Don’t hold the keys. Press Compose, release, then tap each key in turn.
  • Sequences are case-sensitive: - L gives £; - l may not.
  • After editing ~/.XCompose, log out and back in (and ibus restart if you’re on IBus).

A symbol shows as a box ▯

That’s tofu — the font you’re using doesn’t contain that glyph. The character is fine; it just isn’t being drawn. Install a broad font set:

DistroCommand
Debian / Ubuntusudo apt install fonts-noto fonts-noto-color-emoji
Fedorasudo dnf install google-noto-sans-fonts google-noto-emoji-fonts
Archsudo pacman -S noto-fonts noto-fonts-emoji
openSUSEsudo zypper install noto-sans-fonts noto-coloremoji-fonts

Then run fc-cache -f and restart the app. If it still shows a box, switch the app’s font to one that includes the character.

The symbol pastes as a question mark or garbage

Your terminal or file probably isn’t set to UTF-8. Check with echo $LANG — you want something ending in .UTF-8.

Frequently Asked Questions

How do I type a symbol on Linux?

Press Ctrl + Shift + U, type the Unicode hexadecimal code point (such as 2192 for ), then press Enter. You can also use a Compose key, the Character Map application, or simply copy and paste the symbol.

How does Ctrl + Shift + U work on Linux?

Hold Ctrl + Shift and press U, then type the Unicode hexadecimal code point (for example, 00b0 for the degree symbol °) and press Enter or Space to insert the character.

What is the Compose key and how do I enable it?

The Compose key lets you type symbols using short key sequences. Enable it in Settings → Keyboard → Compose Key (or GNOME Tweaks, depending on your desktop environment), assign a key to act as Compose, then press Compose followed by a sequence such as o, c to type ©.

Why doesn’t Ctrl + Shift + U work in my app?

The shortcut works in most GTK and IBus applications, but not in every Qt application or terminal emulator. If it doesn’t work, try using the Compose key, Character Map, or copy and paste the symbol. Also make sure IBus is configured as your input method.

How do I type emoji on Linux?

In many GTK applications, press Ctrl + . (period) to open the emoji picker. You can also use the GNOME Characters application to browse and insert emoji.

Why does my symbol show as a box on Linux?

A box or empty square usually means your current font does not include that character. Install a font with broad Unicode support, such as the Noto font family, and switch your application to use that font if necessary.

Do Windows Alt codes work on Linux?

No. Alt codes such as Alt + 0176 are specific to Windows and do nothing on a standard Linux desktop. Use Ctrl + Shift + U with the Unicode hex code, or set up a Compose key — Compose o o gives the degree symbol °.

Recap

Two core methods carry almost everything: Ctrl + Shift + U followed by the hex code, and a Compose key for mnemonic sequences like o c → ©. When they fail, it’s nearly always because the app has no input layer that implements the shortcut — so fall back to LibreOffice’s Alt + X, Character Map, or plain copy-paste. And if a glyph renders as a box, that’s a font problem, not a typing problem: install Noto.


Written by Igor R. Tested on GNOME with IBus. Last updated June 2026. Symbol code points follow the Unicode Standard.

Leave a Comment