Uma pergunta desafiadora e interessante!
Acho que udev
é capaz de fazer exatamente isso. Crie um arquivo /etc/udev/rules.d/99-barcode-reader.rules
e coloque algo parecido com isto:
ACTIONS!="add", GOTO="barcode_end"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="dead", ATTRS{idProduct}=="beef", PROGRAM="/bin/sh -c 'logger -p user.info Hey, I see a new device $env{BUSNUM} $env{DEVNUM}'", RUN+="/bin/sh -c '/usr/local/bin/your_barcode_application &'"
LABEL="barcode_end"
Substitua "dead" e "beef" pelos valores que você obtém para idVendor e idProduct com lsusb
.
Reinicie o udevd
ou simplesmente o seu servidor e veja o que acontece.