■ Manual Operatiu Wiki · GNU/Linux · Administració de Sistemes

Identificació de
Perifèrics a Linux

Manual complet amb format wiki per identificar, diagnosticar i monitoritzar perifèrics connectats a un sistema GNU/Linux. Inclou opcions, exemples reals, diagnosi normal/anòmal, capes del SO i scripts d'automatització.

Kernel Space udev Mòduls Wiki PRO+
00

Presentació i metodologia

Linux ofereix un conjunt d'eines de línia de comandes que permeten identificar qualsevol perifèric connectat al sistema: des de dispositius USB i targetes PCI fins a discs, impressores i mòduls del kernel. A diferència d'entorns gràfics, les comandes de terminal proporcionen informació detallada directament des de les capes del sistema operatiu.

Aquest manual segueix una estructura wiki amb tres eixos principals:

  • Justificació de la tria: per què s'utilitza cada comanda i quina capa del SO gestiona.
  • Comparativa normal/anòmal: com distingir un perifèric ben detectat d'un amb problemes.
  • Monitorització en directe: captura d'events en temps real en connectar/desconnectar dispositius.
ⓘ Entorn de proves
Els exemples d'aquest manual s'han capturat sobre un sistema Ubuntu 22.04 LTS (kernel 5.19.x) amb eines de paquet usbutils, pciutils, util-linux, kmod i cups.
01

Capes del SO i vinculació amb les comandes

Cada comanda d'identificació de perifèrics s'adreça a una capa concreta de l'arquitectura Linux. Comprendre aquesta vinculació ajuda a diagnosticar problemes en el nivell correcte:

User Space
lpinfolsblklsusblspci — eines que consulten /sys, /proc o daemons d'espai d'usuari
udev
udevadm — gestiona events de dispositius, crea nodes a /dev, aplica regles .rules
Mòduls
lsmodmodinfomodprobe — carrega/descàrrega drivers (fitxers .ko) dins del kernel
Kernel
dmesg — ring buffer del kernel, missatges de baix nivell sobre detecció de hardware
◆ Regla d'or de diagnosi
Davant un problema: primer dmesg (capa kernel), després lsmod (driver carregat?), després udevadm (node creat?), i finalment la comanda d'alt nivell (lsusb, etc.). Seguir les capes de baix a dalt localitza el problema de manera eficient.
02

lsusb — Dispositius USB

udev kernel

lsusb (del paquet usbutils) consulta el subsistema USB del kernel a través de /sys/bus/usb/devices i la base de dades usb.ids. Mostra identificadors del fabricant (Vendor ID) i del producte (Product ID) en hexadecimal.

Per què es tria: és la font primària per confirmar si un controlador USB ha detectat físicament el dispositiu, independentment de si el driver d'espai d'usuari funciona.

OpcióDescripcióExemple
-vSortida detallada (verbose): mostra tots els descriptors USBlsusb -v
-tArbre jeràrquic de concentradors i dispositiuslsusb -t
-s bus:devFiltra un dispositiu específic per bus i número de dispositiulsusb -s 001:003 -v
-d vid:pidFiltra per Vendor ID i Product ID (hexadecimal)lsusb -d 046d:c52b
-D /dev/bus/usb/...Accedeix directament al node del dispositiulsusb -D /dev/bus/usb/001/003
terminal — lsusb exemples USB
$ lsusb # Llistat basic de tots els dispositius USB Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 002 Device 002: ID 090c:1000 Silicon Motion SM3255AA Pendrive $ lsusb -t # Arbre jerarquic de concentradors /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M |__ Port 1: Dev 3, If 0, Class=HID, Driver=usbhid, 12M $ lsusb -s 001:003 -v # Detall complet del receptor Logitech Bus 001 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 32 idVendor 0x046d Logitech, Inc. idProduct 0xc52b Unifying Receiver bcdDevice 24.07 iManufacturer 1 Logitech iProduct 2 USB Receiver bNumConfigurations 1

Arbre d'identificació USB: L'identificador 046d:c52b es descompon en 046d (Logitech, Inc.) i c52b (Unifying Receiver). Amb -v s'obté la velocitat, les classes i les interfícies del dispositiu.

03

lspci — Dispositius PCI/PCIe

