ubuntuusers.de

USB Version anzeigen

Status: Ungelöst | Ubuntu-Version: Ubuntu 24.04 (Noble Numbat)
Antworten |

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 10169

Wohnort: Münster

Gelegentlich benötigt man von einem USB-Stick oder anderem USB-Gerät die USB Version. Mit dem hier vorgestellten Skript lässt sich diese bequem ermitteln.

Im Prinzip lässt sich die USB Version mit dem bekannten Befehl lsusb mit Hilfe der zusätzlichen Option -v ermitteln, jedoch ertrinkt man bei der Anwendung in einer unübersichtlichen Fülle von Informationen. Im Prinzip benötigt man nur der Wert von bcdUSB, den man mit Hilfe von grep heraus filtert:

usbversion()
  { lsusb -v -d "${1-:}" 2>/dev/null | grep -e ^Bus -e bcdUSB --color=never ;}

Diese Funktion legt man sinnvollerweise in der Datei ~/.bash_aliases ab und hat sie dann stets in jeder danach gestarteten Bash-Shell zur Verfügung.

Alternativ kann man natürlich auch ein alleinstehendes Skript erstellen, ausführbar machen und in einem Order des PATH ablegen.

Es gibt zwei Methoden für ihre Anwendung:

  1. Ein simpler Aufruf

    usbversion 

    zeigt wie

    lsusb 

    die Informationen für alle USB-Geräte und zusätzlich die USB Version jedes Gerätes.

  2. Wenn man nur für ein Gerät die Version benötigt, kann man das Gerät über die hexadezimale USB-ID (Vendor:Product) identifizieren:

    usbversion 8087: 

    zeigt z.B. nur Geräte von Intel:

    Bus 001 Device 003: ID 8087:0a2b Intel Corp. 
      bcdUSB               2.00

Wie üblich: Anwendung auf eigene Gefahr und ich gebe keinerlei Garantien. Wenn dieses Ding irgendetwas kaputt macht, behält der Anwender alle Teile.

Gastmarant

Anmeldungsdatum:
24. September 2025

Beiträge: 150

Ich glaube "bcdUSB" bringt wohl nix.

lsusb -vt

ist ok. Die Geschwindigkeiten → USB Version hat zugegeben alldgs. nicht Jeder im Kopf.

edit

Nochmal geändert.

Ich glaube "bcdUSB" bringt wohl nix.

Da USB 3.2 praktisch

  • USB 3.2 Gen 1x1 5Gbps

  • USB 3.2 Gen 2x1 10Gbps

  • USB 3.2 Gen 2x2 20Gbps

umfasst und nur als USB 3.20 ausgewiesen wird.(vmtl. USB 4 ebenso entsprechend)

https://de.wikipedia.org/wiki/Universal_Serial_Bus

Irretiert schon, Bsp:

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
  bcdUSB               3.10
Bus 002 Device 004: ID 05e3:0626 Genesys Logic, Inc. Hub
  bcdUSB               3.20

lsusb:

/:  Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/6p, 10000M
    ID 1d6b:0003 Linux Foundation 3.0 root hub
    |__ Port 002: Dev 004, If 0, Class=Hub, Driver=hub/4p, 5000M
        ID 05e3:0626 Genesys Logic, Inc. Hub

Weil das noch nicht reicht, die ID Bez. auch noch: 😬

ID 1d6b:0003 Linux Foundation 3.0 root hub

Das Thema selbst finde ich gut.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17657

Wohnort: Berlin

