Some Linux distributions have a pre-installed background service named BRLTTY that provides access to the console for blind users using a Braille display. These Braille displays connect to the computer using a serial port interface.
Unfortunately, BRLTTY’s default configuration assumes that the port from any general-purpose USB-to-serial adapter is a Braille display and “claims” the port. This causes the standard serial driver to disconnect, preventing the port of connected Arduino boards (like the classic Arduino Nano or any board using CP210x, FTDI, or CH340 chips) from appearing in the Arduino IDE port list.
In this article:
Symptoms
If BRLTTY is interfering with your board’s connection, you will notice the following:
-
The port for your connected Arduino board does not appear in the Tools > Port menu in Arduino IDE.
-
Running the following command in your terminal checks if the BRLTTY daemon is currently active:
ps -C brlttyIf active, the output will list the process:
PID TTY TIME CMD 12037 ? 00:00:02 brltty -
Running the
dmesgcommand right after plugging in your board shows that a serial interface (like/dev/ttyUSB0) was successfully attached but was immediately claimed and disconnected by BRLTTY:ftdi_sio 3-4:1.0: FTDI USB Serial Device converter detected usb 3-4: FTDI USB Serial Device converter now attached to ttyUSB0 usbfs: interface 0 claimed by ftdi_sio while 'brltty' sets config #1 ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
Solutions
Choose one of the following methods depending on your system configuration and whether you need Braille display support.
Option 1: Uninstall BRLTTY
If you do not require Braille display support, the simplest and cleanest solution is to uninstall the BRLTTY package entirely.
Note
On some Linux distributions (such as Pop!_OS), BRLTTY is a dependency of the desktop environment. Attempting to uninstall it may prompt the package manager to remove essential system packages (like pop-desktop). If this occurs, please use Option 2 or Option 3 instead.
-
Open your terminal.
-
Enter the following command to uninstall BRLTTY:
sudo apt remove brltty -
Disconnect your Arduino board, then reconnect it to the USB port. It should now appear correctly.
Option 2: Mask the udev rules
This surgical approach keeps BRLTTY installed on your system but overrides its udev configuration, preventing it from grabbing general-purpose USB-serial converter chips.
-
Open your terminal.
-
Override BRLTTY’s system rules by creating symbolic links pointing to
/dev/nullin/etc/udev/rules.d/for all BRLTTY rules:for f in /usr/lib/udev/rules.d/*brltty*.rules; do sudo ln -sf /dev/null "/etc/udev/rules.d/$(basename "$f")" done -
Reload the
udevsystem to apply the new overrides:sudo udevadm control --reload-rules -
Disconnect your Arduino board and reconnect it to the USB port.
Option 3: Disable the systemd service
On modern Linux distributions that manage BRLTTY via systemd (like Ubuntu 22.04 and newer), you can stop and mask the system service. This prevents BRLTTY from starting automatically when a USB device is plugged in.
-
Open your terminal.
-
Stop and mask the udev-triggered BRLTTY service:
sudo systemctl stop brltty-udev.service sudo systemctl mask brltty-udev.service -
Stop and disable the main BRLTTY service:
sudo systemctl stop brltty.service sudo systemctl disable brltty.service -
Disconnect your Arduino board and reconnect it to the USB port.
Option 4: Exclude specific chips
If you actually use a Braille display and need to keep BRLTTY active, you can modify its rule list so it ignores only the generic USB-to-serial chips used by Arduino boards.
To ensure your changes are persistent and won’t be overwritten by future package updates, copy the BRLTTY rule file to the administrative /etc/udev/rules.d/ directory and edit the copy. Files in /etc/udev/rules.d/ take precedence over those in system directories.
-
Open your terminal.
-
Copy the BRLTTY rule file to the
/etc/udev/rules.d/directory.-
If the rule file is in
/usr/lib/udev/rules.d/:sudo cp /usr/lib/udev/rules.d/85-brltty.rules /etc/udev/rules.d/ -
If the rule file is instead in
/lib/udev/rules.d/:sudo cp /lib/udev/rules.d/85-brltty.rules /etc/udev/rules.d/
-
-
Open the newly copied file with root privileges in a text editor like
nano:sudo nano /etc/udev/rules.d/85-brltty.rules -
Look for the lines that define the Vendor and Product IDs of the USB-to-serial chip your Arduino uses, and comment them out by adding
#at the beginning of each line:-
FTDI FT232R (used on classic Nano):
# ENV{PRODUCT}=="403/6001/*", ... -
CH340:
# ENV{PRODUCT}=="1a86/7523/*", ... -
CP210x:
# ENV{PRODUCT}=="10c4/ea60/*", ...
-
-
Save the file (in nano, press Ctrl + O, then Enter to save, and Ctrl + X to exit).
-
Reload the rules to apply the changes:
sudo udevadm control --reload-rules -
Disconnect your Arduino board and reconnect it to the USB port.