Skip to content

Repository files navigation

Universal FMC Keyboard Input

Universal FMC Keyboard Input is an X-Plane plugin that routes physical keyboard input to the FMC, FMS, or GPS command set of supported aircraft.

Supported aircraft

Aircraft Detection Captain / first officer Notes
Zibo 737 B738 plus Zibo command probe Yes Uses laminar/B738/button/fmc* commands
X-Plane default 737 B738 without the Zibo probe Yes Uses sim/FMS and sim/FMS2
X-Plane default A330 A330 Yes Uses sim/FMS and sim/FMS2
X-Plane default SR22 SR22 Single system Uses sim/GPS/gcu478

Unsupported aircraft are left untouched; their key events continue through X-Plane normally.

Install

Copy the complete UniversalFMCKeyboardInput directory into:

X-Plane 11/Resources/plugins/

or:

X-Plane 12/Resources/plugins/

A release package has this layout:

UniversalFMCKeyboardInput/
├── lin_x64/UniversalFMCKeyboardInput.xpl
├── mac_x64/UniversalFMCKeyboardInput.xpl
├── win_x64/UniversalFMCKeyboardInput.xpl
├── LICENSE
├── README.md
└── VERSION

Configure controls

Bind either or both commands in X-Plane's keyboard or joystick settings:

Universal/FMC_Keyboard/Toggle_Keyboard_Input_Captain
Universal/FMC_Keyboard/Toggle_Keyboard_Input_FO

Invoking the active side's command again disables capture. Invoking the other side while capture is active switches sides without an intermediate disable. The first-officer command controls the same single GPS unit on the SR22.

When capture is active, a small KB:CAP, KB:FO, or KB:SR22 indicator appears at the bottom-right of X-Plane's global desktop.

Input behavior

The plugin handles letters, digits, space, Backspace/Clear, Delete, Enter, slash, period, plus, and minus where the aircraft exposes a matching command. Control- and Alt-modified shortcuts pass through. Key-up events and unsupported keys also pass through.

Plus and minus share one FMC command on the 737 and A330. The plugin tracks the expected sign independently for each side so repeated requests for the already-selected sign do not toggle it accidentally. The state resets whenever the aircraft or selected system changes.

Build and test

Requirements:

  • CMake 3.25 or newer
  • A C++20 compiler
  • The platform toolchain for Linux, macOS, or 64-bit Windows

Run the complete developer build and test workflow:

cmake --workflow --preset dev

The installable platform package is written directly to:

build/dev/package/UniversalFMCKeyboardInput/

For an optimized build:

cmake --workflow --preset release

On macOS, a universal release can be configured explicitly before building:

cmake --preset release \
  '-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64' \
  -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0
cmake --build --preset release
ctest --preset release

The repository vendors only the SDK headers and import libraries required by this plugin. To use another X-Plane SDK installation:

cmake --preset dev -DXPLANE_SDK_ROOT=/absolute/path/to/XPSDK
cmake --build --preset dev
ctest --preset dev

Linux deliberately does not link against XPLM_64.so; X-Plane resolves the SDK symbols when it loads the plugin. The Linux ABI test verifies this and checks all five required plugin entry points.

Project structure

src/core/       Pure aircraft, keyboard, routing, and state logic
src/xplane/     Thin XPLM lifecycle and UI adapter
tests/          Behavioral and binary ABI tests
third_party/    Minimal, licensed X-Plane SDK subset
.github/        CI and relevant issue forms

The core has no dependency on XPLM, which keeps behavior deterministic and directly testable. The adapter owns all X-Plane handles, callback registration, aircraft refresh, command lookup caching, and status-window lifecycle.

Compatibility policy

The plugin compiles against XPLM 2.00, 2.10, 3.00, and 3.01 declarations. It does not opt into XPLM 4-only APIs, preserving compatibility with X-Plane 11 while still using modern global-desktop windows.

Changing an aircraft's command names requires a code and test update. Missing target commands are not swallowed: the keyboard event passes through so another X-Plane handler can process it.

License

The plugin is released under the MIT License. The vendored X-Plane SDK subset remains under Laminar Research's SDK license in third_party/xplane-sdk/license.txt.

About

A tool for inputting FMC using the keyboard.

Resources

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages