Back in 2004 I started to think about how I could build a real airliner cockpit entirely based on Linux. I At the end of 2017 (and with a grown family) this idea has evolved into a fun project. The way to that goal is still a long and a very creative one. But today I can share first of all a few specifications of how I proceeded with it and you will find a few images documenting the current status of my Boeing 737-800 (NG) home cockpit.
The first thing to think about when running linux is which flight simulator to pick. The number of candidates is barely countable … For entirely open source fanatics Flight Gear would be the way to go. However, X-Plane was my choice because of its highly sophisticated aerodynamics and visual simulation quality. And X-Plane is extendable on just about every side.
The second thing to think about is how to connect hardware to your Linux box and to the flight simulator itself, and then, which hardware to pick (or vice versa). Hardware there is much. But all available software interfaces are written for Windows-based flight simulators and most of them again for the Microsoft Flight Simulator itself. I have chosen the famous OpenCockpits set of I/O cards for my project and extended it with Leo Bodnar‘s even ore famous joystick and I/O cards.
The way to go was to invent my own interface to OpenCockpits and Leo Bodnar’s I/O cards. I call it xpiocards and it is managed as open source together with my colleague Hans who joins my linux home cockpit fate with his Airbus A320 cockpit. The difficult part was to reverse engineer the not-so-open Open Cockpits hardware communication (the blueprints are open, but the communication protocol is not). This yielded a highly stable USB communication to the client application usbiocards and to a even more stable TCP/IP communication to the xpserver server plugin in X-Plane. Since all the code is custom made I have full control over all issues and can correct bugs on the fly. This is not the case if you build a home cockpit with proprietary flight software. Isn’t it fun to have control over something so complex which is only enjoyable if your flight experience is free of glitches … especially at the last 100 feet prior to a difficult landing?
The great part of the current server client I/O application is that there is no need to manually edit plugin-side dataref list which is exchanged with the clients (in FSUIPC language: defining a list of offsets). The client (in fact any number of clients) simply subscribe to their specific datarefs which are then sent to them in regular intervals. In fact they are only sent if they are updated on the flight simulator side or updated on the client side. Isn’t this a marvellous idea? No need to exchange unnessesary data …
It all started with a few X-Plane datarefs being exchanged between X-Plane and a simple NAV radio panel based on OpenCockpits hardware. I have bought the I/O cards and panels and built the electronics myself. The weak part of OpenCockpits is the uneven backlighting capability and the “not so open” communication protocol of their I/O Cards.
A big progress has happened once my colleague Torsten from CockpitForYou has delivered the motorized B737 Throttle Quadrant. The package was huge and I had to get it from the cargo company office … since I do not own a car the picture above tells you how it can be done with our kids trailer: it is also a cargo bike!
The next great step forward was to complete the full B737 pedestal. For this Lausitz Aviation delivered a highly professional pedestal case in which I could mount the Open Cockpits panels and the underlying electronics.
The current final task was to mount a 55″ TV and also integrate and further develop the outdated OpenGC code into a fully functional Boeing 737 Primary Flight Display (PFD), Navigation Display (NAV) and Engine Indication and Crew Alterting System (EICAS) set of displays on a second monitor.
And yes: the best of all. My colleague Benedikt Stratmann from EADT is building the same beautiful plane with its full functionality by software as I am by hardware. So here you go: a big applause for EADT and their famous x737. You see the airplane above with the Air Greenland livery stationed at the Marina di Campo airport on the Elba island.
So here you get a list on the current hardware / software setup:
- Tuxedo Computers XUX_Cube
- CPU I4790
- 16 GB DDR RAM
- 256 GB SSD
- NVIDIA GTX 970
- Debian Stretch
- X-Plane 10.51 (X-Plane 11 in testing, but stability is more important for me than features)
- Boeing 737 NG from Benedikt Stratmann (x737 @ eadt.eu)
- CockpitForYou Motorized B737 Throttle Quadrant
- Lausitz Aviation Pedestal case with custom made panel holes drilled by my great colleague K.
- 2 original Boeing 727 seats (anyone has the rails to them?) from e-bay
- Open Cockpits USB Expansion Card and 3 Master Cards (2 Master Cards for Pedestal and 1 Master Card for MCP / EFIS Panels)
- Logitech Z623 Speakers and Subwoofer
- 55″ NEC Multisync E556 for Visuals
- 23″ Apple Cinema Display for Glass Cockpit and System
- Trustmaster Joystick and a set of CH Pedals
- Two old but highly stable Melcher Power Supplies (5V and 12V)
- A heater for winter and a ventilator for summer: the home cockpit is currently mounted just under our roof in a non-insulated area.
And watch out for more. The flight controls are in progress …
Do you have an example of how to use xpiocards with the Leo B card?
Yes, there is a test.ini in inidata/ which you can use and in src/ there is a single test program for the leo bodnar card, called bu0836x_test.c or similar. You also have to uncomment the correct test code in usbiocards.c for the test case. You can then start the code under srce with ./usbiocards test
Hello. How did you connected CFY TQ to xplane under linux? As far as i understand, CFY TQ software is windows only =/
The CFY TQ (2014 version, not sure about later ones) consists of 2 I/O cards: a) Leo Bodnar’s BU0836 card, which can be used as a regular joystick cards with buttons and b) OpenCockpits USB DCMotors Plus Card. I have created the so called usbiocards interface which works on Linux / Mac with both cards and connects via the xpserver plugin to X-Plane. You can find all on http://xpiocards.sourceforge.net, please choose the SVN repository since it offers the up-to-date version. There is also a OpenGC based glass cockpit which interfaces with X-Plane. It’s now on the way for a B737 and a A320 (the latter being extended by a colleague). Please try it out and give me feedback. Some C/C++ programming experience is of benefit. But you will have full control on your hardware, that is the good point.
Thanks! But, sadly, we have an ethernet version of TQ
How about you ask Torsten for the protocol and implement it in xpiocards? E.g. a ethernet-based client to the xpserver plugin? I will also upgrade my TQ to a newer one soon and would love some help from other linux based x-plane fanatics. Do you have more information on your cockpit?
Yeah, already asked Torsten for protocol, he promised to ask his developer.
I’m not sure about xpiocards/xpserver, we kinda have our own solution for communicating with xplane. I’d gladly opensource it, but, sadly, it’s not up to me.