5 Möglichkeiten, ein USB-Gerät zu trennen und anzuschließen, ohne die Hände von der Tastatur zu nehmen

Wenn wir unseren Computer verwenden, trennen wir häufig ein USB-Gerät (sicher, wie es sein muss) und stellen unmittelbar danach fest, dass wir vergessen haben, eine Datei zu kopieren, oder dass wir sicherstellen mussten, dass Daten vorhanden sind unsere Einheit. In diesen Fällen ist es normalerweise sehr nützlich, die USB-Laufwerke virtuell zu trennen, wenn wir remote arbeiten.

Nachdem wir das Gerät ausgeworfen haben, sehen wir es nicht mehr in unserer Geräteliste, aber die Festplatte oder das Pendrive ist immer noch über den USB-Anschluss verbunden, und in vielen Distributionen sehen wir das Gerät heute auch nicht, nachdem wir das Laufwerk sicher ausgeworfen haben Wir können nicht tun montieren von unserem Terminal. Die schnellste Lösung besteht darin, das Kabel abzuziehen und in einigen Fällen wieder anzuschließen, entweder weil Sie nicht aufstehen müssen oder weil wir auf einen Computer zugreifen, vor dem wir nicht stehen und niemand in der Nähe ist. Wir können dies nicht tun .

Informationen zu USB-Geräten

Bevor wir beginnen, sehen wir uns an, wie Sie Informationen zu an das System angeschlossenen USB-Geräten erhalten. Dafür können wir verwenden lsusbHier werden die angeschlossenen Geräte aufgelistet. Ich habe Beispiele dafür, was ich gerade auf meinem Computer bekomme, aber vielleicht unterscheidet es sich sehr von dem, was Sie bekommen:

$ lsusb Bus 002 Gerät 001: ID 1d6b: 0003 Linux Foundation 3.0-Root-Hub Bus 001 Gerät 006: ID 8087: 0a2a Intel Corp. Bus 001 Gerät 007: ID 046d: c52b Logitech, Inc. Vereinheitlichen des Empfängerbusses 001 Gerät 005: ID 1a40 : 0101 Terminus Technology Inc. Hub-Bus 001 Gerät 010: ID 125f: c93a A-DATA Technology Co., Ltd. 4 GB Pen Drive Bus 001 Gerät 003: ID 04f2: b424 Chicony Electronics Co., Ltd. Bus 001 Gerät 001: ID 1d6b : 0002 Linux Foundation 2.0-Root-Hub

Wenn wir weitere Informationen wünschen, können wir den Modifikator -t verwenden, der uns eine Ausgabe in Form eines Baums mit Informationen zu den Modulen anzeigt:

$ lsusb -t /: Bus 02.Port 1: Dev 1, Klasse = root_hub, Treiber = xhci_hcd / 8p, 5000M /: Bus 01.Port 1: Dev 1, Klasse = root_hub, Treiber = xhci_hcd / 16p, 480M | __ Port 4: Dev 3, wenn 0, Klasse = Video, Treiber = uvcvideo, 480M | __ Port 4: Dev 3, wenn 1, Klasse = Video, Treiber = uvcvideo, 480M | __ Port 5: Dev 10, wenn 0, Klasse = Massenspeicher, Treiber = USB-Speicher, 480M | __ Port 6: Dev 5, Wenn 0, Klasse = Hub, Treiber = Hub / 4p, 12M | __ Port 4: Dev 7, If 0, Klasse = Human Interface Device, Treiber = usbhid, 12M | __ Port 4: Dev 7, If 1, Klasse = Human Interface Device, Treiber = usbhid, 12M | __ Port 4: Dev 7, If 2, Klasse = Human Interface Device, Treiber = usbhid, 12M | __ Port 9: Dev 6, wenn 0, Klasse = drahtlos, Treiber = btusb, 12M | __ Port 9: Dev 6, wenn 1, Klasse = drahtlos, Treiber = btusb, 12M

Wenn wir viel mehr Informationen wollen, können wir verwenden lsusb -v (die Ausgabe ist sehr groß), könnten wir beispielsweise auch die maximale Leistung, die an das Gerät geliefert wird, auf folgende Weise ermitteln:

$ lsusb -v 2> / dev / null | egrep "^ Bus | MaxPower" -Bus 002 Gerät 001: ID 1d6b: 0003 Linux Foundation 3.0-Root-Hub MaxPower 0-mA-Bus 001 Gerät 006: ID 8087: 0a2a Intel Corp. MaxPower 100-mA-Bus 001 Gerät 007: ID 046d: c52b Logitech, Inc. Vereinheitlichen des Empfängers MaxPower 98mA Bus 001 Gerät 005: ID 1a40: 0101 Terminus Technology Inc. Hub MaxPower 100mA Bus 001 Gerät 010: ID 125f: c93a A-DATA Technology Co., Ltd. 4 GB MaxPower 480-mA-Bus 001-Gerät 003: ID 04f2: b424 Chicony Electronics Co., Ltd. MaxPower 500-mA-Bus 001-Gerät 001: ID 1d6b: 0002 Linux Foundation 2.0-Root-Hub MaxPower 0 mA

Andere sehr nützliche Befehle sind USB-Geräte, hwinfoWenn wir beispielsweise den Pfad eines Geräts (innerhalb von / dev /) haben, können wir das System nach allen möglichen Informationen über das Gerät und die Subsysteme fragen, die es durchlaufen muss. Wenn wir beispielsweise eine USB-Festplatte anschließen, damit wir sehen können, wie das Gerät verwendet wird, benötigen wir einen SCSI-Treiber (für / dev / sdX) sowie einen USB-Speichertreiber, der über das Gerät funktioniert USB-Anschluss, der zu einem Hub gehört, der unter anderem an einen PCI-Anschluss angeschlossen ist. Alles was wir sehen konnten

$ udevadm info --query = path --name = / dev / sdX --attribute-walk

o

$ udevadm info -a -n / dev / sdX

Wenn wir uns wagen wollen, können wir auch eintreten / sys / bus / usb und schauen Sie sich alles an, was es gibt, wir werden viele Informationen sehen, aber zum Glück klassifizieren die obigen Befehle all diese Informationen.

Berechtigungen und Geräte

Um diese Aufgabe ausführen zu können, müssen wir wissen, auf welches Gerät wir gehen werden wieder verbinden. Dazu können wir Folgendes ausführen:

$ dmesg | tail [Do 24. 19:50:04 2016] sd 7: 0: 0: 0: Angehängte scsi generic sg3 Typ 0 [798339.431677] sd 7: 0: 0: 0: [sdc] 15806464 Logische 512-Byte-Blöcke: ( 8.09 GB / 7.54 GiB) [798339.431840] sd 7: 0: 0: 0: [sdc] Schreibschutz ist deaktiviert [798339.431848] sd 7: 0: 0: 0: [sdc] Moduserkennung: 00 00 00 00 [798339.431988] sd 7: 0: 0: 0: [sdc] Das Abfragen von Cache-Daten ist fehlgeschlagen : 798339.431996: 7: 0: [sdc] Angehängter SCSI-Wechseldatenträger [0] ISO 0-Erweiterungen: Microsoft Joliet Level 798339.434157 [1] ISO 2-Erweiterungen: RRIP_798339.446812A

In dieser Ausgabe sehen wir, dass das Gerät, mit dem wir arbeiten, ist SDC (sdc1 und sdc2 wären Partitionen auf dieser Festplatte). Für die Beispiele, die ich dieses Gerät verwenden werde, müssen Sie in Ihrem Fall visualisieren, welches Konto Sie haben.

In den folgenden Beispielen werde ich verwenden sudo um die Befehle mit den Berechtigungen von auszuführen Wurzel. Obwohl es ausreichen würde, einen Benutzer mit ausreichender Berechtigung zu haben. Wenn wir die erforderlichen Berechtigungen sehen möchten, tun Sie es einfach ls zum Gerät:

$ ls -latr / dev / sdc brw-rw ---- 1 Root-Disk 8, 32 Nov 24 19:50 / dev / sdc

Dort sehen wir, dass der Eigentümer root und die Gruppe ist Scheibe. Es würde ausreichen, einen Benutzer zu haben, der zur Gruppenfestplatte gehört.

Methode 1. Behandeln Sie es wie eine CD / DVD

Es ist das einfachste von allen. Wenn Sie GNU / Linux seit Jahren verwenden und mit CD-ROM oder DVD arbeiten, haben Sie sicherlich den Befehl eject verwendet. Nun, Auswerfen wurde verwendet, um die CD-ROM zu öffnen, und Auswerfen -t wurde verwendet, um das Fach zu schließen. Nun, wenn wir dies vor dem USB-Gerät tun:

$ sudo eject -t / dev / sdc

Das Gerät sollte so aussehen, als hätten wir es wieder angeschlossen.

Methode 2. Unplugged und Virtual Plugged In