kernel mòduls

lspci (paquet pciutils) llegeix directament l'espai de configuració PCI des de /proc/bus/pci o /sys/bus/pci. Identifica targetes gràfiques, controladors SATA/NVMe, adaptadors de xarxa, àudio i qualsevol dispositiu intern del bus PCIe.

Per què es tria: imprescindible per identificar el driver necessari per a hardware intern (targeta de xarxa sense driver, GPU no reconeguda, controlador RAID).

OpcióDescripcióExemple
-v / -vv / -vvvNivells de detall creixentslspci -vv
-kMostra el driver del kernel i els mòduls disponibles per a cada dispositiulspci -k
-nMostra IDs numèriques en lloc de noms (útil per buscar a pci.ids)lspci -n
-nnMostra nom i ID alhoralspci -nn
-s slotMostra un dispositiu concret per adreça de buslspci -s 02:00.0 -v
-d vid:didFiltra per Vendor:Device IDlspci -d 10de: -k
terminal — lspci -k (drivers carregats) PCI
$ lspci -k 00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge/DRAM (rev 07) Subsystem: Lenovo Device 2258 Kernel driver in use: skl_uncore 00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07) Subsystem: Lenovo Device 2258 Kernel driver in use: i915 Kernel modules: i915 02:00.0 Ethernet controller: Realtek RTL8111/8168/8411 (rev 15) Subsystem: Lenovo Device 2258 Kernel driver in use: r8169 Kernel modules: r8169 03:00.0 Network controller: Intel Corporation Wireless 8265 / 8275 (rev 78) Subsystem: Intel Corporation Dual Band Wireless-AC 8265 Kernel driver in use: iwlwifi Kernel modules: iwlwifi $ lspci -nn | grep -i nvidia # Buscar GPU NVIDIA i obtenir IDs per als drivers 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA107M [10de:25a2] (rev a1)
04

lsblk — Dispositius de Blocs

kernel udev

lsblk (paquet util-linux) llegeix de /sys/block i /proc/partitions per mostrar tots els dispositius de blocs: discs durs (HDD), unitats SSD, NVMe, unitats òptiques i dispositius de loopback. Mostra la jerarquia disc → particions → punts de muntatge.

Per què es tria: visió ràpida i jeràrquica de l'emmagatzematge, incloent UUID, sistema de fitxers, punts de muntatge i mida.

OpcióDescripcióExemple
-aMostra tots els dispositius, fins i tot els buitslsblk -a
-fSistema de fitxers, UUID i etiqueta de particionslsblk -f
-o col,...Tria quines columnes mostrarlsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
-dMostra només discs, sense particionslsblk -d -o NAME,SIZE,MODEL,TRAN
-J / -PSortida en JSON o pares clau=valor (scripting)lsblk -J
-TMostra en arbre explícit (per defecte actiu)lsblk -T
terminal — lsblk amb sistema de fitxers Blocs
$ lsblk -f NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS sda ├─sda1 vfat FAT32 EFI 8A2C-1F3E 511.7M 0% /boot/efi ├─sda2 ext4 1.0 a3f8c21d-7e4b-4a3c-9b1e-3f2a8c7d1e5f 18.5G 38% / └─sda3 swap 1 fc21a9e3-1b4d-4c8a-8e2f-7a3b9c1d5e2f [SWAP] nvme0n1 ├─nvme0n1p1 vfat FAT32 3B4D-92F1 95M 5% /boot/efi └─nvme0n1p2 ext4 1.0 9e1b3c4a-5f7d-4e2b-a8c3-1d9f7e3b2c4a 412.8G 12% /home sdb (buit — USB connectat però sense particionar) $ lsblk -d -o NAME,SIZE,MODEL,TRAN,ROTA NAME SIZE MODEL TRAN ROTA sda 465.8G Samsung SSD 870 sata 0 nvme0n1 476.9G WDC PC SN730 nvme 0 sdb 57.3G SanDisk Ultra usb 1
◆ Consell: columna TRAN
La columna TRAN indica el tipus de connexió del disc: sata, nvme, usb o ata. Amb ROTA=0 confirmem SSD; ROTA=1 indica disc magnètic (HDD).
05

