How To Install Arduino on Fedora 44

Install Arduino on Fedora 44

Arduino IDE is the go-to software for writing, compiling, and uploading code to microcontroller boards. If you run Fedora 44, you already have one of the most developer-friendly Linux distros available, but getting Arduino working correctly takes more than just downloading a file. This guide walks you through every step to install Arduino on Fedora 44, fix serial port access, and verify your setup with a working board upload.

Fedora 44 shipped in April 2026 with GNOME 50, Linux Kernel 7.0, and GCC 16. It is a solid platform for embedded development, but it does not include Arduino IDE out of the box. You need to install it manually and handle USB permissions before you can upload a single sketch.

This guide covers three installation methods: Flatpak (the recommended path for Fedora), the official Linux AppImage, and the Linux ZIP archive. Each method is explained with the “why” behind every command, not just the “how.” By the end, your IDE will open, detect your board, and upload code without issues.

Before You Start: Prerequisites

Make sure your system is ready before running any install commands. Skipping this check wastes time if a dependency is missing midway through.

Requirements:

  • Fedora 44 (Workstation or Server with a desktop environment)
  • A user account with sudo privileges
  • Internet connection for downloading packages
  • A USB cable and an Arduino board (optional for the install, required for the upload test)
  • At least 500 MB of free disk space
  • Flatpak installed (included by default on Fedora 44 Workstation)

What you should know beforehand:

  • Basic terminal usage (running commands, navigating directories)
  • How to open a terminal on GNOME 50 (press Super, type “Terminal”)
  • Your current Fedora version: run cat /etc/fedora-release to confirm you are on Fedora 44

Step 1: Update Your Fedora 44 System

Before installing anything, update your system packages. This step keeps your DNF package index in sync and prevents conflicts between old cached metadata and new installs.

sudo dnf upgrade --refresh -y

What this does: dnf upgrade fetches the latest package versions. The --refresh flag forces DNF to re-sync metadata from all configured repositories. The -y flag skips the confirmation prompt.

Why it matters: Fedora 44 uses DNF5, which is faster and stricter than previous versions. If your local cache is stale, package installs can fail silently or pull mismatched dependencies. Running this first takes two minutes and prevents hours of debugging later.

Expected output:

Last metadata expiration check: ...
Dependencies resolved.
Nothing to do.
Complete!

If updates are available, DNF will list and install them automatically.

Step 2: Verify Flatpak Is Ready

Fedora 44 Workstation includes Flatpak by default. However, the Flathub repository, where Arduino IDE lives, is not always pre-configured. This step confirms Flatpak is present and adds Flathub if it is missing.

Check if Flatpak is installed

flatpak --version

Expected output:

Flatpak 1.15.x

If this returns “command not found,” install Flatpak first:

sudo dnf install flatpak -y

Add the Flathub repository

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

What this does: This registers Flathub as a remote source for Flatpak apps. The --if-not-exists flag prevents an error if Flathub is already configured.

Why it matters: Flatpak has no default remote on a fresh Fedora install in some configurations. Without Flathub, the flatpak install command has nowhere to look for Arduino IDE and returns a “no remote” error. This one command unlocks access to thousands of verified apps, including Arduino IDE.

Verify Flathub is listed

flatpak remotes

Expected output:

Name    Options
fedora  system,oci
flathub system

You should see flathub in the list before continuing.

Step 3: Install Arduino IDE via Flatpak on Fedora 44

This is the primary and recommended method to install Arduino on Fedora 44. Flatpak packages Arduino IDE in a sandboxed environment with its own runtime libraries. This means you do not need to worry about system-level Java dependencies or missing .so files.

flatpak install flathub cc.arduino.IDE2 -y

What this does: This fetches the cc.arduino.IDE2 package from Flathub and installs it along with the required runtime. The package ID cc.arduino.IDE2 points to Arduino IDE version 2.x, the current generation of the IDE.

Why this matters: The package ID is specific. Using the wrong ID, such as cc.arduino.arduinoide (which is the legacy 1.x version), installs an outdated IDE. Arduino IDE 2.x includes the Language Server Protocol editor, a better board manager, and an integrated debugger. You want 2.x.

Expected output:

Looking for matches...
Found ref 'app/cc.arduino.IDE2/x86_64/stable' in remote 'flathub'
Installing: cc.arduino.IDE2/x86_64/stable
[====================] Installing

cc.arduino.IDE2 permissions:
    devices: all  (USB access)

The install typically takes 2 to 5 minutes depending on your connection speed.

