Fact-checked by Grok 2 weeks ago

Intelligent Input Bus

The Intelligent Input Bus (IBus) is an open-source input method framework designed for Linux and Unix-like operating systems, enabling multilingual text input through a modular architecture that supports various language engines and scripts across graphical applications. Originally developed by Chinese engineer Peng Huang and first released in 2008, IBus emerged as a next-generation alternative to earlier frameworks like SCIM and UIM, quickly becoming the de facto standard for input methods in major Linux distributions such as Fedora, Ubuntu, and Arch Linux due to its lightweight design and extensibility. At its core, IBus operates on a client-server model, with a central daemon (ibus-daemon) managing communication between input method engines (IMEs), applications, and user interfaces; key components include the abstract IBusEngine for engine implementation, IBusPanelService for on-screen panels, and IBusConfig for persistent settings. It supports a wide array of languages via pluggable engines—such as and for , for , and ibus-m17n for over 50 scripts including , , and Thai—allowing users to switch methods via hotkeys like Super + Space and customize layouts through a GTK-based setup tool (ibus-setup). As of 2025, IBus remains actively maintained under the LGPL-2.1 license, with the latest stable releases in the 1.5.x series incorporating enhancements for Wayland compatibility, Qt integration, and semantic pre-edit APIs for advanced engine development, ensuring its relevance in modern desktop environments like GNOME and KDE.

Overview

Definition and Purpose

The Intelligent Input Bus (IBus) is an open-source input method framework for Linux and Unix-like operating systems, employing a bus-like architecture to enable the processing of multilingual input. It functions as a central bus that interconnects applications, input panels, and input engines, allowing for modular integration without imposing direct dependencies among these components. The primary purpose of IBus is to support the entry of characters from languages using complex scripts, such as , , , and others, by leveraging editors (IMEs). These IMEs transform user inputs—typically phonetic, stroke-based, or shape-based—into corresponding glyphs or characters, making it easier to type non-Latin text in graphical user interfaces. For instance, IBus accommodates methods like for , Anthy for , and for . IBus is licensed under the GNU Lesser General Public License version 2.1 or later, and its official development resources are available at github.com/ibus/ibus. It emerged as a successor to the Smart Common Input Method (SCIM) to address shortcomings in prior input frameworks.

History and Development

The Intelligent Input Bus (IBus) was initially developed by Peng Huang as a lightweight framework for and operating systems. The project began in response to recommendations from the OSS Forum Work Group 3, which advocated for bus-centric architectures in frameworks to improve and interoperability, similar to implementations. This motivation stemmed from the need to overcome limitations in prior frameworks like the Smart Common Input Method (SCIM), particularly its C++ (ABI) instability that led to crashes and compatibility problems across distributions. To address these issues, IBus was built using for engine development, for , and GLib for core utilities, enabling greater stability and easier integration with diverse desktop environments. A key milestone in IBus's adoption occurred in 2009, when it became the default input method framework in Fedora 11, released on June 9, following extensive upstream development by Huang. Later that year, Ubuntu 9.10 (Karmic Koala), released on October 29, replaced SCIM with IBus as the standard framework, marking its rapid shift to mainstream use in major distributions. These integrations highlighted IBus's design advantages, including reduced overhead and better support for multilingual input without the ABI-related disruptions that plagued SCIM. IBus has continued to evolve through community contributions, with ongoing maintenance hosted on GitHub under the ibus organization. It is deeply integrated into prominent desktop environments, serving as the default input method in since its early adoption and supported in via configuration tools like systemsettings. Distributions such as have used IBus as the primary framework since the early , particularly for sessions, reflecting its widespread post-2010 acceptance beyond initial and implementations. The latest stable release, version 1.5.33, was issued on October 5, 2025, incorporating enhancements for compatibility and pre-edit semantics.

Design Principles

Goals