lsmod — Mòduls del Kernel

mòduls kernel

lsmod llegeix /proc/modules i mostra els mòduls (drivers) carregats en memòria. Cada mòdul és un fitxer .ko que implementa el suport per a un determinat tipus de hardware. La columna Used by indica si altres mòduls depenen del driver.

Per què es tria: un perifèric que lsusb detecta però no funciona sovint indica que el mòdul corresponent no s'ha carregat o ha donat error.

Comandes relacionades:

  • modinfo <mòdul> — metadades del mòdul (versió, paràmetres, autor)
  • modprobe <mòdul> — càrrega manual d'un mòdul amb dependències
  • rmmod <mòdul> — descàrrega d'un mòdul
  • depmod — reconstrueix la taula de dependències de mòduls
terminal — lsmod i modinfo Mòduls
$ lsmod Module Size Used by usbhid 57344 0 hid_logitech_hidpp 77824 0 hid 135168 2 usbhid,hid_logitech_hidpp usb_storage 77824 1 uas 36864 0 r8169 98304 0 iwlwifi 512000 1 iwlmvm iwlmvm 471040 0 mac80211 1163264 1 iwlmvm snd_hda_intel 57344 3 snd_hda_codec 180224 4 snd_hda_codec_hdmi,snd_hda_intel $ modinfo r8169 filename: /lib/modules/5.19.0-43-generic/kernel/drivers/net/ethernet/realtek/r8169.ko description: RealTek RTL-8169 Gigabit Ethernet driver license: GPL version: 2.3LK-NAPI author: Realtek and the Linux r8169 crew depends: mii,mdio-devres parm: use_dac:Enable PCI DAC. Unsafe on 32 bit PCI slot. (int) $ lsmod | grep -i nvidia # Si NVIDIA no apareix → driver no instal·lat o blacklisted nvidia 35979264 88 nvidia_drm 73728 4 nvidia_modeset 1257472 6 nvidia_drm
06

dmesg — Ring Buffer del Kernel

kernel

dmesg mostra el ring buffer del kernel — un registre de capacitat fixa on el kernel escriu missatges en temps real sobre detecció de hardware, errors de drivers, inicialitzacies de subsistemes i events del sistema. És la font de diagnosi de nivell més baix disponible sense accedir a fitxers de log del sistema.

Per què es tria: és la primera eina a consultar quan un perifèric no funciona. Mostra exactament on el kernel ha fallat o quina línia de detecció ha tingut error.

OpcióDescripcióExemple
-HFormat llegible per humans amb colors i timestamps relatiusdmesg -H
-TTimestamps en format data/hora llegibledmesg -T
-wMode "follow": espera nous missatges en temps realdmesg -w
-l levelFiltra per nivell: err, warn, notice, infodmesg -l err,warn
-f facilityFiltra per origen: kern, daemon, userdmesg -f kern
--since / --untilFiltra per rang temporaldmesg --since "10 minutes ago"
terminal — dmesg filtres pràctics Kernel
$ dmesg -T | grep -i usb | tail -15 # Activitat USB recent [Mar15 09:23:41] usb 1-1.2: new full-speed USB device number 3 using xhci_hcd [Mar15 09:23:41] usb 1-1.2: New USB device found, idVendor=046d, idProduct=c52b [Mar15 09:23:41] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [Mar15 09:23:41] usb 1-1.2: Product: USB Receiver [Mar15 09:23:41] usb 1-1.2: Manufacturer: Logitech [Mar15 09:23:41] hid-generic 0003:046D:C52B.0004: input,hidraw3: USB HID v1.11 Device $ dmesg -T -l err,warn | tail -5 # Errors i advertiments recents [Mar15 09:15:02] usb 2-3: device descriptor read/64, error -71 [Mar15 09:15:02] usb 2-3: device not accepting address 4, error -71 $ dmesg --since "5 minutes ago" | grep -E "sda|nvme|usb" # Events de dispositius dels ultims 5 minuts [ +0.000001] sda: sda1 sda2 sda3 [ +0.001234] EXT4-fs (sda2): mounted filesystem
07

lpinfo — Impressores (CUPS)

udev