Meine Reformatierung des kBschen Vorschlags:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
lsusb -v -d "${1-:}" 2>/dev/null | grep -e "^Bus" -e "bcdUSB" | tr '\n' '#' | sed -r 's/#B/\nB/g;' | sed -r 's/^Bus ([0-9]+) Device ([0-9]+): ID ([^#]+)#..bcdUSB[ ]*([^#]*)/\4\t\1\t\2\t\3/g; s/#/\n/;'
2.00	001	001	1d6b:0002 Linux Foundation 2.0 root hub
2.00	001	002	8087:0024 Intel Corp. Integrated Rate Matching Hub
2.00	001	003	05e3:0608 Genesys Logic, Inc. Hub
2.00	001	004	0a5c:21e6 Broadcom Corp. BCM20702 Bluetooth 4.0 [ThinkPad]
2.00	001	005	04f2:b2ea Chicony Electronics Co., Ltd Integrated Camera [ThinkPad]
2.00	001	006	046d:c548 Logitech, Inc. Logi Bolt Receiver
1.10	001	007	248a:8713 Maxxter LIDL Deskset
1.00	001	009	04f9:001a Brother Industries, Ltd HL-1430 Laser Printer
2.00	002	001	1d6b:0002 Linux Foundation 2.0 root hub
2.00	002	002	8087:0024 Intel Corp. Integrated Rate Matching Hub
2.00	002	014	17ef:100a Lenovo ThinkPad Mini Dock Plus Series 3
2.00	003	001	1d6b:0002 Linux Foundation 2.0 root hub
2.00	003	027	1a40:0101 Terminus Technology Inc. Hub
2.10	003	028	0781:557d SanDisk Corp. Cruzer Force
2.00	003	029	046d:c534 Logitech, Inc. Unifying Receiver
3.00	004	001	1d6b:0003 Linux Foundation 3.0 root hub

Rechtfertigung:

  • a) Tabellen mit 2 Zeilen pro Einträg sind eine ergonomische Katastrophe.

  • b) bcdUSB, Bus, Device und ID sind von stringenter Breite u. daher tabellenfreundlich - die dahinter folgende Prosa dagegen von unbestimmter Länge. Zieht man die bcdUSB-Spalte vor den Rest, so ist alles übersichtlich und sauber.

Wer will schreibt sich noch ein einzelnes echo davor, mit Spaltenbezeichnungen für die Tabelle (Premiumversion: per Schalter ein/ausschaltbar machen).

Das --color=never wird, wenn man den Output noch durch sed jagd, wohl nicht benötigt.

Gastmarant

Anmeldungsdatum:
24. September 2025

Beiträge: 150

@user_unknown

Bekommst Du das noch mit rein:? Deswegen mein voriger Post.

/sys/bus/usb/devices/<device>/speed

trollsportverein

Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 5811

Hier in meiner $HOME/.bashrc nicht ohne meine ANSI.
Die ANSI bleibt bunt. ☺

