5種無需斷開手即可斷開和連接USB設備的方法

在許多情況下,當我們使用計算機時,我們會斷開USB設備的連接(必須安全地斷開連接),此後,我們立即意識到我們忘記了複製文件,或者必須確保數據在其中。我們的單位。 對於這些情況,當我們進行遠程工作時,虛擬斷開USB驅動器通常非常有用。

彈出設備後,我們不再在設備列表中看到它,但是硬盤驅動器或Pendrive仍通過USB端口連接,並且在當今的許多發行版中,安全彈出驅動器後,我們也看不到該設備,並且我們做不到 安裝 從我們的終端。 最快的解決方案是在某些情況下,由於不得不起床的懶惰或由於我們正在訪問不在前面的計算機且周圍沒有人而導致的連接斷開,然後重新連接電纜。

有關USB設備的信息

在開始之前,讓我們看一下如何獲取有關連接到系統的USB設備的信息。 為此,我們可以使用 的lsusb,它將立即列出已連接的設備。 我舉例說明了我現在在計算機上獲得的信息,但是也許與您獲得的信息有很大不同:

$ lsusb總線002設備001:ID 1d6b:0003 Linux Foundation 3.0根集線器總線001設備006:ID 8087:0a2a英特爾公司總線001設備007:ID 046d:c52b Logitech,Inc.統一接收器總線001設備005:ID 1a40 :0101 Terminus Technology Inc.集線器總線001設備010:ID 125f:c93a A-DATA Technology Co.,Ltd. 4GB筆式驅動器總線001 Device 003:ID 04f2:b424 Chicony Electronics Co.,Ltd.總線001設備001:ID 1d6b :0002 Linux Foundation 2.0根集線器

如果我們需要更多信息,可以使用-t修飾符,該修飾符將以樹的形式向我們顯示輸出,其中包含有關模塊的信息:

$ lsusb -t /:總線02.Port 1:Dev 1,Class = root_hub,Driver = xhci_hcd / 8p,5000M /:總線01.Port 1:Dev 1,Class = root_hub,Driver = xhci_hcd / 16p,480M | __端口4:開發人員3,如果為0,類=視頻,驅動程序= uvcvideo,480M | __端口4:開發人員3,如果為1,類=視頻,驅動程序= uvcvideo,480M | __端口5:開發人員,如果= 10,類=大容量存儲,驅動程序= usb存儲,0M | __端口480:開發人員6,如果為5,類=集線器,驅動程序=集線器/ 0p,4M | __端口12:開發人員4,如果為7,類=人機接口設備,驅動程序= usbhid,0M | __端口12:Dev 4,如果為7,類=人機接口設備,驅動程序= usbhid,1M | __端口12:Dev 4,如果為7,類=人機接口設備,驅動程序= usbhid,2M | __端口12:Dev 9,如果為6,類=無線,驅動程序= btusb,0M | __端口12:Dev 9,如果為6,類=無線,驅動程序= btusb,1M

如果我們需要更多信息,可以使用 lsusb -v (輸出非常大),例如,我們還可以通過以下方式知道傳遞給設備的最大功率:

$ lsusb -v 2> / dev / null | egrep“ ^ Bus | MaxPower”總線002設備001:ID 1d6b:0003 Linux Foundation 3.0根集線器MaxPower 0mA總線001設備006:ID 8087:0a2a英特爾公司MaxPower 100mA總線001設備007:ID 046d:c52b Logitech,Inc.統一接收器MaxPower 98mA總線001設備005:ID 1a40:0101 Terminus Technology Inc.集線器MaxPower 100mA總線001設備010:ID 125f:c93a A-DATA Technology Co.,Ltd. 4GB筆式驅動器MaxPower 480mA總線001設備003:ID 04f2:b424 Chicony Electronics Co.,Ltd MaxPower 500mA總線001設備001:ID 1d6b:0002 Linux Foundation 2.0根集線器MaxPower 0mA

其他非常有用的命令是 USB設備, HWINFO,或者,例如,如果我們擁有設備的路徑(在/ dev /內部),則可以向系統詢問有關該設備及其必須經過的子系統的所有可能信息。 例如,如果我們連接USB硬盤,以便能夠看到如何使用該設備,則需要一個SCSI驅動程序(對於/ dev / sdX),還需要一個USB存儲驅動程序,該驅動程序可以通過除其他中間系統外,屬於集線器的USB端口已插入PCI端口。 我們可以看到的一切

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

