File size: 7,218 Bytes
279efce
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
# List USB Devices

You are helping the user view all connected USB devices with detailed information.

## Task

1. **Basic USB device listing:**
   ```bash
   # Simple list
   lsusb

   # With tree structure showing hubs
   lsusb -t

   # Verbose output
   lsusb -v | less
   ```

2. **Detailed information for each device:**
   ```bash
   # Iterate through all devices
   for device in $(lsusb | awk '{print $2":"$4}' | sed 's/:$//' | tr ':' '/'); do
     bus=$(echo $device | cut -d'/' -f1)
     dev=$(echo $device | cut -d'/' -f2)
     echo "=== Device: Bus $bus Device $dev ==="
     lsusb -v -s $bus:$dev 2>/dev/null | head -30
     echo ""
   done
   ```

3. **Show USB devices by type:**
   ```bash
   echo "=== Input Devices (Keyboards, Mice) ==="
   lsusb | grep -iE "keyboard|mouse|input"

   echo -e "\n=== Storage Devices ==="
   lsusb | grep -iE "storage|disk|flash|card reader"

   echo -e "\n=== Audio Devices ==="
   lsusb | grep -iE "audio|sound|headset|microphone"

   echo -e "\n=== Video Devices ==="
   lsusb | grep -iE "camera|video|webcam"

   echo -e "\n=== Bluetooth Adapters ==="
   lsusb | grep -i bluetooth

   echo -e "\n=== Network Adapters ==="
   lsusb | grep -iE "network|ethernet|wifi|802.11"
   ```

4. **USB device details from sysfs:**
   ```bash
   # List all USB devices with details
   for dev in /sys/bus/usb/devices/*; do
     if [ -f "$dev/manufacturer" ] && [ -f "$dev/product" ]; then
       echo "Device: $(cat $dev/product 2>/dev/null)"
       echo "Manufacturer: $(cat $dev/manufacturer 2>/dev/null)"
       echo "Serial: $(cat $dev/serial 2>/dev/null)"
       echo "Speed: $(cat $dev/speed 2>/dev/null) Mbps"
       echo "---"
     fi
   done
   ```

5. **USB device mount points and block devices:**
   ```bash
   # Show USB storage devices
   lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,MODEL | grep -i usb

   # USB device names in /dev
   ls -l /dev/sd* /dev/nvme* 2>/dev/null | grep -E "^b"

   # Detailed block device info
   lsblk -f
   ```

6. **USB power consumption:**
   ```bash
   # Check power usage
   for device in /sys/bus/usb/devices/*/power/active_duration; do
     dev=$(dirname $(dirname $device))
     if [ -f "$dev/product" ]; then
       echo "$(cat $dev/product): Power: $(cat $dev/power/level) Active: $(cat $device)ms"
     fi
   done
   ```

7. **USB device speed and capabilities:**
   ```bash
   # USB version and speed
   for dev in /sys/bus/usb/devices/usb*; do
     echo "USB Bus $(basename $dev):"
     echo "  Version: $(cat $dev/version 2>/dev/null)"
     echo "  Speed: $(cat $dev/speed 2>/dev/null) Mbps"
     echo "  Max Child: $(cat $dev/maxchild 2>/dev/null) ports"
     echo ""
   done
   ```

8. **Create formatted device report:**
   ```bash
   cat > /tmp/usb-devices.txt << EOF
   USB Devices Report
   ==================
   Generated: $(date)
   Hostname: $(hostname)

   === Connected USB Devices ===
   EOF

   lsusb >> /tmp/usb-devices.txt
   echo -e "\n=== USB Device Tree ===" >> /tmp/usb-devices.txt
   lsusb -t >> /tmp/usb-devices.txt

   echo -e "\n=== USB Storage Devices ===" >> /tmp/usb-devices.txt
   lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,MODEL | grep -i usb >> /tmp/usb-devices.txt

   echo -e "\n=== USB Device Details ===" >> /tmp/usb-devices.txt
   usb-devices >> /tmp/usb-devices.txt

   cat /tmp/usb-devices.txt
   ```