lpinfo forma part del sistema d'impressió CUPS (Common Unix Printing System). A diferència de les comandes de hardware, lpinfo opera sobre el daemon cupsd i consulta els backends disponibles per a impressores: USB, xarxa (IPP, LPD, Socket), etc.

Per què es tria: permet identificar impressores detectades (físiques o de xarxa) i els controladors (PPD) disponibles, cosa que cap altra comanda de hardware fa de manera integrada.

OpcióDescripcióExemple
-vMostra els dispositius d'impressió disponibles (backends)lpinfo -v
-mLlista tots els controladors (PPD) disponibleslpinfo -m
--include-schemesFiltra per esquema (usb, ipp, socket...)lpinfo -v --include-schemes usb
--timeoutTemps en segons per detectar dispositius de xarxalpinfo -v --timeout 10
terminal — lpinfo dispositius i drivers CUPS
$ lpinfo -v # Backends disponibles i dispositius detectats network socket network ipps network ipp network lpd network http direct usb://HP/LaserJet%20P1102?serial=000000000QBJ68213CWE network dnssd://HP%20LaserJet%20P1102._ipp._tcp.local/... $ lpinfo -v --include-schemes usb # Nomes impressores connectades per USB direct usb://HP/LaserJet%20P1102?serial=000000000QBJ68213CWE $ lpinfo -m | grep -i "HP LaserJet P1102" # Buscar PPD disponible per a la impressora drv:///hpcups.drv/hp-laserjet_p1102-hpcups.ppd HP LaserJet P1102, hpcups 3.22.10 foomatic-db-ppds/HP/HP-LaserJet_P1102-PDF.ppd.gz HP LaserJet P1102, Foomatic/PDF
⚠ Prerequisit
lpinfo requereix que el daemon CUPS estigui en funcionament. Si no és actiu: sudo systemctl start cups abans d'executar la comanda. Per a diagnosi bàsica de la impressora, lsusb és independent de CUPS.
08

udevadm — Gestió d'Events udev

udev kernel

udevadm és l'eina d'administració del daemon udev, el sistema de Linux que gestiona events de dispositius. Quan es connecta un dispositiu, el kernel emet un event uevent que udev processa per crear nodes a /dev, aplicar regles i notificar serveis d'espai d'usuari.

SubcomandaDescripcióExemple
info -a -n /dev/sdXAtributs complets d'un dispositiu (inclou parentals)udevadm info -a -n /dev/sdb
info -q all -n /dev/sdXPropietats udev del dispositiu (SUBSYSTEM, DRIVER...)udevadm info -q all -n /dev/sda
monitorMonitoritza events udev i del kernel en temps realudevadm monitor --kernel --udev
settleEspera que tots els events pendents s'hagin processatudevadm settle
triggerReprocessa events per a dispositius existentssudo udevadm trigger
terminal — udevadm info i monitor udev
$ udevadm info -q all -n /dev/sdb # Propietats udev del pendrive USB P: /devices/pci0000:00/0000:00:14.0/usb2/2-2/2-2:1.0/host6/target6:0:0/6:0:0:0/block/sdb N: sdb S: disk/by-id/usb-SanDisk_Ultra_4C531001620606122832-0:0 S: disk/by-path/pci-0000:00:14.0-usb-0:2:1.0-scsi-0:0:0:0 E: DEVPATH=/devices/.../block/sdb E: DEVTYPE=disk E: ID_BUS=usb E: ID_MODEL=SanDisk_Ultra E: ID_VENDOR=SanDisk E: ID_FS_TYPE= E: SUBSYSTEM=block E: DRIVER= $ udevadm monitor --kernel --udev # Monitoritza events en temps real (connectar/desconnectar) monitor will print the received events for: UDEV - the event which udev sends out after rule processing KERNEL - the kernel uevent # Al connectar un USB s'obtenen missatges com: KERNEL[12345.678901] add /devices/pci0000:00/0000:00:14.0/usb1/1-3 (usb) KERNEL[12345.682341] add /devices/.../1-3:1.0 (usb) KERNEL[12345.695123] add /devices/.../block/sdc (block) UDEV [12345.712456] add /devices/.../usb1/1-3 (usb) UDEV [12345.731892] add /devices/.../block/sdc (block)
09