o

$ udevadm信息-a -n / dev / sdX

如果我們想冒險,我們也可以輸入 / sys /總線/ usb 並查看其中的所有內容,我們將看到很多信息,但是幸運的是,以上命令對所有這些信息進行了分類。

特權和設備

要執行此任務,我們將需要知道要使用的設備 重新連接。 為此,我們可以運行:

$ dmesg | tail [24年19月50日星期四04:2016:7] sd 0:0:0:3:附加的scsi通用sg0類型798339.431677 [7] sd 0:0:0:15806464:512:[sdc] 8.09 7.54字節邏輯塊:( 798339.431840 GB / 7 GiB)[0] sd 0:0:798339.431848:7:[sdc]寫保護已關閉[0] sd 0:0:00:00:[sdc]模式檢測:00 00 798339.431988 7 [0] sd 0:0:798339.431996:7:[sdc]請求緩存數據失敗[0] sd 0:0:798339.434157:1:2:[sdc]假設驅動器緩存:寫入[798339.446812] sdc:sdc7 sdc0 [0] sd 0 :798360.808588:9660:3:[sdc]附加的SCSI可移動磁盤[798360.809353] ISO 9660擴展名:Microsoft Joliet Level 1991 [XNUMX] ISO XNUMX擴展名:RRIP_XNUMXA

在此輸出中,我們將看到正在使用的設備是 SDC (sdc1和sdc2將是該磁盤中的分區)。 對於我將使用此設備的示例,在您的情況下,您將必須可視化擁有的設備。

在下面的示例中,我將使用 須藤 以以下特權執行命令 。 儘管擁有足夠的用戶權限就足夠了。 如果我們想查看必要的特權,請執行 ls 到設備:

$ ls -latr / dev / sdc brw-rw ---- 1個根磁盤8,32 Nov 24 19:50 / dev / sdc

在那裡,我們看到所有者是根,組是 磁盤。 擁有一個屬於組磁盤的用戶就足夠了。

方法1.將其像CD / DVD一樣對待

這是最簡單的。 當然,如果您使用GNU / Linux已有多年,那麼在使用CD-ROM或DVD時,您會使用彈出命令。 好了,彈出用於打開CDROM,彈出-t用於關閉托盤。 好吧,如果我們在USB設備之前執行此操作:

$ sudo彈出-t / dev / sdc

該設備應顯示為好像我們已再次連接它。

方法2。拔出和虛擬插入

在某些系統上(只要硬件支持),當您安全地卸下USB設備時,該設備將停止供電,並且該設備將不再顯示。 與執行操作時相同:

udisksctl關機-b / dev / sdc

在這種情況下, 的/ dev / SDC 這是我的設備,並使用此命令模擬了虛擬電源斷開連接。

問題是現在/ dev / sdc不存在,而且,如果我們看一下dmesg,我們將得到如下所示的內容:

$ dmesg | 尾巴[281954.693298] USB 1-5:USB斷開連接,設備號3

因此,如果我們嘗試使用 噴射器 不起作用。 注意:我已突出顯示 USB 1-5 我們很快就會明白為什麼。

如果您是遠程工作,這可能是個好主意。 假設您有USB驅動器連接到備份。 製作副本時,最好讓系統知道已連接磁盤,但是當我們不使用磁盤時,一方面我們必須 節約能源 並避免光盤磨損,因此最好減少電流, 我們不希望惡意應用看到它們的存在 這些磁盤,因此它們不會被感染。 (是的,在GNU / Linux中存在病毒)。

我們現在該如何連接電流?

我們必須呼叫USB端口,為此有一個名為 集線器 (我鏈接到原始項目的一個分支,因為在這裡已修復了一個錯誤,該錯誤可以刪除更多設備上的電流,而不僅僅是我們想要的設備)。 還有更多項目(例如 超人),但這與我們進行編譯時沒有依賴關係,它也只是hubpower.c文件。
首先,我們編譯它,

$ gcc -o hubpower hubpower.c