The primary goals of the Intelligent Input Bus (IBus) project center on delivering a user-friendly input method interface that simplifies switching between keyboard layouts and languages for end-users across Linux and Unix environments. This includes providing full-featured tools, such as the ibus-setup utility, to configure input methods intuitively without requiring advanced technical knowledge. Additionally, IBus aims to enhance security by employing process isolation mechanisms, ensuring that issues in individual input engines do not compromise the entire system. A key objective is to offer a universal through bindings, enabling developers to create and integrate input methods in various languages like C++ and with minimal friction. This developer accessibility supports diverse regional input needs, accommodating engines for languages such as (pinyin), Japanese (anthy), Korean (hangul), and others via extensible modules. IBus was designed as a lightweight, modular system that loads input engines on demand to optimize resource usage, particularly memory, addressing inefficiencies in predecessor frameworks like SCIM. These goals emphasize cross-desktop compatibility, integrating seamlessly with environments such as GNOME (GTK), KDE (Qt), and legacy XIM protocols to ensure broad applicability.

Motivation

The development of the Intelligent Input Bus (IBus) was driven by significant shortcomings in its predecessor, the Smart Common Input Method (SCIM), which suffered from C++ Application Binary Interface (ABI) instability that frequently led to application crashes and system instability. SCIM's design also lacked adequate process isolation, allowing faults in individual input method engines to propagate and potentially crash the entire system due to direct loading of dynamic modules. Furthermore, SCIM provided poor support for multilingual setups in Unix-like systems, as it loaded all available engines at startup, resulting in high memory consumption, slow initialization, and difficulties in managing diverse language inputs efficiently. A broader motivation for IBus was the need for a robust framework capable of handling complex input methods required for , such as for and for , while remaining extensible for global multilingual use across environments. This addressed the challenges of non-Latin script input, where traditional keyboard mappings fell short, necessitating dynamic conversion and composition mechanisms that SCIM could not reliably provide. IBus was inspired by recommendations for a "bus" architecture to decouple input method components, drawing from the CJK OSS Forum Workgroup 3 draft on engine service provider interfaces, which emphasized modularity and on-demand loading. This approach met the growing demand for improved non-Latin input support in distributions during the late 2000s, as efforts expanded in ecosystems. Its adoption as the default framework in distributions like 11 and 9.10 underscored its role in enhancing stability and usability for diverse users.

Architecture

Core Components

The Intelligent Input Bus (IBus) is structured around several key components that enable its modular input method framework. At its core is the ibus-daemon, which serves as the central bus process responsible for managing the overall environment, including engine registration, input event routing, and coordination with client applications. engines (IMEs) form another fundamental building block, providing the specific conversion logic for multilingual text input, such as phonetic-to-character transformation for languages like or . Complementing these, the ibus-panel offers a lightweight typically embedded in system notification areas, allowing quick access to engine selection and status indicators. Finally, ibus-config handles settings management, storing and retrieving user preferences for engines and global configurations through a dedicated backend service. Engine loading in IBus operates on an on-demand basis, activating specific IMEs only when triggered by an application focus change or language switch, which optimizes resource usage by avoiding unnecessary resident processes. This dynamic mechanism relies on the IBusFactory class to instantiate engines as needed, ensuring efficient handling of diverse input scenarios without preloading all available methods. IBus is implemented primarily , leveraging the GLib for event handling, cross-platform compatibility, and asynchronous operations, with additional bindings to facilitate engine development and scripting. Its modularity is enhanced by running each IME in a separate process, which provides to prevent a faulty engine from crashing the daemon or affecting other system components, thereby improving stability in multilingual environments. IBus employs as its communication backbone for inter-component interactions.

Communication and Integration

The Intelligent Input Bus (IBus) primarily employs the for , enabling seamless interactions between the ibus-daemon, input method engines, client applications, panels, and configuration tools. This architecture allows components to operate as independent processes, facilitating and efficient resource management without requiring a central monolithic server. For legacy applications on X11, IBus provides compatibility through the X Input Method (XIM) , acting as an to handle input events and candidate selection for older software that lacks native support. Native integration with modern graphical toolkits is achieved via dedicated modules: ibus-gtk for GTK-based applications (supporting versions 2, 3, and 4), which embeds IBus context handling directly into the widget framework, and ibus-qt for applications (including Qt5 and integration with ), ensuring consistent behavior across diverse environments. On compositors, IBus leverages the (version 2 and later) through extensions like ibus-wayland, allowing direct communication with the compositor for input handling in native applications. Full integration has been available since 40 (released in 2021), where IBus serves as the default framework with optimized support, and Plasma 5.20 (released in 2020), which introduced enhanced IME capabilities via the "IBus Wayland" option in . Security in IBus communications is enforced through D-Bus policies, which define access controls and authentication mechanisms to prevent unauthorized inter-process interactions; for instance, the bus daemon applies policy rules to validate connections and message routing based on user privileges and SELinux contexts where applicable. This setup ensures secure operation without exposing sensitive input data. Additionally, D-Bus enables real-time engine switching—users can change input methods via hotkeys like Super+Space—without necessitating a daemon restart, as the protocol supports dynamic proxying and event propagation across active sessions.

Features

Key Capabilities

One of the primary capabilities of the Intelligent Input Bus (IBus) is its on-demand loading of input method engines, which activates engines only when required rather than preloading all installed ones, thereby reducing the overall and improving startup efficiency compared to predecessors like SCIM. This design choice ensures that system resources are conserved during idle states or when using simple keyboard layouts, making IBus suitable for resource-constrained environments. IBus seamlessly integrates support for X Keyboard Extension (XKB) layouts alongside s, allowing users to switch between standard keyboard configurations and complex input engines without disruption. Additionally, configuration changes propagate immediately through the IBusConfig interface, applying updates to settings without necessitating a daemon restart, which enhances by minimizing . For developers, IBus provides a comprehensive C API for core functionality, complemented by bindings that facilitate custom development and integration. These bindings enable straightforward extension of the framework in scripting environments, supporting of new engines. IBus includes notification area integration via its setup GUI, offering a tray icon for quick access to input method selection, status monitoring, and daemon controls. Security is bolstered by leveraging for , which enforces and sandboxing to prevent unauthorized access between components.

Compatibility and Extensions

IBus demonstrates broad across major desktop environments. It serves as the default input method framework in since version 3.6, where users can configure it directly through Settings > Keyboard > Input Sources. In KDE, IBus integrates via the Input Method Panel, requiring the ibus-daemon --panel=/usr/lib/kimpanel-ibus-panel command for proper functionality. XFCE supports IBus through the imsettings mechanism, which automatically loads it during sessions, similar to LXDE. For MATE and , IBus operates via available packages in distributions like , with receiving enhanced support for both traditional keyboard layouts and IBus input methods, including full compatibility as of recent updates. IBus provides cross-protocol support for diverse graphical environments, ensuring seamless input handling. It natively works with X11 and the legacy XIM protocol through environment variables such as XMODIFIERS=@im=ibus. Compatibility extends to versions 2, 3, and 4 via GTK_IM_MODULE=ibus, and to versions 4, 5, and 6 via QT_IM_MODULE=ibus. For , support is emerging and robust as of 2025, facilitated by the ibus-wayland component and input-method protocols (v1 for , , and ; v2 for , Hyprland, and others), allowing manual startup with ibus start --type wayland in compatible compositors. The 1.5.33 release (October 2025) includes further improvements, such as fixes for reset signals with GTK_IM_MODULE=ibus and IBusMessage APIs for popup dialogs. In comparisons to alternatives, IBus emphasizes D-Bus-based standardization for reliable communication, though this contributes to higher resource overhead compared to lighter frameworks. Unlike Fcitx, which prioritizes a lightweight core and Qt-focused integration suitable for , or the simpler, script-based uim with modular but limited IME support, IBus offers greater modularity as the successor to the older SCIM framework, which suffered from maintenance issues and bugs. In the 2020s, Fcitx5 has emerged as a key rival, providing faster performance and a modern, addon-based design while maintaining broad language support. IBus supports extensions through its public , particularly the IBusEngine , which enables third-party developers to create and integrate custom engines using languages like C or . This factory-based system, via IBusFactory, allows dynamic loading of engines without affecting the core framework. As of November 2025, the upstream stable version of IBus is 1.5.33, available in major distributions through standard packages, including (via the ibus package and subpackages like ibus-gtk3 and ibus-wayland), (in the main repositories as 1.5.32), and (in the Extra repository as version 1.5.32-1).

Input Method Support

Available Engines

The Intelligent Input Bus (IBus) supports a wide array of engines, which are dynamically loaded at to enable multilingual text input across dozens of languages as of the 1.5.33 release. These engines are implemented as plugins that integrate with the IBus framework, allowing users to switch seamlessly between them via the input method panel. The framework's modular design facilitates support for complex scripts, phonetic conversions, and table-based methods, with engines categorized primarily by linguistic region or input type.