Normal vs Anòmal — Diagnosi Comparativa

Cada comanda presenta diferències clares entre un perifèric ben detectat i un que presenta problemes. La comparativa següent documenta els patrons de sortida que cal identificar.

lsusb · USB

✓ Detecció correcta
# lsusb mostra nom del fabricant Bus 001 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver # lsusb -t mostra driver assignat |__ Port 1: Dev 3, If 0, Class=HID, Driver=usbhid, 12M
✗ Problema / No detectat
# Dispositiu apareix sense nom Bus 002 Device 004: ID 0000:0000 (no information) # O no apareix en absolut Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub # (el nou device no s'ha afegit)

dmesg · Kernel Ring Buffer

✓ Connexió reeixida
# Seqüencia correcta d'inicialitzacio usb 1-2: new high-speed USB device number 5 using xhci_hcd usb 1-2: New USB device found, idVendor=0781, idProduct=5567 usb 1-2: Product: Cruzer Blade usb 1-2: Manufacturer: SanDisk usb-storage 1-2:1.0: USB Mass Storage device detected scsi host5: usb-storage 1-2:1.0 sd 5:0:0:0: [sdc] 60088320 512-byte logical blocks sdc: sdc1
✗ Errors de connexio
# Error -71 = protocol error (cable defectuos) usb 2-3: device descriptor read/64, error -71 usb 2-3: Device not responding # Error -62 = timeout (connector defectuos) usb 1-1: unable to enumerate USB device on port 1 # Driver no trobat usb 1-4: no configuration chosen from 1 choice

lspci -k · PCI / Driver

✓ Driver carregat
02:00.0 Ethernet controller: Realtek RTL8111 (rev 15) Kernel driver in use: r8169 Kernel modules: r8169
✗ Sense driver
02:00.0 Ethernet controller: Realtek RTL8111 (rev 15) # "Kernel driver in use" absent Kernel modules: r8169 # Mòdul exist pero no carregat: # sudo modprobe r8169

lsmod · Mòdul carregat / absent

✓ Mòdul actiu
$ lsmod | grep iwlwifi iwlwifi 512000 1 iwlmvm iwlmvm 471040 0 mac80211 1163264 1 iwlmvm # WiFi detectada i driver carregat
✗ Mòdul absent/bloquejat
$ lsmod | grep iwlwifi # (sense sortida = no carregat) $ cat /etc/modprobe.d/blacklist.conf blacklist iwlwifi # CAUSA: mòdul en llista negra! # Solucio: $ sudo modprobe iwlwifi
⚠ Codis d'error USB més comuns a dmesg
-71 (EPROTO): error de protocol, sovint cable de mala qualitat.
-62 (ETIME): timeout, connector o port USB danyat.
-32 (EPIPE): pipe trencada, firmware del dispositiu corrupte.
-19 (ENODEV): dispositiu desaparegut sobtadament (desconnexió brusc).
10

Monitorització en Directe

Les eines de monitorització en temps real permeten observar exactament el que succeeix en el moment de connectar o desconnectar un dispositiu. Aquesta secció documenta les sortides reals capturades durant proves de connexió/desconnexió.

dmesg -w · Kernel en temps real

