Marco Burmeister
private Homepage
In einem Linux openSuSE 15.4 System von mir gibt es das Problem, dass nach einem Systemstart angesteckte USB Geräte nicht immer aktiv werden.
Um diese Geräte zu aktivieren, kann ich natürlich den Stecker herausziehen und wieder einstecken.
Wer aber keine Lust hat an das Gerät heranzugehen, kann auch einen Reset schicken, welcher dann wirkt, als wäre das Gerät neu eingesteckt worden.
In meinem Fall waren eine USB-Disk und der WLAN-Stick von dem Phänomen betroffen.
Diese Seite erklärt, wie ein Reset an das Gerät / Device geschickt werden kann.
Das Ganze ist unterteilt in ein Programm, welches ich im Internet gefunden habe und ein Shell-Script, welches mir die Bedienung erleichtern soll.
Die Seite ist in die folgenden Bereiche eingeteilt:
Auf der folgenden Seite habe ich ein Programm gefunden, welches den USB-Reset an ein Gerät schicken kann.
Die Seite ist zu erreichen bei askUbuntu unter dem direkten Link:
How do you reset a USB device from the command line?
Auf der Seite ist der folgende Code von Alan Stern zu finden (hier nur als quasi Backup, für den Fall, dass die Original-Seite verschwindet):
- /* usbreset -- send a USB port reset to a USB device */
- #include
- #include
- #include
- #include
- #include
- #include
- int main(int argc, char **argv)
- {
- const char *filename;
- int fd;
- int rc;
- if (argc != 2) {
- fprintf(stderr, "Usage: usbreset device-filename\n");
- return 1;
- }
- filename = argv[1];
- fd = open(filename, O_WRONLY);
- if (fd < 0) {
- perror("Error opening output file");
- return 1;
- }
- printf("Resetting USB device %s\n", filename);
- rc = ioctl(fd, USBDEVFS_RESET, 0);
- if (rc < 0) {
- perror("Error in ioctl");
- return 1;
- }
- printf("Reset successful\n");
- close(fd);
- return 0;
- }
cc usbreset.c -o usbreset
.
lsusb
herausgefunden werden, an welchem Bus das USB Gerät hängt und wie seine Device-Nummer ist.
- Bus 001 Device 002: ID 0bda:c811 Realtek Semiconductor Corp. 802.11ac NIC
usb-reset
wird dann aufgerufen mit der Syntax:
- usbreset /dev/bus/usb/<Bus-Nummer>/<Device-Nummer>
- usbreset /dev/bus/usb/001/002
Hinweis:
Für die Richtigkeit der Daten übernehme ich keine Gewähr!
Für den Inhalt von Internet-Seiten, auf die von dieser Seite verwiesen wird, übernehme ich keine Verantwortung!
Shell-Script für das Tool USB-Reset
usb-reset
(siehe oben). Dessen Pfad muss inkl. Pfad in der Variablen USBPRG
angegeben werden.
Dann muss im Bereich Suchstring
für die beiden Variablen die passende Ausgabe aus lsusb
für die zu aktivierenden USB Geräte / Devices angegeben werden.
Wer mehr oder weniger Gerät hat, muss dann die Variablen anpassen und die u.a. if-then-else-Schleife
pflegen.
usb-reset.sh
):
- #!/bin/bash
- #
- # USB Reset
- #
- #
- # Init
- #
- #
- # Variable
- #
- # Eingabe
- eingabe=""
- # Hilfsstring
- helpstr=""
- # Reset PRG
- USBPRG=/opt/usb-reset/usb-reset_v1/usbreset
- # List USB
- USBLIST=/usr/bin/lsusb
- # Suchstring
- SUCHWLAN="Realtek Semiconductor Corp. 802.11ac NIC"
- SUCHDISK="JMicron Technology Corp. / JMicron USA Technology Corp. JMS578 SATA 6Gb/s"
- #
- # Funktionen
- #
- function f_usbreset {
- suchstr="$1"
- # USB Device ermitteln
- helpstr=$(${USBLIST} |grep "${suchstr}" )
- # Behandlung
- if [ -z "${helpstr}" ];
- then
- # nichts gefunden
- echo ""
- echo "Kein Device zum Suchstring gefunden."
- echo "SUCH: ${suchstr}"
- echo ""
- exit 10
- else
- # gefunden
- echo "${USBPRG} /dev/bus/usb/\$(echo \"${helpstr}\" | cut -d \" \" -f 2)/\$(echo \"${helpstr%%:*}\" | cut -d \" \" -f 4) "
- ${USBPRG} /dev/bus/usb/$(echo "${helpstr}" | cut -d " " -f 2)/$(echo "${helpstr%%:*}" | cut -d " " -f 4)
- fi
- }
- #
- # Start
- #
- echo "Welches USB-Device soll resettet werden ?"
- echo "-1- USB Disk"
- echo "-2- WLAN"
- echo "Eingabe: Ziffer + [RETURN]"
- read eingabe
- if [ "${eingabe}" -eq 1 ];
- then
- echo ""
- echo "Resette USB Disk"
- echo ""
- f_usbreset "${SUCHDISK}"
- elif [ "${eingabe}" -eq 2 ];
- then
- echo ""
- echo "Resette WLAN"
- echo ""
- f_usbreset "${SUCHWLAN}"
- else
- echo ""
- echo "Ende"
- echo ""
- exit 0
- fi
Hinweis:
Für die Richtigkeit der Daten übernehme ich keine Gewähr!
Hinweis:
Für den Inhalt von Internet-Seiten, auf die von dieser Seite verwiesen wird, übernehme ich keine Verantwortung!
Marco Burmeister, Copyright © 2023 - 2023
zuletzt geändert: 2023-04-05
URL: https://www.marco-burmeister.de/helferlein/de_linux_opensuse_usb_reset.html
Impressum