Auf einigen Systemen (solange die Hardware dies unterstützt) wird das Gerät nicht mehr mit Strom versorgt, wenn Sie das USB-Gerät sicher entfernen, und das Gerät wird nicht mehr angezeigt. Es ist das gleiche wie bei:

udisksctl Ausschalten -b / dev / sdc

versichern zu lassen. In diesem Fall ist / dev / sdc Es ist mein Gerät und mit diesem Befehl wurde eine virtuelle Stromunterbrechung simuliert.

Das Problem ist, dass / dev / sdc jetzt nicht existiert. Wenn wir uns dmesg ansehen, erhalten wir ungefähr Folgendes:

$ dmesg | Schwanz [281954.693298] USB 1-5: USB-Verbindung, Gerätenummer 3

Also, wenn wir es mit der Methode von versuchen auswerfen es wird nicht funktionieren. Hinweis: Ich habe hervorgehoben USB 1-5 und wir werden in Kürze sehen warum.

Wenn Sie remote arbeiten, ist dies möglicherweise eine gute Idee. Stellen Sie sich vor, Sie haben USB-Laufwerke an das Backup angeschlossen. Wenn Sie die Kopien erstellen, ist es gut, dass das System weiß, dass Festplatten angeschlossen sind, aber wenn wir sie nicht verwenden, müssen wir dies einerseits tun Energie sparen und vermeiden Sie den Verschleiß der Scheiben, so ist es besser, den Strom zu unterbrechen, andererseits Wir möchten nicht, dass bösartige Apps erkennen, dass sie existieren diese Festplatten, damit sie nicht infiziert werden. (Ja, in GNU / Linux gibt es Viren).

Wie verbinden wir jetzt den Strom?

Wir müssen den USB-Port anrufen, dafür gibt es ein Projekt namens Hubpower (Ich verlinke auf eine Abzweigung des ursprünglichen Projekts, da hier ein Fehler behoben ist, der den Strom von mehr Geräten entfernen kann und nicht nur von dem, den wir wollen). Es gibt mehr Projekte (wie uhubctl), aber dies hat keine Abhängigkeiten, wenn wir zum Kompilieren gehen, es ist auch nur eine hubpower.c-Datei.
Zuerst kompilieren wir es,

$ gcc -o Hubpower Hubpower.c

Erinnern Sie sich jetzt an die fett gedruckten Zahlen aus dem dmesgNun, wir werden sie verwenden, wir müssen das Gerät trennen und wieder anschließen, wie folgt:

$ sudo ./hubpower 1: 1 Power 5 aus Port 5 Status: 0000 Power-Off $ sudo ./hubpower 1: 1 Power 5 on Port 5 Status: 0100 Power-On

Wenn das Gerät uns nicht erkennt, können wir Folgendes versuchen:

$ sudo ./hubpower 1: 1 bind Bind-Treiber-Anfrage an den Kernel gesendet

Auf diese Weise sehen wir unser angeschlossenes USB-Gerät wieder.

Wenn wir kein C-Programm wollen ... habe ich es in Perl

Ein C-Programm ist schwer zu kompilieren und zu testen, ob das, was wir tun werden, sehr einfach ist. Daher können wir diesen kleinen Port in 10 Zeilen in Perl ausprobieren:

#! / bin / perl erfordern "sys / ioctl.ph"; $ device = "05"; open (mein $ usbdev,"> "," / dev / bus / usb/ 001/001 "); $ data = pack ("H *", "23010800". $ device. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ data); $ data = pack ("H *", "23030800". $ device. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ data); close ($ usbdev);

Wir müssen respektieren $ Gerät, die Portnummer (in meinem Fall war es 5), ist ein hexadezimaler Wert, daher ist 10 A, 11 ist B, 15 ist F, 16 ist 10 ... Wir müssen auch das Gerät überwachen und der Bus, auf den wir über / dev / bus / usb / zugreifen001/001müssen die Zahlen mit führenden Nullen sein, da wir diese Datei aufrufen.

Wie wir sehen können, befindet sich der Schlüssel in ioctl (), einer Funktion, die Parameter eines Geräts aus einer speziellen Datei im Dateisystem heraus bearbeitet. Unter den verwendeten Hexadezimalwerten finden wir 0xC0185500, eine Konstante namens USBDEVFS_CONTROL, mit der wir einen Steuerbefehl an das USB-Gerät senden. Die anderen Codes gehören zur Trennungs- und Verbindungsanforderung (weitere Informationen finden Sie im Programm in C).