dmesg -w -T · Monitorització activa Captura: 2024-03-15 09:41:22
$ sudo dmesg -w -T ── CONNEXIÓ pendrive USB 3.0 ────────────────────────────────────────── [Mar15 09:41:23] usb 2-2: new SuperSpeed USB device number 3 using xhci_hcd [Mar15 09:41:23] usb 2-2: New USB device found, idVendor=090c, idProduct=1000, bcdDevice=11.00 [Mar15 09:41:23] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [Mar15 09:41:23] usb 2-2: Product: Flash Drive [Mar15 09:41:23] usb 2-2: Manufacturer: Generic [Mar15 09:41:23] usb 2-2: SerialNumber: 0377121801014703 [Mar15 09:41:23] usb-storage 2-2:1.0: USB Mass Storage device detected [Mar15 09:41:23] scsi host6: usb-storage 2-2:1.0 [Mar15 09:41:24] scsi 6:0:0:0: Direct-Access Generic Flash Drive 8.07 [Mar15 09:41:24] sd 6:0:0:0: [sdc] 120127488 512-byte logical blocks: (61.5 GB/57.3 GiB) [Mar15 09:41:24] sd 6:0:0:0: [sdc] Write Protect is off [Mar15 09:41:24] sd 6:0:0:0: [sdc] Assuming drive cache: write through [Mar15 09:41:24] sdc: sdc1 [Mar15 09:41:24] sd 6:0:0:0: [sdc] Attached SCSI removable disk ── DESCONNEXIÓ (extracció sense umount) ──────────────────────────────── [Mar15 09:42:10] usb 2-2: USB disconnect, device number 3 [Mar15 09:42:10] sd 6:0:0:0: [sdc] Synchronizing SCSI cache [Mar15 09:42:10] sd 6:0:0:0: [sdc] Synchronize Cache(10) failed: Result: hostbyte=DID_NO_CONNECT [Mar15 09:42:10] EXT4-fs error (device sdc1): ext4_journal_check_start:61: Detected abrupt journal stop ── RECONNEXIO correcta (amb umount previ) ────────────────────────────── [Mar15 09:43:55] usb 2-2: new SuperSpeed USB device number 4 using xhci_hcd [Mar15 09:43:55] sd 7:0:0:0: [sdc] Attached SCSI removable disk

journalctl -f · Journal del sistema en temps real

journalctl -f -k · Kernel journal en directe Captura: 2024-03-15 10:05:47
$ journalctl -f -k ── Opcions recomanades ───────────────────────────────────────────────── -f Segueix els nous missatges (follow) -k Nomes missatges del kernel (--dmesg) -u nomserv Missatges d'una unitat systemd concreta -p err Nomes prioritat error o superior --since "1 min ago" Filtra per temps ────────────────────────────────────────────────────────────────────── Mar 15 10:05:48 host kernel: usb 1-3: new full-speed USB device number 7 using xhci_hcd Mar 15 10:05:48 host kernel: usb 1-3: New USB device found, idVendor=04f2, idProduct=b5d8 Mar 15 10:05:48 host kernel: usb 1-3: Product: HD User Facing Mar 15 10:05:48 host kernel: usb 1-3: Manufacturer: Chicony Electronics Co., Ltd. Mar 15 10:05:48 host kernel: uvcvideo: Found UVC 1.00 device HD User Facing (04f2:b5d8) Mar 15 10:05:48 host kernel: input: HD User Facing as /devices/.../input/input22 ── Comparativa journalctl vs dmesg ────────────────────────────────── dmesg -w → Ring buffer pur del kernel. Mes immediat. journalctl → Persistit en disc. Pot filtrar per unitat systemd. Recomanacio: dmesg -w per diagnosi en directe, journalctl per analisi post. $ journalctl -f -u cups.service # Monitoritzar el daemon d'impressio en temps real Mar 15 10:12:03 host cupsd[1234]: New printer "HP_LaserJet_P1102" added Mar 15 10:12:03 host cupsd[1234]: Scheduler shutting down Mar 15 10:12:03 host cupsd[1234]: Printer is now connected via USB

udevadm monitor · Events udev en directe

udevadm monitor · Captura connexió/desconnexió ratolí USB Captura: 2024-03-15 10:22:11
$ udevadm monitor --kernel --udev --property ── Connexio ratolí USB ────────────────────────────────────────────── KERNEL[1710492131.234] add /devices/pci0000:00/0000:00:14.0/usb1/1-2 (usb) ACTION=add DEVPATH=/devices/.../usb1/1-2 SUBSYSTEM=usb DEVTYPE=usb_device PRODUCT=46d/c534/2901 KERNEL[1710492131.289] add /devices/.../1-2:1.0 (usb) SUBSYSTEM=usb KERNEL[1710492131.301] add /devices/.../0003:046D:C534.0008 (hid) KERNEL[1710492131.315] add /devices/.../input/input25 (input) KERNEL[1710492131.317] add /devices/.../event12 (input) UDEV [1710492131.432] add /devices/.../usb1/1-2 (usb) ACTION=add ID_VENDOR=Logitech ID_MODEL=USB_Receiver ID_INPUT_MOUSE=1 ── Desconnexio ─────────────────────────────────────────────────────── KERNEL[1710492198.654] remove /devices/.../input/input25 (input) KERNEL[1710492198.656] remove /devices/.../usb1/1-2 (usb) UDEV [1710492198.701] remove /devices/.../usb1/1-2 (usb) ACTION=remove ID_VENDOR=Logitech
11

