Installing Incyclist on a Linux box

Here are a few tricks to help you get Incyclist up and running on Linux systems.
The descriptions here were tested on Ubuntu-based systems.
Some differences exist between 22.04 LTS and 24.04 LTS releases (see below for more details).
One fellow cyclist reported that they worked on Arch Linux too.
Other distributions may work as well.
If you have successfully installed Incyclist on other Linux versions or with other smart trainers using this FAQ, I would be very grateful for any feedback or suggestions for improvement.

Supported Smart Trainers and Devices

Most devices that support ANT+ can be operated using the linux Incyclist app.
See below for information on how to get ANT+ working.
I have tested two smart trainers that work well under Linux:
   - Jetblack Volt
   - Wahoo KickR Snap.

Some older devices with a serial interface (also known as COM or RS232 interface) work well, especially DAUM bikes and cross trainers.
You will find information on how to get the serial interface working with Incyclist below.
   - All Daum Classic and Daum Premium models are supported (i.e. Daum 8008, Daum 8080, Daum 8i)
   - I successfully tested a DAUM Ergolyps Cardio Pro with the Linux app.

Devices with BLE interfaces are not yet supported on Linux.
   - Please note, that the Windows and MAC versions of Incyclist both support BLE.
   - The above-mentioned KickR Snap works well on a Windows PC with BLE.

Appimages and Incyclist download

As Incyclist is distributed as an Appimage, it runs on all major Linux distributions. Download it from the author's homepage.
There are only a few basic prerequisites that must be met though.

Ubuntu 22.04 LTS and Debian 13 (Trixie)

The FUSE package

On a fresh installed minimal Ubuntu 22.04 LTS instance, Incyclist won't start. If started from the command line, the application throws following error message:

Incyclist complains about missing FUSE

./incyclist.appimage 
dlopen(): error loading libfuse.so.2

AppImages require FUSE to run.
You might still be able to extract the contents of this AppImage
if you run it with the --appimage-extract option.

Fixing the missing FUSE

On my system, the problem disappeared after installing an alternative (Xfce) display manager with the xubuntu-desktop package. But the easiest hassle free way to get Incyclist running, is to simply install FUSE from the repository:

Install FUSE

sudo apt install fuse

Fixing the missing FUSE on Debian 13 (Trixie)

Installing fuse does not help on Debian 13. A user reports, that he had to install the package libfuse2t64 containing the library libfuse.so.2.

Ubuntu 24.04 LTS

Missing sandbox

On a fresh installed Ubuntu 24.04 LTS instance, Incyclist won't start. If started from the command line, the application throws following error message:

Incyclist complains about missing sandbox

./incyclist.appimage 

[4568:0130/145445.179350:FATAL:sandbox/linux/suid/client/setuid_sandbox_host.cc:169] 
The SUID sandbox helper binary was found, but is not configured correctly. 
Rather than run without sandboxing I'm aborting now. 
You need to make sure that /tmp/.mount_IncyclS9qRnr/chrome-sandbox is owned by root and has mode 4755.

Fixing the missing sandbox

Several online resources report, that the issue lies with the AppArmor configuration in Ubuntu 24.04 and not with the AppImage or Incyclist.
You can disable the sandboxing restriction for all programs using the following command:

Disabling the sandboxing restriction temporarily

sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=1

Alternative: make the change persistent

To make the change persistent, edit  /etc/sysctl.conf
and add kernel.apparmor_restrict_unprivileged_userns = 0 to that file.

Communication between Incyclist app and the bike

The Linux version of the App does not support Bluetooth yet. But many trainers can communicate with Incyclist using ANT+ or serial communications. Both work fine but some problems might occure.

Problems with the ANT+ Stick (Dongle)

I tried out several brands of ANT+ Sticks. None of them functioned out of the box although the system recognizes them as valid USB devices.
Incyclist was not able to pair a smart trainer or even closed unexpectedly during application start.
It appeared, that they all use the same Dynastream chip set for which I found several sites reporting issues with missing rules for the device.
If your stick doesn't function with Incyclist, it probably has the Dynastream Device ID. I used the lsusb command to find that out:

Find out the Device ID of the ANT+ Dongle

lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 0a5c:2145 Broadcom Corp. BCM2045B (BDC-2.1) [Bluetooth Controller]
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 0fcf:1008 Dynastream Innovations, Inc. ANTUSB2 Stick

Fixing the rules issue of ANT+ Sticks with device ID 0fcf:1008 or 0fcf:1009

The missing rules will prevent non-root users from using the stick for wireless communications.
The fix is to create a file with the rules, and to put it in the right place:

Create the rules file

nano 42-ant-usb-sticks.rules

Content for the rules file

# This files changes the mode of the Dynastream ANT UsbStick2 so all users
# can read and write to it.
#
# This file should go into '/etc/udev/rules.d'. Note that it should go in
# before 73-seat-late.rules for `uaccess` to work.

ACTION!="add", GOTO="openant_rules_end"
SUBSYSTEM!="usb", GOTO="openant_rules_end"

ATTR{idVendor}=="0fcf", ATTR{idProduct}=="1008", ENV{ID_ANT_DEVICE}="1", TAG+="uaccess"
ATTR{idVendor}=="0fcf", ATTR{idProduct}=="1009", ENV{ID_ANT_DEVICE}="1", TAG+="uaccess"

LABEL="openant_rules_end"

Move the file to its final destination

sudo mv 42-ant-usb-sticks.rules /etc/udev/rules.d/

Unplug / Plug the ANT+ Stick

After having having applied the fix you need to unplug/plug the USB stick once

Problems with serial communication ports

Some trainers, particularly DAUM bikes and cross trainers, use serial interfaces, also known as COM ports.
These can be connected directly to a COM port on older PCs, or via USB-serial or Bluetooth-serial adapters.
If you encounter problems, the following causes may apply to your setup:
   - missing permissions to use the serial interface
   - the serial port is already in use by the ModemManager
   - the serial parameters don't match with the settings on your bike

Fixing the permission issue by adding your user to the dialout group

# Replace the user name with your actual user name on the system: 
sudo adduser <<user_name>> dialout

Fixing the ModemManager issue

# on my system, the ModemManager took the serial port as soon as I plugged in a USB to Serial adapter
# so I disabled it 
sudo systemctl disable ModemManager

Configuring the serial port for my device

# this will put the interface in RAW mode, without flow control using 9600 baud for the communication
# works well with my DAUM Ergolyps cross trainer
sudo stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb \
  -ixon -ixoff -crtscts \
  raw -echo -icanon -isig -iexten \
  min 1 time 0

That should be it