Cómo obtener el nombre de archivo del dispositivo desde la salida lsusb o por la ruta del dispositivo


11

: Pregunta notificación de desconexión / conexión USB

Cuando el dispositivo está enchufado / desconectado, recibo una notificación instantánea, eso es genial. Pero para hacerlo (casi) perfecto, también quiero obtener el nombre de archivo del dispositivo /dev/ttyUSB0, y, mejor aún, todos los enlaces simbólicos.

Pero, no puedo encontrar cómo obtener esta información udev, o de lsusbalguna otra manera. La única identificación del dispositivo que tengo es una ruta de dispositivo como /devices/pci0000:00/0000:00:1d.0/usb5/5-1. ¿Cómo obtener el nombre de archivo del dispositivo?


1
Examine los directorios debajo /dev/disk/, las rutas de etiqueta y de identificación pueden ser útiles.
lornix

Gracias, pero /dev/disksolo contiene dispositivos de almacenamiento. Por ejemplo, no hay nada acerca /dev/ttyUSB0.
Dmitry Frank

¿Cuál es su caso de uso? ¿Qué tiene de especial, /dev/ttyUSB0etc.?
Faheem Mitha

Respuestas:


5

Suponiendo que estoy tratando de encontrar el dispositivo para mi cámara UVC, lsusb me da:

Bus 001 Device 004: ID 1e4e:0102 Cubeternet GL-UPC822 UVC WebCam

El nombre de archivo del dispositivo es entonces /dev/bus/usb/001/004(el primer componente es la identificación del bus, el siguiente es la identificación del dispositivo).


55
Esta no es la forma en que uno puede obtener un nodo de dispositivo como /dev/ttyUSB0.
Dmitry Frank

5

Acabo de crear un script para eso, no es bonito, pero funciona para mí.

Probé este script en Arch Linux con estas configuraciones:

$ uname -a
Linux 4.4.13-1-lts #1 SMP Wed Jun 8 16:44:31 CEST 2016 x86_64 GNU/Linux

Y el nombre de mi dispositivo /dev/sdbes bastante diferente al tuyo, espero que también funcione para ti.

También tenga en cuenta que este script depende del usbutilspaquete para el usb-devicesprograma, creo que está instalado por defecto en todos los Linux, pero podría estar equivocado.

Guión usbname:

#!/usr/bin/bash

# Input should be a single line from lsusb output:
DATA=$1

# Read the bus number:
BUS=`echo $DATA | grep -Po 'Bus 0*\K[1-9]+'`

# Read the device number:
DEV=`echo $DATA | grep -Po 'Device 0*\K[1-9]+'`

FOUND=false
USB_Serial=""

# Search for the serial number of the PenDrive:
while read line
do
  if [ $FOUND == true ]; then
    USB_Serial=`echo "$line" | grep -Po 'SerialNumber=\K.*'`
    if [ "$USB_Serial" != "" ]; then
      break;
    fi
  fi

  if [ "`echo "$line" | grep -e "Bus=0*$BUS.*Dev#= *$DEV"`" != "" ]; then
    FOUND=true
  fi
done <<< "$(usb-devices)"

# Get the base name of the block device, e.g.: "sdx"
BASENAME=`file /dev/disk/by-id/* | grep -v 'part' | grep -Po "$USB_Serial.*/\K[^/]+$"`

# Build the full address, e.g.: "/dev/sdx"
NAME="/dev/$BASENAME"

# Output the address:
echo $NAME

Uso:

$ ./usbname "$(lsusb | grep '<my_usb_label_or_id>')"
/dev/sdb

Esto no funcionará si el dispositivo USB no es un dispositivo de bloque.
Kyle Falconer
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.