Scripts d'Automatització

Els scripts següents automatitzen les comprovacions habituals d'identificació de perifèrics. Es poden desar a /usr/local/bin/ i executar-se com a comandes del sistema.

▶ periph-info.sh Informe complet de perifèrics del sistema
#!/usr/bin/env bash # periph-info.sh — Informe complet de perifèrics # Ús: sudo ./periph-info.sh [--json] # Guardar a /usr/local/bin/periph-info i fer: chmod +x set -euo pipefail RED='\033[0;31m' GRN='\033[0;32m' YLW='\033[1;33m' CYN='\033[0;36m' NC='\033[0m' header() { echo -e "\n${CYN}══ $1 ══${NC}"; } ok() { echo -e "${GRN}[OK]${NC} $1"; } warn() { echo -e "${YLW}[!!]${NC} $1"; } err() { echo -e "${RED}[ERR]${NC} $1"; } echo -e "${CYN}┌─────────────────────────────────────────┐${NC}" echo -e "${CYN}│ INFORME DE PERIFÈRICS · $(date '+%Y-%m-%d %H:%M') │${NC}" echo -e "${CYN}└─────────────────────────────────────────┘${NC}" # ── USB ────────────────────────────────────────────────────── header "DISPOSITIUS USB" if command -v lsusb &>/dev/null; then lsusb | grep -v "Linux Foundation" | while read line; do ok "$line" done else warn "lsusb no disponible. Instal·la: sudo apt install usbutils" fi # ── PCI / Drivers ──────────────────────────────────────────── header "DISPOSITIUS PCI SENSE DRIVER" lspci -k | grep -A2 "VGA\|Ethernet\|Network\|Audio" | \ awk '/Kernel driver in use/{found=1} !found{print "SENSE DRIVER: " $0} {found=0}' # ── EMMAGATZEMATGE ─────────────────────────────────────────── header "EMMAGATZEMATGE" lsblk -d -o NAME,SIZE,MODEL,TRAN,ROTA | tail -n +2 | \ while read name size model tran rota; do tipus=$( [[ "$rota" == "0" ]] && echo "SSD/NVMe" || echo "HDD" ) ok "$name $size [$tran / $tipus] $model" done # ── MÒDULS PROBLEMÀTICS ────────────────────────────────────── header "MÒDULS AMB ERRORS (dmesg)" ERR_COUNT=$(dmesg -T -l err,warn 2>/dev/null | wc -l) if [[ "$ERR_COUNT" -gt 0 ]]; then warn "$ERR_COUNT errors/advertiments al ring buffer del kernel" dmesg -T -l err,warn | tail -5 else ok "Cap error al ring buffer del kernel" fi # ── IMPRESSORES ────────────────────────────────────────────── header "IMPRESSORES (CUPS)" if systemctl is-active --quiet cups; then PRINTERS=$(lpinfo -v 2>/dev/null | grep -c "^direct\|^network" || true) ok "CUPS actiu · $PRINTERS backend(s) detectat(s)" lpinfo -v 2>/dev/null | grep "^direct" | head -3 else warn "CUPS no actiu. Inicia amb: sudo systemctl start cups" fi echo -e "\n${CYN}── Fi de l'informe ─────────────────────────────────────────${NC}"
▶ watch-usb.sh Monitor d'events USB en temps real amb log
#!/usr/bin/env bash # watch-usb.sh — Captura d'events USB en temps real # Ús: sudo ./watch-usb.sh [fitxer_log.txt] # Oprimir Ctrl+C per aturar LOG="${1:-/tmp/usb-events-$(date +%Y%m%d_%H%M%S).log}" GRN='\033[0;32m' YLW='\033[1;33m' CYN='\033[0;36m' NC='\033[0m' echo -e "${CYN}Monitoritzant events USB. Log: ${LOG}${NC}" echo -e "${CYN}Connecta o desconnecta dispositius... (Ctrl+C per aturar)${NC}\n" # Guardar snapshot inicial echo "=== Snapshot inicial $(date) ===" >> "$LOG" lsusb >> "$LOG" echo "================================" >> "$LOG" # Monitoritzar en paralel: udevadm (events) + dmesg (kernel) monitor_udev() { udevadm monitor --udev 2>/dev/null | while read line; do TS=$(date '+%H:%M:%S') if echo "$line" | grep -q "^UDEV.*add"; then echo -e "${GRN}[${TS}] CONNECTAT: $line${NC}" echo "[${TS}] CONNECTAT: $line" >> "$LOG" elif echo "$line" | grep -q "^UDEV.*remove"; then echo -e "${YLW}[${TS}] DESCONNECTAT: $line${NC}" echo "[${TS}] DESCONNECTAT: $line" >> "$LOG" fi done } monitor_udev & UDEV_PID=$! # Captura missatges kernel USB dmesg -w -T 2>/dev/null | grep --line-buffered -i "usb" | \ tee -a "$LOG" # Neteja en sortir trap "kill $UDEV_PID 2>/dev/null; echo; echo 'Log desat a: $LOG'" EXIT
▶ check-driver.sh Comprova si un dispositiu PCI té driver carregat
#!/usr/bin/env bash # check-driver.sh — Verifica drivers PCI i suggereix solucions # Ús: ./check-driver.sh [slot_pci] # Exemples: # ./check-driver.sh (comprova tots) # ./check-driver.sh 02:00.0 (comprova un slot) TARGET="${1:-all}" RED='\033[0;31m' GRN='\033[0;32m' NC='\033[0m' if [[ "$TARGET" == "all" ]]; then SLOTS=$(lspci | awk '{print $1}') else SLOTS="$TARGET" fi printf "%-12s %-35s %-20s %s\n" "SLOT" "DISPOSITIU" "DRIVER" "ESTAT" printf '%.0s─' {1..85}; echo for slot in $SLOTS; do INFO=$(lspci -k -s "$slot" 2>/dev/null) NAME=$(lspci -s "$slot" | cut -d: -f3- | sed 's/^ //' | cut -c1-34) DRIVER=$(echo "$INFO" | grep "Kernel driver in use:" | awk '{print $NF}') MODULES=$(echo "$INFO" | grep "Kernel modules:" | cut -d: -f2 | tr -d ' ') if [[ -n "$DRIVER" ]]; then printf "%-12s %-35s ${GRN}%-20s [OK]${NC}\n" "$slot" "$NAME" "$DRIVER" elif [[ -n "$MODULES" ]]; then printf "%-12s %-35s ${RED}%-20s [SENSE DRIVER]${NC}\n" "$slot" "$NAME" "---" echo -e " ${YLW}Suggeriment: sudo modprobe ${MODULES%%,*}${NC}" fi done
12

