Pregunta Listado de todas las unidades USB en Linux


¿Cómo puedo obtener una lista de unidades extraíbles (conectadas a USB) en Linux? Estoy de acuerdo con el uso de KDE, GNOME u otras librerías DE si facilita las cosas.


9
2018-05-06 12:30


origen


Respuestas:


Creo que una buena idea es usar interfaz udev de Python.

Pequeño ejemplo (por supuesto en su caso tiene que ajustar algunos filtros):

In [1]: import pyudev
In [2]: pyudev.Context()
In [3]: ctx = pyudev.Context()
In [4]: list(ctx.list_devices(subsystem='usb'))
Out[4]: 
[Device(u'/sys/devices/pci0000:00/0000:00:1a.0/usb2'),
 Device(u'/sys/devices/pci0000:00/0000:00:1a.0/usb2/2-0:1.0'),
 Device(u'/sys/devices/pci0000:00/0000:00:1a.0/usb2/2-2'),

Es una buena manera en la mayoría de los casos, ya que los nuevos sistemas usan udev.


4
2017-11-22 00:28



Después de todo este tiempo, la pregunta se desbloqueó de nuevo ...

Al final usé UDisk a través de la interfaz D-Bus como se muestra aquí.


2
2017-12-07 22:56



Algún tiempo atrás obtuve este pequeño guión (no es mío) pero seguramente me ayudó mucho para ponerlo como referencia

#!/usr/bin/python
import sys
import usb.core
# find USB devices
dev = usb.core.find(find_all=True)
# loop through devices, printing vendor and product ids in decimal and hex
for cfg in dev:
      try:
              #print dir(cfg)
              sys.stdout.write('Decimal VendorID=' + str(cfg.idVendor) + ' & ProductID=' + str(cfg.bDeviceClass) + '  ' + str(cfg.product) + ' ' + str(cfg.bDeviceSubClass)+ '  ' + str(cfg.manufacturer)+'\n')
      except:
              print 

0
2017-08-09 11:06



Cualquier razón para no analizar los resultados de lsusb? Estoy seguro de que hay módulos para esto, pero, de nuevo, fácil a veces es lo mejor.

No puedo ayudarte con Python, en Perl podría hacerlo:

#!/usr/bin/env perl

use strict;
use warnings;

my @data;
foreach (`lsusb`) {
  next unless /Bus (\S+) Device (\S+): ID (\S+) (.*)/;
  push @data, { bus => $1, device => $2, id => $3, info => $4 };
}

use Data::Printer;
p @data;

que, en mi computadora, da como resultado

[
    [0] {
        bus   005,
        device   001,
        id   "1d6b:0001",
        info   "Linux Foundation 1.1 root hub"
    },
    [1] {
        bus   004,
        device   001,
        id   "1d6b:0001",
        info   "Linux Foundation 1.1 root hub"
    },
    [2] {
        bus   003,
        device   001,
        id   "1d6b:0001",
        info   "Linux Foundation 1.1 root hub"
    },
    [3] {
        bus   002,
        device   001,
        id   "1d6b:0001",
        info   "Linux Foundation 1.1 root hub"
    },
    [4] {
        bus   001,
        device   003,
        id   "0bda:0158",
        info   "Realtek Semiconductor Corp. USB 2.0 multicard reader"
    },
    [5] {
        bus   001,
        device   002,
        id   "064e:a129",
        info   "Suyin Corp. "
    },
    [6] {
        bus   001,
        device   001,
        id   "1d6b:0002",
        info   "Linux Foundation 2.0 root hub"
    }
]

Tenga en cuenta que Data::Printer y es p la función es el dumping de objetos amigables para los humanos con fines de inspección solamente.


-1
2017-11-22 00:37