Methode 3. Verstecken und Anzeigen des Geräts

Eine andere Möglichkeit, das Gerät zu trennen, könnte sein:

echo '1-5' | sudo tee / sys / bus / usb / drivers / usb / unbind

Und wir können es wiederherstellen, indem wir:

echo '1-5' | sudo tee / sys / bus / usb / drivers / usb / bind

Diese Methode führt nicht zu einer vollständigen Trennung des Geräts. Es führt nur dazu, dass das Betriebssystem nicht mit ihm spricht und viele Geräte, wenn ein Computer nichts über sie wissen möchte, in den Energiesparmodus wechseln, da wir nichts verlangen werden.

Methode 4. Geräteberechtigung

Der Nachteil dieser Methode ist, dass in vielen Systemen mehr Geräte vorübergehend deaktiviert werden können. Dies ist nicht nur das, was wir benötigen, sondern wir greifen auch einen gesamten USB-Hub an. Zum Beispiel:

$ echo 0 | sudo tee / sys / bus / usb / geräte / usb1 / autorisiertes $ echo 1 | sudo tee / sys / bus / usb / geräte / usb1 / autorisiert

Was wir natürlich alles hintereinander laufen lassen können:

$ echo 0 | sudo tee / sys / bus / usb / geräte / usb1 / autorisiert; Echo 1 | sudo tee / sys / bus / usb / geräte / usb1 / autorisiert