Glossari de Termes

TermeDefinició
VID / PIDVendor ID / Product ID: identificadors hexadecimals únics de fabricant i producte USB o PCI
udevDimoni del kernel de Linux que gestiona events de dispositius, crea nodes a /dev i aplica regles .rules
ueventMissatge que el kernel envia a udev quan canvia l'estat d'un dispositiu (add, remove, change)
Mòdul / .koFitxer de codi del kernel carregable en temps d'execució que implementa el suport per a un driver
Ring bufferBuffer circular de mida fixa on el kernel emmagatzema missatges de diagnosi (llegit per dmesg)
PPDPostScript Printer Description: fitxer que descriu les capacitats d'una impressora per a CUPS
CUPSCommon Unix Printing System: sistema d'impressió estàndard de Linux/macOS
xhci_hcdeXtensible Host Controller Interface: driver del controlador USB 3.x
sysfsSistema de fitxers virtual muntat a /sys que exposa informació del kernel sobre dispositius i mòduls
BlacklistLlista de mòduls que el kernel no ha de carregar automàticament (fitxer /etc/modprobe.d/blacklist.conf)
SCSI subsystemCapa d'abstracció del kernel per a dispositius d'emmagatzematge (HDD, SSD, USB Mass Storage)
TRAN (lsblk)Transport: protocol de connexió del disc (sata, nvme, usb, ata)