alias usbversion='printf "\n\033[45m\033[1;36mUSB-Ver BUS     DEVICE  ID        \033[0m\033[42m\033[1;36m Geraete Name \033[0m \n \n" && \
                        lsusb -v -d "${1-:}" 2>/dev/null | grep -e "^Bus" -e "bcdUSB" | tr '\''\n'\'' '\''#'\'' | sed -r '\''s/#B/\nB/g;'\'' | \
                        sed -r '\''s/^Bus ([0-9]+) Device ([0-9]+): ID ([^#]+)#..bcdUSB[ ]*([^#]*)/\4\t\1\t\2\t\3/g; s/#/\n/'\'''

Dankeschön.

Gastmarant

Anmeldungsdatum:
24. September 2025

Beiträge: 150

Finde doof, daß sich Hier nix mehr tut. 😉

Leider antwortet ja nicht mal @kB, hoffentlich lebt er noch.

Mit der (@user_unknown) Version bin ich überfordert, von KI, mehrfach herumprobiert, das war das Maximale(ist Original).

2.00  001  006  046d:c52b  12
1.10  001  007  0c76:161e  12
3.10  002  001  1d6b:0003  10000
3.20  002  002  05e3:0626  5000

Also.., Speed da, Bezeichnung fehlt.

 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
#!/usr/bin/env bash
sys_speeds=$(mktemp)
for dev in /sys/bus/usb/devices/*; do
  [[ -f "$dev/devnum" && -f "$dev/busnum" ]] || continue
  bus=$(<"$dev/busnum")
  num=$(<"$dev/devnum")
  speed=$(<"$dev/speed")
  printf "%03d %03d %s\n" "$bus" "$num" "$speed"
done > "$sys_speeds"

lsusb -v -d "${1-:}" 2>/dev/null |
grep -e "^Bus" -e "bcdUSB" |
tr '\n' '#' |
sed -r 's/#B/\nB/g;' |
sed -r 's/^Bus ([0-9]+) Device ([0-9]+): ID ([^#]+)#..bcdUSB[ ]*([^#]*)/\4\t\1\t\2\t\3/g; s/#/\n/;' |
awk -v s="$sys_speeds" 'BEGIN {
  while((getline < s) > 0) speed[$1" "$2]=$3
}
{
  b=sprintf("%03d",$2); d=sprintf("%03d",$3);
  printf "%s\t%s\t%s\t%s\t%s\n",$1,b,d,$4,(speed[b" "d]?speed[b" "d]:"?")
}' |
column -t

rm "$sys_speeds"

kB Team-Icon

Supporter, Wikiteam
(Themenstarter)
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 10169

Wohnort: Münster

Gastmarant schrieb:

[…] Leider antwortet ja nicht mal @kB, hoffentlich lebt er noch.

Die Nachrichten über mein Ableben sind stark übertrieben.

Allerdings bin ich schockiert über die Reaktionen und Missverständnisse auf meinen harmlosen Tipp:

  • Offenbar schätzt man Marketing-Geblubber (wie z.B. "USB 3.2 Gen 1x1") höher als verbindliche technische Angaben, wie man sie z.B. aus bcdUSB auslesen kann.

  • Es geht mir nicht um Übertragungsgeschwindigkeit, sondern um die USB Version, nach der das jeweilige Gerät gebaut wurde.

  • Die Übertragungsgeschwindigkeit zwischen zwei USB-Geräten hängt nicht vom einzelnen Gerät ab, sondern von allen drei an der Übertragung beteiligten Komponenten: USB-Gerät, Gegenstelle (in der Regel ein Port eines USB-Hubs) und dem verbindenden Kabel. Es ist unseriöses Marketing-Geblubber, einer einzelnen Komponente eine Übertragungsgeschwindigkeit zuzuschreiben.

  • Ich bin wirklich beeindruckt, wie man einen eleganten simplen Befehl zu grässlichen Monstern umformulieren kann.

Der Zusammenhang zwischen USB Version und Übertragungsgeschwindigkeit lautet:

  • Das Minimum der USB Versionen aller drei Komponenten bestimmt die maximal mögliche Übertragungsgeschwindigkeit.

D.h.z.B. an einem USB-Port der Version 1.0 erreicht ein USB Gerät der Version 3.2 eine Übertragungsgeschwindigkeit von 1,5 MBit/s, wobei damit nicht Nutzbits, sondern Leitungsbits gemeint sind, also inkl. Overhead für Synchronisation, transparente Darstellung, Handshake usw.

Die Fokussierung auf Übertragungsgeschwindigkeit ist ein Irrweg und OT in diesem Thema.

Gastmarant

Anmeldungsdatum:
24. September 2025

Beiträge: 150

@kB Danke, daß Du antwortest, die Vermutung meinerseits entspricht Deiner Argumentation.

Ich bin wirklich beeindruckt, wie man einen eleganten simplen Befehl zu grässlichen Monstern umformulieren kann.

Naja, es geht um Information, nicht ob das Tool dazu besonders elegant ist. Die Ausgabe sollte möglichst einfach und elegant sein, kann also der Argumentation von @user_unknown dbzl. beipflichten.

Natürlich spielt das Wissen über die momentane max. Übertragungsrate eine Rolle. Beispiel:

1.10	001	007	0c76:161e JMTek, LLC. USB PnP Audio Device
3.10	002	001	1d6b:0003 Linux Foundation 3.0 root hub
3.20	002	002	05e3:0626 Genesys Logic, Inc. Hub
2.00	003	001	1d6b:0002 Linux Foundation 2.0 root hub
3.10	004	001	1d6b:0003 Linux Foundation 3.0 root hub
3.20	004	002	0bda:9210 Realtek Semiconductor Corp. RTL9210 M.2 NVME Adapter
1.10  001  007  0c76:161e  12
3.10  002  001  1d6b:0003  10000
3.20  002  002  05e3:0626  5000
2.00  003  001  1d6b:0002  480
3.10  004  001  1d6b:0003  10000
3.20  004  002  0bda:9210  10000

Offb. werden hier die Hubs in der alten Form(3.10) /USB 3.1 ausgelesen, tatsächlich sind Diese nach der Aktuellen Form doch wohl USB 3.2 Gen 2x1. 10Gbps

Folgend wird nach der Aktuellen ausgelesen:

3.20  002  002  05e3:0626  5000
3.20  004  002  0bda:9210  10000

Hier findet also eine Mischung zw. alter und aktueller Form statt. Die Übertragungsrate bei 3.X/4 ist also nicht nur gut auszuweisen, sondern maßgeblich.(eben auch für die 3.20 er)

Ein Kompliment will ich Dir noch machen. Ernstgemeint. War erstmal irretiert beim Lesen Deines ersten Beitrages. Gewöhnlich staubtrocken, da humorvoll.

Auch bitte ich Dich nachdrücklich um Entschuldigung, zum Einen, daß ich darauf antwortete, zum Anderen das KI Zeugs zu posten. Auch ernstgemeint.

Kann mich nur wiederholen, einen Faden zu dem Thema aufzumachen ist gut, oder anders formuliert, das Ergebnis liegt dann nicht nur als Schönling im Forum rum, sondern wird genutzt werden.

Die Nachrichten über mein Ableben sind stark übertrieben.

Wunderbar. ☺

Gastmarant

Anmeldungsdatum:
24. September 2025

Beiträge: 150

Also, falls es Jmd. brauchen kann, eine endgültige KI Version (mit Speed u. ohne Gewähr).

Kann man als ausführbare Datei "usbversion2" o.ä. in ~/bin ablegen.(alternativ zur ~/.bash_aliases)

1.10  001  007  0c76:161e  12     JMTek, LLC. USB PnP Audio Device 
3.10  002  001  1d6b:0003  10000  Linux Foundation 3.0 root hub 
3.20  002  002  05e3:0626  5000   Genesys Logic, Inc. Hub 
2.00  003  001  1d6b:0002  480    Linux Foundation 2.0 root hub 
3.10  004  001  1d6b:0003  10000  Linux Foundation 3.0 root hub 
3.20  004  002  0bda:9210  10000  Realtek Semiconductor Corp. RTL9210 M.2 NVME Adapter 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/usr/bin/env bash
s=$(mktemp) v=$(mktemp)
for d in /sys/bus/usb/devices/*; do
  [[ -f $d/devnum && -f $d/busnum ]] || continue
  printf "%03d %03d %s\n" "$(cat $d/busnum)" "$(cat $d/devnum)" "$(cat $d/speed)"
done >"$s"
lsusb -v 2>/dev/null | awk '/^Bus/{b=$2;d=$4;sub(":","",d)} /bcdUSB/{printf "%03d %03d %s\n",b,d,$2}' >"$v"
lsusb | awk -v s="$s" -v v="$v" '
BEGIN{while((getline<s)>0)speed[$1" "$2]=$3;while((getline<v)>0)vers[$1" "$2]=$3}
{bus=$2;dev=$4;sub(":","",dev);id=$6;for(i=7;i<=NF;i++)name=name $i" ";
 key=sprintf("%03d %03d",bus,dev);printf "%s\t%03d\t%03d\t%s\t%s\t%s\n",
 (vers[key]?vers[key]:"?"),bus,dev,id,(speed[key]?speed[key]:"?"),name;name=""}
' | column -t -s $'\t'
rm "$s" "$v"

kB Team-Icon

Supporter, Wikiteam
(Themenstarter)
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 10169

Wohnort: Münster

Gastmarant schrieb:

[…] sondern wird genutzt werden.

Das ist ja auch Zweck und Ziel der Übung, auch wenn mich der Verlauf der Diskussion sehr überrascht.

Die Nachrichten über mein Ableben sind stark übertrieben.

Wunderbar. ☺

Stammt leider nicht von mir, sondern von Heinz Rühmann.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17657

Wohnort: Berlin

kB schrieb:

Stammt leider nicht von mir, sondern von Heinz Rühmann.

Da kenne ich aber eine andere Zuschreibung (Mark Twain).

Antworten |