I picked up a couple of Sparkfun's Arduino Pro Micros this week to help me run test inputs on a bigger project. I thought they'd be perfect, since they're easy to program over the USB interface.
However when I attempted to program them, the Arduino IDE would report each time:
avrdude: ser_open(): can't open device "/dev/ttyACM0": Device or resource busy avrdude: ser_send(): write error: Bad file descriptor
I checked the normal causes: I'm part of dialout, made sure the port was owned by dialout as well, checked permissions... Nope.
Took me a while, but I eventually found that ModemManager was grabbing the serial port immediately on creation or when the board reset to the bootloader. As a quick fix I just uninstalled ModemManager entirely.
sudo apt-get remove modemmanager