Launch Arduino IDE

Once installed, launch the IDE from the GNOME application menu by searching “Arduino,” or use the terminal:

flatpak run cc.arduino.IDE2

Why this launch command matters: Running it from the terminal on first use lets you see any error output directly. If a permission or runtime issue exists, the error appears here instead of silently failing from the app menu.

Step 4: Fix Serial Port Access on Fedora 44

This is the step most tutorials skip, and it is the reason most people report that Arduino IDE opens but cannot detect their board. On Linux, serial ports like /dev/ttyUSB0 and /dev/ttyACM0 are owned by the dialout group. Your user account is not in that group by default.

Add your user to the dialout group

sudo usermod -aG dialout $USER

What this does: usermod -aG appends the user to the specified group without removing existing group memberships. $USER is a shell variable that automatically uses your current username.

Why it matters: Without dialout membership, the Arduino IDE throws a “permission denied” error when it tries to open the serial port. The board appears in lsusb but the IDE port dropdown stays empty or grayed out. This single command resolves the majority of upload failures on Linux.

Apply the group change

Group memberships do not refresh automatically in an active session. You must log out and log back in, or reboot:

sudo reboot

Why rebooting works: Linux loads group memberships into the user session at login. Adding a group mid-session does not update the running session’s permissions token. Rebooting is the cleanest way to ensure the new group applies correctly. An alternative is to run newgrp dialout in the terminal, but this only applies to that specific shell session.

Verify group membership after reboot

groups $USER

Expected output:

yourusername wheel dialout plugdev

You should see dialout in the list. If you do not, re-run the usermod command and reboot again.

Step 5: Set Up udev Rules for Your Arduino Board

The dialout group fix handles most boards. However, some boards, especially clones using CH340 or CP2102 USB-to-serial chips, require a dedicated udev rule to get consistent port access. udev rules tell the Linux kernel how to set permissions when a specific USB device is plugged in.

Check if your board is detected

Plug in your Arduino board and run:

lsusb

A standard Arduino Uno shows up as ID 2341:0043 Arduino SA Uno R3. A clone with CH340 shows as ID 1a86:7523 QinHeng Electronics CH340 serial converter.

Create a udev rule for common boards

For boards using the CP2102 chip (common on ESP32 clones and some Arduino-compatible boards):

echo 'SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", GROUP="dialout", MODE="0660"' | sudo tee /etc/udev/rules.d/99-arduino.rules

For boards using the CH340 chip:

echo 'SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", GROUP="dialout", MODE="0660"' | sudo tee -a /etc/udev/rules.d/99-arduino.rules

What this does: Each rule tells udev to match a device by its vendor ID and product ID, assign it to the dialout group, and set read/write permissions. The file /etc/udev/rules.d/99-arduino.rules is a custom file, so system updates will not overwrite it.

Why this matters: Without a udev rule, device permissions reset each time you unplug and replug the board. The udev rule makes the permission setting automatic and persistent. You write this file once and never touch it again.

Reload udev rules

sudo udevadm control --reload
sudo udevadm trigger

What this does: udevadm control --reload tells udev to re-read all rule files without a reboot. udevadm trigger re-applies rules to currently connected devices.

Why this is necessary: udev caches its rules at boot. Without reloading, new rules take effect only after the next reboot. These two commands make the new rule active immediately.

Step 6: Configure Arduino on Fedora 44 and Run a Board Test

With the IDE installed and port access fixed, run a board test to confirm everything works end to end. This is the most important verification step because an IDE that opens but cannot upload is not a working setup.

Open the IDE and select your board

  1. Launch Arduino IDE from the app menu or with flatpak run cc.arduino.IDE2
  2. Go to Tools > Board > Arduino AVR Boards
  3. Select your board (for example, Arduino Uno)
  4. Go to Tools > Port
  5. Select the port that matches your board (for example, /dev/ttyACM0)

Why board selection matters: The compiler uses the board profile to generate the correct binary. Selecting the wrong board causes the compiled binary to mismatch the microcontroller architecture. The upload may fail entirely, or the board may behave in unexpected ways.

Upload the Blink example

  1. Go to File > Examples > 01.Basics > Blink
  2. Click the Upload button (the right-pointing arrow icon in the toolbar)
  3. Watch the console output at the bottom of the IDE

Expected output in the IDE console:

Sketch uses X bytes (X%) of program storage space.
Global variables use X bytes (X%) of dynamic memory.