現在,您還記得 dmesg的好吧,我們將要使用它們,我們將必須斷開設備並重新連接它,如下所示:

$ sudo ./hubpower 1:1電源5斷開端口5狀態:0000關機$ sudo ./hubpower 1:1電源5斷開端口5狀態:0100開機

如果設備未檢測到我們,我們可以嘗試執行以下操作:

$ sudo ./hubpower 1:1將綁定驅動程序請求發送到內核

這樣,我們將再次看到連接的USB設備。

如果我們不想要C程序...我在perl中有它

C程序很難編譯和測試我們要執行的操作是否非常簡單,因此我們可以在perl中編寫的10行代碼中嘗試使用此小端口:

#!/ bin / perl需要“ sys / ioctl.ph”; $ device =“05“;打開(我的$ 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); 關閉($ usbdev);

我們必須尊重 $設備,端口號(在我的例子中是5),它是一個十六進制值,因此10將是A,11將是B,15將是F,16將是10 ...我們還必須監視設備和公共汽車,我們可以從/ dev / bus / usb /訪問001/001,數字必須以前導零開頭,因為我們正在調用該文件。

如我們所見,密鑰在ioctl()中,它是一個從文件系統中特殊文件中操作設備參數的函數。 在使用的十六進制值中,我們發現 0xC0185500,這是一個稱為USBDEVFS_CONTROL的常量,我們將使用該常量向USB設備發送控制命令,其他代碼屬於斷開和連接請求(您可以在C語言程序中找到更多信息)。

方法3.隱藏和顯示設備

斷開設備連接的另一種方法是:

迴聲'1-5'| sudo tee / sys /總線/ usb /驅動程序/ usb /解除綁定

我們可以通過執行以下操作來恢復它:

迴聲'1-5'| sudo tee / sys /總線/ usb /驅動程序/ usb /綁定

此方法不會導致設備完全斷開連接。 這只會使操作系統不與之對話,並且當計算機不想知道任何有關設備的信息時,許多設備都將進入低功耗模式,因為我們不會要求任何東西。

方法4.設備授權

這種方法的缺點是,在許多系統中,可以暫時禁用更多設備,這不僅是我們需要的設備,而且還會攻擊整個USB集線器。 例如:

$ echo 0 | sudo tee / sys /總線/ usb /設備/ usb1 /授權的$ echo 1 | sudo tee / sys /總線/ usb /設備/ usb1 /授權

當然,我們可以連續運行其中的所有內容:

$ echo 0 | sudo tee / sys /總線/ usb /設備/ usb1 /授權; 迴聲1 | sudo tee / sys /總線/ usb /設備/ usb1 /授權

我們必須小心,如果有更多磁盤連接到同一USB端口(並且幾乎總是在我們的計算機中,內部連接到集線器的USB端口數量比我們看到的要多),因此會有多個端口具有相同的USB 父親,以某種方式表示。

方法5。重新啟動USB子系統

如果要重新啟動USB子系統。 也就是說,一方面刷新所有USB設備,例如拔出所有設備,然後再將它們全部插入,然後我們可以下載並重新加載USB內核模塊:

$ sudo modprobe -r ehci_hcd; sudo modprobe ehci_hcd#用於USB2 $ sudo modprobe -r xhci_hcd; sudo modprobe xhci_hcd#用於USB3

儘管某些發行版(包括最新版本的Ubuntu及其衍生版本)具有 集成USB模塊 並且無法下載。 另一方面,由於其他模塊(打印機,存儲設備,接口設備等)正在使用中,系統可能不允許我們下載它們,並且如果我們開始下載模塊並破壞東西,則可能必須重新啟動最後的計算機。 因此,我們可以通過另一種方式:

$ echo'0000:00:14.5'| sudo tee / sys /總線/ pci /驅動程序/ xhci_hcd /取消綁定$ echo'0000:00:14.5'| sudo tee / sys /總線/ pci /驅動程序/ xhci_hcd /綁定

要找到我們的設備,我們可以在/ sys / bus / pci / drivers / xhci_hcd裡面做ls,將會出現幾件事,我們必須尋找一個看起來像這樣的東西 aaaa:bb:cc:dd.e。 您的USB端口可能不是xhci_hcd(USB3),而是ehci_hcd(USB2)