East Asian Engines

For , IBus provides specialized engines tailored to phonetic, syllabic, and ideographic input systems.
  • ibus-anthy: This engine facilitates input using the Anthy library for Kana-to-Kanji conversion, supporting Hiragana, , and Romaji modes with predictive dictionary lookup.
  • ibus-chewing: Designed for Traditional , it employs the input method with Zhuyin () symbols for phonetic entry and fuzzy matching.
  • ibus-hangul: A Korean engine based on libhangul, it handles syllable composition and offers ( character) conversion options.
  • ibus-libpinyin: This engine uses a statistical for Simplified input, featuring cloud dictionary integration and user word learning.
  • ibus-libzhuyin: Focused on Traditional , it provides Zhuyin/ phonetic input with sentence-level prediction and customizable fuzzy rules.
  • ibus-mozc: Google's Mozc engine for , it supports Romaji-to-Kana/Kanji conversion with advanced prediction, , and multilingual toggling.

Southeast Asian and Other Engines

IBus extends support to Southeast Asian and select other scripts through dedicated engines for regional keyboards and transliterations.
  • ibus-avro: A phonetic engine for (), it converts Romanized input to Devanagari-like script using Avro's probabilistic mapping and fixed keyboard layouts.
  • ibus-libthai: For input, this engine leverages the LibThai library to support Ketmanee, TIS-820, and Pattachote layouts with tone mark handling and spell-checking.
  • ibus-unikey: Tailored for , it implements and VNI input methods for placement and offers VIQR compatibility for legacy text.

Table-Based Engines

Table-based methods, common for shape or stroke recognition in logographic languages, are handled by flexible engines.
  • ibus-table: This versatile engine supports various Chinese table methods, including Cangjie (radical-based), Wubi (stroke-based), and others, using predefined lookup tables for character selection.

Multilingual Engines

For broad coverage across scripts, IBus includes engines that draw from extensive databases.
  • ibus-m17n: Integrated with the m17n-db library, it enables input for more than 60 languages, including Devanagari (Hindi), Arabic, and other Indic or right-to-left scripts, via customizable transliteration rules.

Deprecated Engines

Certain older engines have been phased out in favor of more robust alternatives.
  • ibus-pinyin: This legacy Chinese Pinyin engine, which relied on static dictionaries, is deprecated and replaced by ibus-libpinyin for improved accuracy and performance.

Plugin Development and Examples

Developers can create custom input method engines for IBus using its C or Python APIs, which provide the foundational infrastructure for handling user input and generating text output. The ibus-tmpl project offers starter templates in both languages, allowing developers to extend the IBusEngine class to implement core functionality such as processing key events and managing text buffers. Engines are typically built and packaged using Autotools for configuration and compilation, though some projects incorporate Meson or CMake for modern build processes. Once developed, plugins are distributed separately through distribution repositories or direct installation, and contributions are often hosted on GitHub for community review and integration. A prominent example is ibus-m17n, which integrates the m17n library to support multilingual input via tables from the m17n-db database. This engine enables diverse input methods, such as the for phonetic transcription or the Hindi InScript scheme for direct consonant-vowel mapping, allowing users to switch between modes like and native scripting. By leveraging m17n's extensible database, ibus-m17n handles more than 60 languages without requiring engine-specific code for each, making it suitable for broad efforts. Another illustrative plugin is , a lightweight framework for table-driven input methods defined through XML configuration files. It supports custom layouts like the method, where users input characters via sequences of up to 24 distinct key strokes representing graphical components. Developers can extend ibus-table by creating new XML tables for additional languages or variants, such as two-set keyboards or simplified phonetic arrays, promoting reusability across similar input paradigms. To create a basic , developers register the with the ibus-daemon during initialization, overriding virtual methods to process events via signals like process_key_event. The then handles input by updating preedit text with ibus_engine_update_preedit_text for candidate display and committing final strings using ibus_engine_commit_text once a selection is confirmed. Recent enhancements in IBus 1.5.32, released in 2025, improve compatibility for engines through support for the input-method version 2, enabling better handling of multi-seat environments and customizable repeat rates.