The LED on your Arduino board should then start blinking every second. If you see this behavior, the entire Install Arduino on Fedora 44 setup is complete and confirmed working.

Install Arduino on Fedora 44

Alternative Method A: Install Arduino via AppImage

If you prefer to use the official binary directly from Arduino’s website without Flatpak, the AppImage method is a clean and self-contained alternative.

Download the AppImage

Visit arduino.cc/en/software and download the Linux AppImage 64 bits (X86-64) file. Or use the terminal:

wget -O ~/arduino-ide.AppImage "https://downloads.arduino.cc/arduino-ide/arduino-ide_latest_Linux_64bit.AppImage"

Make it executable

chmod +x ~/arduino-ide.AppImage

Why the chmod step is required: Linux does not treat downloaded files as executable by default. This is a security safeguard. Without setting the execute bit, running the file returns a “permission denied” error even though you own the file.

Run the AppImage

~/arduino-ide.AppImage

No installation is needed. The AppImage runs directly from your home directory. Still apply the dialout group fix from Step 4 because port permissions apply regardless of the installation method.

When to use AppImage: Use this method when you want the official Arduino-signed binary without involving your system’s package manager. It also works well for testing a specific version without affecting an existing Flatpak install.

Alternative Method B: Install via Linux ZIP Archive

The ZIP method gives you a fully extracted application folder. It is portable and transparent. You can copy it to a USB drive or move it between systems without reinstalling.

Download the ZIP file

From the official Arduino download page, get the Linux ZIP file 64 bits (X86-64). Or via terminal:

wget -O ~/arduino-ide.zip "https://downloads.arduino.cc/arduino-ide/arduino-ide_latest_Linux_64bit.zip"

Extract the archive

unzip ~/arduino-ide.zip -d ~/arduino-ide

What this does: unzip extracts the contents into a new directory called arduino-ide inside your home folder.

Run the executable

~/arduino-ide/arduino-ide

Why choose ZIP over AppImage or Flatpak: The ZIP archive is the most portable option. You can run it from a network share, a mounted drive, or any path on the filesystem. It does not require AppImage FUSE support or Flatpak infrastructure. It is especially useful in restricted environments where Flatpak is disabled or FUSE is unavailable.

Troubleshooting Common Issues

Even with a correct install, Fedora-specific quirks can still cause problems. Here are the five most common issues with direct fixes.

Issue 1: Port is grayed out or empty in Arduino IDE

Cause: Your user is not in the dialout group, or you have not logged out since adding the group.

Fix:

sudo usermod -aG dialout $USER
groups $USER  # Verify dialout appears after relogging

Then log out and back in or reboot.

Issue 2: “Permission denied” when uploading a sketch

Cause: The /dev/ttyACM0 or /dev/ttyUSB0 device does not have the correct group permissions.

Fix: Check current permissions first:

ls -l /dev/ttyACM0

The output should show crw-rw---- 1 root dialout. If the group is not dialout, reload udev:

sudo udevadm control --reload && sudo udevadm trigger

Issue 3: Flatpak version cannot access the USB port

Cause: Flatpak sandboxing may restrict direct hardware access on some Fedora configurations.

Fix:

flatpak info --show-permissions cc.arduino.IDE2 | grep device

If device access is missing, override it:

flatpak override --user --device=all cc.arduino.IDE2

Then relaunch the IDE.

Issue 4: Board is not detected by lsusb

Cause: The USB cable is faulty, the USB port is not powered, or the board itself is damaged.

Fix: Try a different USB cable. Many micro-USB cables are charge-only with no data lines. Test the port with another USB device. Run lsusb before and after plugging in the board to confirm the device appears.

Issue 5: Arduino IDE AppImage crashes on launch

Cause: FUSE is not available on the system, or the AppImage runtime is incompatible with the current kernel version.

Fix:

sudo dnf install fuse fuse-libs -y

If FUSE is already installed and the crash persists, switch to the Flatpak method. Flatpak bundles its own runtime and avoids system-level FUSE issues entirely.

r00t is a Linux Systems Administrator and open-source advocate with over ten years of hands-on experience in server infrastructure, system hardening, and performance tuning. Having worked across distributions such as Debian, Arch, RHEL, and Ubuntu, he brings real-world depth to every article published on this blog. r00t writes to bridge the gap between complex sysadmin concepts and practical, everyday application — whether you are configuring your first server or optimizing a production environment. Based in New York, US, he is a firm believer that knowledge, like open-source software, is best when shared freely.

Related Posts