Wir müssen vorsichtig sein, wenn mehr Festplatten an denselben USB-Anschluss angeschlossen sind (und fast immer in unseren Computern mehrere USB-Anschlüsse als die, die wir sehen, intern an einen Hub angeschlossen sind, sodass es Gruppen von Anschlüssen mit demselben USB gibt Vater, sagen Sie es irgendwie.

Methode 5. Starten Sie das USB-Subsystem neu

Wenn wir das USB-Subsystem neu starten möchten. Aktualisieren Sie also alle USB-Geräte, z. B. das Herausziehen und Anschließen aller Geräte. Zum einen können wir das USB-Kernelmodul herunterladen und neu laden:

$ sudo modprobe -r ehci_hcd; sudo modprobe ehci_hcd #Für USB2 $ sudo modprobe -r xhci_hcd; sudo modprobe xhci_hcd #Für USB3

Obwohl einige Distributionen, einschließlich der neuesten Versionen von Ubuntu und Derivaten, die integrierte USB-Module und sie können nicht heruntergeladen werden. Auf der anderen Seite lässt das System sie möglicherweise nicht herunterladen, da sie aufgrund anderer Module (Drucker, Speicher, Schnittstellengeräte usw.) verwendet werden. Wenn wir anfangen, Module herunterzuladen und Probleme zu beheben, müssen wir möglicherweise neu starten der Computer. am Ende. Auf andere Weise können wir also Folgendes tun:

$ echo '0000:00:14.5'| sudo tee / sys / bus / pci / drivers / xhci_hcd / $ echo aufheben '0000:00:14.5'| sudo tee / sys / bus / pci / drivers / xhci_hcd / bind

Um unser Gerät zu finden, können wir ls in / sys / bus / pci / drivers / xhci_hcd ausführen. Es werden verschiedene Dinge angezeigt. Wir müssen nach einem suchen, das so aussieht aaaa: bb: cc: dd.e.. Ihr USB-Anschluss lautet möglicherweise nicht xhci_hcd (USB3), sondern ehci_hcd (USB2).


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   Cristian sagte

    Ausgezeichneter Artikel!

    1.    Gasparfm sagte

      Vielen Dank Cristian! Ich hoffe, Sie haben es nützlich gefunden.

  2.   Antonio Juan sagte

    In diesem Artikel wird nicht gesagt, dass es sich immer dann, wenn Sie es platzieren, auf der gegenüberliegenden Seite der richtigen befindet und Sie es umdrehen müssen ... hehehe. Großartiger Artikel.

    1.    Gasparfm sagte

      Danke Antonio Juan! Sieh mal, du weißt nicht, wie oft mir das passiert ist, als ich alles ausprobiert habe, was ich in die Post geschrieben habe! 🙂

  3.   ROMSAT sagte

    Großartig. Ein überlegener Gegenstand. Der Titel sollte lauten: "Erfahren Sie mehr über das Linux-System, indem Sie einfach Ihren USB-Stick ausstecken und einstecken." Herzliche Glückwünsche.
    Grüße aus Malaga.

    1.    Gasparfm sagte

      Nun ja, ich weiß nicht, ob jemand von diesem Beitrag aus in C programmieren und auf Geräte zugreifen wird! Auch aus Malaga !! Wir sind überall 🙂

  4.   HO2Gi sagte

    Beeindruckender Artikel. Sie sind mit solchem ​​Material über Bord gegangen.

    1.    Gasparfm sagte

      Danke HO2Gi !! Auf meinem persönlichen Blog ( http://totaki.com/poesiabinaria ) Es gibt auch viele Tutorials zum Stil 🙂

  5.   Atahualpa sagte

    Vielen Dank mein Freund. Ich starte unter Linux, insbesondere unter Linux Mint, und habe das folgende Problem: In der Konsole kann ich sehen, dass mein Telefon mit dem Computer verbunden ist, jedoch nicht im Dateimanager. Und deshalb kann ich es nicht als Modem verwenden, um eine Verbindung zum Internet herzustellen. Was ich tun kann?

    1.    Gaspar Fernandez sagte

      Es gibt Telefone, mit denen Sie keine Verbindung als Modem herstellen können, aber Sie können Tethering durchführen

  6.   Milazzo sagte

    Hervorragende Dokumentation!
    Vielen Dank, dass Sie sich die Zeit genommen haben, die Erfahrung zu teilen.
    Ich verwende es als Referenz für eine andere Art von Problem, die ich habe: Trennen der USB-Anschlüsse in Ubuntu (# 42 ~ präzise1-Ubuntu SMP Mi Aug 14 15:31:16 UTC 2013)
    Es kommt vor, dass das System eine -110 in das dmesg wirft und den PC neu startet. Es wird davon ausgegangen, dass der Fehler auf einen Stromausfall auf dem USB zurückzuführen ist, an dem das Gerät angeschlossen ist (USB3.0).

    Jetzt benutze ich das lsusb -v, um den Leistungspegel des Geräts zu überprüfen, aber es wirft 2 mA, was völlig absurd ist ... nur die LEDs verbrauchen mehr als das ...

    Ich schließe ein huawei E4 USB-8372G-Modem an, aber die maximale Leistung zeigt 2 mA an, was unglaublich ist, jetzt hat sich der Zweifel geändert und andere sind aufgetreten:
    Ist MaxPower ein Attribut, das standardmäßig auf dem Gerät oder im Betriebssystem vorhanden ist?
    Ist es ein Parameter für die maximale Leistung, die der USB-Port liefern wird?
    Im Falle eines Parameters
    Kann dieser Parameter geändert und auf das vom USB-Anschluss angegebene Maximum eingestellt werden (900 mAh-3.0 / 500 mAh-2.0)?
    Wenn Sie kein Parameter sind,
    Ist es ein Echtzeitmesswert des USB-Verbrauchs (unwahrscheinlich)?
    Wenn es sich um eine andere Option handelt, erklären Sie es mir bitte, da ich Zweifel an den Referenzinformationen habe.

    Ich habe einige Zweifel bezüglich dieses MaxPower-Werts. Wenn Sie zusätzliche Informationen haben, wäre ich Ihnen sehr dankbar.

    lsusb -v 2> / dev / null | egrep "^ Bus | MaxPower | bDeviceClass | iProduct"

    Bus 002 Gerät 006: ID 1a86: 7523 QinHeng Electronics HL-340 USB-Serieller Adapter
    bDeviceClass 255 Herstellerspezifische Klasse
    iProduct 2 USB2.0-Serial
    MaxPower 96mA
    Bus 002 Gerät 008: ID 12d1: 14db Huawei Technologies Co., Ltd.
    bDeviceClass 2-Kommunikation
    iProduct 2 HUAWEI_MOBILE
    MaxPower 2mA

  7.   Anonym sagte

    Kann es auf Windows angewendet werden?

  8.   Chelo sagte

    Vielen Dank. Mit udisksctl Power-Off -b / dev / sdc auf meiner externen Festplatte war es genug, um die Kopfschmerzen zu lösen. Wäre es nicht besser, wenn der Unmount die Möglichkeit hätte, dies selbst zu tun?

  9.   Marisa sagte

    Gott was zum Teufel! Hat jemand das ganze Testament gelesen? Und oben nach der Platte wissen wir immer noch nicht, wie man eine DAC / USB-Soundschnittstelle, einen Drucker, ein Grafiktablett ... abschaltet ... kurz gesagt, nichts, was nicht ein Spike oder eine externe Festplatte ist. Was für eine Zeitverschwendung ...