本文內容遵循我們的原則 編輯倫理。 要報告錯誤,請單擊 這裡.

14條評論,留下您的評論

發表您的評論

您的電子郵件地址將不會被發表。

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   克里斯蒂安 他說:

    優秀的文章!

    1.    汽油 他說:

      非常感謝克里斯蒂安! 希望您發現它有用。

  2.   安東尼奧·胡安 他說:

    在本文中,並不是說只要您打算將它放到正確的另一側,就必須將它轉過來……呵呵。 很棒的文章。

    1.    汽油 他說:

      謝謝安東尼奧·胡安! 好吧,當我嘗試張貼在帖子中的所有內容時,您不知道我發生了多少次! 🙂

  3.   羅姆薩 他說:

    大。 上乘的物品。 它的標題應為:“只需拔下USB記憶棒,即可了解Linux系統。” 恭喜你
    來自馬拉加的問候。

    1.    汽油 他說:

      好吧,是的,我不知道是否有人會開始用C編程並從本文中訪問設備! 也來自馬拉加! 我們無處不在🙂

  4.   HO2Gi 他說:

    令人印象深刻的文章。 您已經被這類材料所困擾。

    1.    汽油 他說:

      謝謝HO2Gi! 在我的個人博客上( http://totaki.com/poesiabinaria )還有很多風格的教程🙂

  5.   阿塔瓦爾帕 他說:

    朋友,非常感謝您。 我從linux開始,特別是從linux mint開始,並且遇到以下問題:在控制台中,我可以看到我的手機已連接到計算機,但未在文件管理器中。 因此,我不能將其用作連接互聯網的調製解調器。 我可以做什麼?

    1.    加斯帕爾·費爾南德斯(Gaspar Fernandez) 他說:

      有些電話不允許您作為調製解調器連接,但可以進行網絡共享

  6.   米拉佐 他說:

    優秀的文檔!
    感謝您抽出寶貴的時間分享經驗。
    我將其用作遇到的另一類問題的參考:斷開Ubuntu中的USB端口(#42〜precision1-Ubuntu SMP Wed Aug 14 15:31:16 UTC 2013)
    有時系統會在dmesg中拋出-110並重新啟動PC,這可能是由於連接設備的USB(USB3.0)的電源不足而導致的故障。

    現在,我使用lsusb -v檢查設備的功率水平,但它拋出2mA的信號,這是完全荒謬的……僅LED消耗的電流更多……

    我連接了華為E4 USB-8372G調製解調器,但是maxpower指示2mA,這是不可思議的,現在這種懷疑已經改變,並且出現了其他問題:
    MaxPower是設備或操作系統上默認提供的屬性嗎?
    USB端口將提供的最大功率的參數嗎?
    如果是參數
    是否可以修改此參數並將其設置為USB端口提供的最大值(900mAh- 3.0 / 500mAh- 2.0)?
    如果不是參數,
    它是USB消耗的實時測量值(不太可能)嗎?
    如果是另一種選擇,請向我解釋,因為我對參考信息有疑問。

    我對此MaxPower值有一些疑問,如果您還有其他信息,我將不勝感激。

    lsusb -v 2> / dev / null | egrep“ ^總線| MaxPower | bDeviceClass | iProduct”

    總線002設備006:ID 1a86:7523勤恆電子HL-340 USB串行適配器
    bDeviceClass 255供應商特定的類
    iProduct 2 USB2.0-串行
    最大功率96mA
    總線002設備008:ID 12d1:14db華為技術有限公司
    bDeviceClass 2通信
    iProduct 2 HUAWEI_MOBILE
    最大功率2mA

  7.   匿名 他說:

    可以應用於Windows嗎?

  8.   凱洛 他說:

    非常感謝。 在我的外部磁盤上使用udisksctl power-off -b / dev / sdc足以解決頭痛問題。 如果卸載本身可以選擇執行此操作會更好嗎?

  9.   瑪麗莎 他說:

    天哪! 有人讀過整個遺囑嗎? 和上面的板後我們仍然不知道如何關閉DAC / USB聲音接口,打印機,圖形輸入板......總之,沒有什麼不是秒殺或外置磁盤。 多麼浪費時間...

布爾值(true)