9. **Check USB controller info:**
   ```bash
   # List USB controllers
   lspci | grep -i usb

   # Detailed controller info
   for controller in $(lspci | grep -i usb | cut -d' ' -f1); do
     echo "=== Controller $controller ==="
     lspci -v -s $controller | head -20
     echo ""
   done
   ```

10. **Monitor USB events in real-time:**
    ```bash
    # Watch for USB connect/disconnect
    udevadm monitor --subsystem-match=usb

    # Or use dmesg
    dmesg -w | grep -i usb
    ```

11. **Check USB autosuspend settings:**
    ```bash
    # Check which devices have autosuspend enabled
    for dev in /sys/bus/usb/devices/*/power/control; do
      device=$(dirname $(dirname $dev))
      if [ -f "$device/product" ]; then
        echo "$(cat $device/product): $(cat $dev)"
      fi
    done
    ```

12. **Find USB device by vendor/product ID:**
    ```bash
    # Search by ID
    # Example: Find device 046d:c52b
    lsusb -d 046d:c52b -v

    # Find all devices from vendor
    lsusb -d 046d: # Logitech devices
    ```

13. **Check USB permissions:**
    ```bash
    # Show device permissions
    ls -l /dev/bus/usb/*/* | head -20

    # Find device files for specific bus
    ls -l /dev/bus/usb/001/

    # Check udev rules for USB
    ls -l /etc/udev/rules.d/*usb*
    ```

## Formatted Output

Create a nice summary:
```bash
cat > /tmp/usb-summary.sh << 'EOF'
#!/bin/bash

echo "╔════════════════════════════════════════════════════════╗"
echo "β•‘          USB Devices Summary                           β•‘"
echo "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•"
echo ""

echo "Total USB devices: $(lsusb | wc -l)"
echo ""

echo "--- By Type ---"
echo "Input devices: $(lsusb | grep -ciE 'keyboard|mouse|input')"
echo "Storage devices: $(lsusb | grep -ciE 'storage|disk|flash')"
echo "Audio devices: $(lsusb | grep -ci audio)"
echo "Video devices: $(lsusb | grep -ciE 'camera|video')"
echo "Network devices: $(lsusb | grep -ciE 'network|ethernet|wifi')"
echo "Bluetooth adapters: $(lsusb | grep -ci bluetooth)"
echo ""

echo "--- USB Controllers ---"
lspci | grep -i usb
echo ""

echo "--- Storage Devices ---"
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT | grep -A 10 -E "^sd|^nvme"
echo ""

echo "--- Recent USB Events ---"
journalctl -k --since "1 hour ago" | grep -i usb | tail -10

EOF

chmod +x /tmp/usb-summary.sh
bash /tmp/usb-summary.sh
```

## Troubleshooting

**Device not detected:**
```bash
# Check kernel messages
dmesg | grep -i usb | tail -20

# Check if ports working
cat /sys/kernel/debug/usb/devices

# Rescan USB bus
echo 1 | sudo tee /sys/bus/pci/rescan
```

**Device keeps disconnecting:**
```bash
# Disable autosuspend for problematic device
# Find device path
device_path=$(find /sys/bus/usb/devices/ -name "DEVICE_NAME*")

# Disable autosuspend
echo 'on' | sudo tee $device_path/power/control
```

**Permission denied:**
```bash
# Add user to plugdev group
sudo usermod -aG plugdev $USER

# Create udev rule for device
# /etc/udev/rules.d/50-mydevice.rules
# SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{idProduct}=="5678", MODE="0666"
```

## Export Device Information

```bash
# Create detailed report
usb-devices > ~/usb-devices-$(date +%Y%m%d).txt

# Or with lsusb
lsusb -v > ~/usb-devices-verbose-$(date +%Y%m%d).txt
```

## Notes

- USB 1.1: 12 Mbps (Full Speed)
- USB 2.0: 480 Mbps (High Speed)
- USB 3.0: 5 Gbps (SuperSpeed)
- USB 3.1: 10 Gbps (SuperSpeed+)
- USB 3.2: 20 Gbps
- USB 4.0: 40 Gbps

- Vendor ID format: `046d` (Logitech), `8086` (Intel), etc.
- Product ID format: `c52b` (specific device model)
- USB device path: `/dev/bus/usb/BUS/DEVICE`
- Use `usbutils` package for lsusb and usb-devices commands