References

  1. [1]
    ibus/ibus: Intelligent Input Bus for Linux/Unix - GitHub
    IBus is an Intelligent Input Bus. It is a new input framework for Linux OS. It provides full featured and user friendly input method user interface.Intelligent Input Bus · Pull requests 13 · Issues 239 · Security
  2. [2]
    IBus Reference Manual
    Intelligent Input Bus (IBus) 1.5.4 reference manual. The latest version of this documentation can be found on-line at https://github.com/ibus/ibus/wiki ...
  3. [3]
    Linux input method framework brief summary - GNOME Blogs
    Jan 15, 2011 · IBus is the de facto standard of input method framework on nowadays Linux distros, whose author is a Chinese developer, Huang Peng, who has been ...
  4. [4]
    IBus - ArchWiki
    Jun 5, 2025 · IBus (Intelligent Input Bus) is an input method framework, a type of application that allows for easily switching between different keyboard layouts.
  5. [5]
    I18N/IBus - Fedora Project Wiki
    IBus is an Intelligent Input Bus. It is a new input framework for Linux OS. It provides full featured and user friendly input method user interface.
  6. [6]
    ibus-1.5.25 - Linux From Scratch!
    ibus is an Intelligent Input Bus. It is a new input framework for the Linux OS. It provides a fully featured and user friendly input method user interface.
  7. [7]
    ibus - Community Help Wiki - Ubuntu Documentation
    Nov 9, 2015 · The Intelligent Input Bus (IBus) is an input method framework for multilingual input in Unix-like operating systems. It's called "Bus" because ...
  8. [8]
    Releases · ibus/ibus - GitHub
    Now IBus provides the pre-edit semantic APIs for IBus engines and IBus panel(and gnome-shell) and this is a note for developers.
  9. [9]
    ibus - Debian Package Tracker
    A new upstream version 1.5.33-rc2 is available, you should consider packaging it. Created: 2025-08-24 Last update: 2025-11-11 04:01. The VCS repository is ...
  10. [10]
    ReadMe
    ### Summary of IBus Project
  11. [11]
    Features/IBus - Fedora Project Wiki
    iBus is a new input method framework under active development which is designed to overcome the limitations of SCIM. It will be the default in Fedora 11.
  12. [12]
    71 Crash caused by SCIM (C++ ABI problems) - SourceForge
    Hello! Our product uses Eclipse Platform for GUI on Linux. We support many OS systems and provide one binaries setMissing: transition | Show results with:transition
  13. [13]
    IBus in Ubuntu 11.04 - Apurba Paul - WordPress.com
    May 22, 2011 · ... (IBus) is an framework for multilingual input in Unix like software. This became the default input method for Ubuntu from the version Ubuntu 9.10 ...
  14. [14]
    IBus - Gentoo Wiki
    IBus (Intelligent Input Bus) is an open source input framework for Linux and Unix. Contents Installation USE flags
  15. [15]
    F42 Change Proposal: Ibus 1.5.32 (self-contained)
    Jan 15, 2025 · IBus 1.5.32 beta 1 will be released soon and it will support the Wayland input-method protocol version 2. Now I'd summarize the configurations ...
  16. [16]
    SDB:Wayland input methods - openSUSE Wiki
    Oct 13, 2025 · The following sections describe how to enable input methods in the commonly used desktop environments supporting Wayland. KDE Plasma Wayland.
  17. [17]
    D-Bus Specification - Freedesktop.org
    The following rules define a valid object path. Implementations must not send or accept messages with invalid object paths. The path may be of any length. The ...Introduction · Type System · Message Protocol · Authentication ProtocolMissing: IBus | Show results with:IBus
  18. [18]
    ibus tips - DesktopI18N's Blog - WordPress.com
    Mar 10, 2015 · ibus displays the engine switcher dialog with Super+space key. The default delay time is 400 milliseconds. If you switch two engines only and ...
  19. [19]
    ibus shouldn't have a notification icon, or it should be optional #513
    May 22, 2015 · It is for displaying current status of ibus, and providing some menu to choice input methods, to show setup dialog, or to restart and exit ibus by mouse.Missing: integration | Show results with:integration
  20. [20]
    ibus works with gnome desktop but not with window managers like ...
    May 22, 2015 · In Gnome, KDE, LXDE and maybe XFCE4 will call imsettings, which loads IBus. But other window managers do not call that, so that's what you see.Missing: maintenance | Show results with:maintenance
  21. [21]
    Cinnamon Desktop Gets Improved Support for Keyboard Layouts ...
    Oct 2, 2025 · The Cinnamon desktop environment will be fully compatible with Wayland for both traditional layouts and IBus input methods. Marcus Nestor ...
  22. [22]
    Monthly News – September 2025 - The Linux Mint Blog
    Oct 2, 2025 · This new support is fully compatible with Wayland for both traditional layouts and IBus input methods. ... But why doesn't the official Cinnamon ...
  23. [23]
    WaylandDesktop
    ### Summary of Wayland Support for IBus
  24. [24]
    Input method - ArchWiki
    Nov 2, 2025 · The most common IMF is IBus (often used in GTK-based environments like GNOME), followed by Fcitx5 (mostly used in Qt-based environments like KDE) ...
  25. [25]
    ibus - What are the differences between the different input methods?
    Apr 18, 2013 · I am currently using iBus as input method (I am learning Japanese and Korean) which is default in Ubuntu but I don't like it very much (not sure why though).KMFL not working with either SCIM or IBUS, ubuntu 14.04xubuntu - IBus not properly set up - Ask UbuntuMore results from askubuntu.comMissing: motivation | Show results with:motivation
  26. [26]
    Fcitx5 - ArchWiki
    Aug 26, 2025 · Fcitx5 is an input method framework with a lightweight core, offering additional language support via addons. It is the successor to Fcitx.Missing: comparison 2020s<|control11|><|separator|>
  27. [27]
    ibus - Fedora Packages
    ibus is an Intelligent Input Bus for Linux OS. It has subpackages like ibus-devel, ibus-gtk3, ibus-libs, and ibus-wayland.
  28. [28]
    ibus 1.5.32-1 (x86_64) - Arch Linux
    Architecture: x86_64. Repository: Extra. Split Packages: libibus. Description: Intelligent input bus for Linux/Unix.
  29. [29]
    ibus packages - Repology
    Information on all packages for project ibus.
  30. [30]
    New Zhuyin engine based on libzhuyin for IBus - GitHub
    New Zhuyin engine based on libzhuyin for IBus. Description: It includes a Chinese Zhuyin (Bopomofo) input method based on libzhuyin for IBus.
  31. [31]
  32. [32]
    phuang/ibus-tmpl: The template engine for IBus - GitHub
    The template engine for IBus. Contribute to phuang/ibus-tmpl development by creating an account on GitHub.
  33. [33]
    DevGuide
    ### Summary: Building IBus Engines and Packaging with Autotools or Meson
  34. [34]
    The m17n engine for IBus - GitHub
    The m17n engine for IBus. Contribute to ibus/ibus-m17n development by creating an account on GitHub.
  35. [35]
    Debian -- Details of package ibus-m17n in sid
    IBus-m17n is a IM Engine for multiple languages, based on IBus. IBus-m17n enables IBus to input many non-latin characters from the keyboard using libm17n ...Missing: plugin | Show results with:plugin
  36. [36]
    acevery/ibus-table: The tables engines for IBus - GitHub
    IBus-Table is the IM Engine framework for table-based input methods, such as ZhengMa, WuBi, ErBi, CangJie and so on.Missing: plugin | Show results with:plugin
  37. [37]
    Package:IBus Table - Funtoo
    Jan 20, 2024 · The ibus-table family of packages provides table based input for languages such as the many Chinese languages, Japanese, Korean and more.Missing: plugin | Show results with:plugin
  38. [38]
    IBusEngine - ibus.github.io
    An IBusEngine provides infrastructure for input method engine. Developers can "extend" this class for input method engine development. see_also ...Missing: guide | Show results with:guide
  39. [39]
    IBus 1.5.32 plan - DesktopI18N's Blog - WordPress.com
    Jan 13, 2025 · IBus 1.5.32 beta 1 will be released soon and it will support the Wayland input-method protocol version 2. Now I'd summarize the configurations of Wayland ...Missing: engine | Show results with:engine<|control11|><|separator|>