5 cách ngắt kết nối và kết nối thiết bị USB mà không cần rời tay khỏi bàn phím

Trong nhiều trường hợp, khi chúng ta đang sử dụng máy tính, chúng ta ngắt kết nối thiết bị USB (một cách an toàn, đúng như vậy) và ngay sau đó, chúng ta nhận ra rằng chúng ta đã quên sao chép tệp hoặc chúng ta phải đảm bảo rằng dữ liệu đã ở trong đơn vị của chúng tôi. Đối với những trường hợp này, việc ngắt kết nối hầu như các ổ USB khi chúng tôi làm việc từ xa thường rất hữu ích.

Sau khi đẩy thiết bị ra, chúng tôi không còn thấy nó trong danh sách thiết bị của mình, nhưng ổ cứng hoặc ổ đĩa vẫn được kết nối thông qua cổng USB và trong nhiều bản phân phối ngày nay, khi đã đẩy ổ đĩa ra một cách an toàn, chúng tôi cũng không thấy thiết bị và Chúng tôi không thể làm gắn kết từ thiết bị đầu cuối của chúng tôi. Giải pháp nhanh nhất là ngắt kết nối cáp và kết nối lại, trong một số trường hợp do lười phải đứng dậy hoặc do chúng ta đang truy cập vào máy tính không có trước mặt và không có ai xung quanh nên chúng ta không thể thực hiện được. .

Thông tin về thiết bị USB

Trước khi bắt đầu, chúng ta hãy xem cách lấy thông tin về các thiết bị USB được kết nối với hệ thống. Đối với điều này, chúng ta có thể sử dụng lsusb, sẽ liệt kê các thiết bị được kết nối ngay bây giờ. Tôi đưa ra các ví dụ về những gì tôi nhận được trên máy tính của mình ngay bây giờ, nhưng có thể nó rất khác với những gì bạn nhận được:

$ lsusb Bus 002 Thiết bị 001: ID 1d6b: 0003 Linux Foundation 3.0 root hub Bus 001 Thiết bị 006: ID 8087: 0a2a Intel Corp. Bus 001 Thiết bị 007: ID 046d: c52b Logitech, Inc. Unifying Receiver Bus 001 Thiết bị 005: ID 1a40 : 0101 Terminus Technology Inc. Thiết bị Hub Bus 001 010: ID 125f: c93a A-DATA Technology Co., Ltd. 4GB Pen Drive Bus 001 Thiết bị 003: ID 04f2: b424 Chicony Electronics Co., Ltd Bus 001 Thiết bị 001: ID 1d6b : 0002 Trung tâm gốc Linux Foundation 2.0

Nếu chúng ta muốn biết thêm thông tin, chúng ta có thể sử dụng công cụ sửa đổi -t sẽ hiển thị cho chúng ta kết quả đầu ra ở dạng cây với thông tin về các mô-đun:

$ lsusb -t /: Bus 02.Port 1: Dev 1, Class = root_hub, Driver = xhci_hcd / 8p, 5000M /: Bus 01.Port 1: Dev 1, Class = root_hub, Driver = xhci_hcd / 16p, 480M | __ Cổng 4: Dev 3, If 0, Class = Video, Driver = uvcvideo, 480M | __ Port 4: Dev 3, If 1, Class = Video, Driver = uvcvideo, 480M | __ Port 5: Dev 10, If 0, Class = Bộ nhớ chung, Trình điều khiển = USB-Storage, 480M | __ Cổng 6: Dev 5, Nếu 0, Class = Hub, Driver = hub / 4p, 12M | __ Cổng 4: Dev 7, Nếu 0, Class = Thiết bị giao diện người, Driver = usbhid, 12M | __ Port 4: Dev 7, If 1, Class = Human Interface Device, Driver = usbhid, 12M | __ Port 4: Dev 7, If 2, Class = Human Interface Device, Driver = usbhid, 12M | __ Cổng 9: Dev 6, If 0, Class = Wireless, Driver = btusb, 12M | __ Port 9: Dev 6, If 1, Class = Wireless, Driver = btusb, 12M

Nếu chúng ta muốn biết thêm thông tin, chúng ta có thể sử dụng lsusb -v (đầu ra rất lớn), ngoài ra, ví dụ, chúng tôi có thể biết công suất tối đa được cung cấp cho thiết bị, theo cách sau:

$ lsusb -v 2> / dev / null | egrep "^ Bus | MaxPower" Bus 002 Thiết bị 001: ID 1d6b: 0003 Linux Foundation 3.0 root hub MaxPower 0mA Bus 001 Thiết bị 006: ID 8087: 0a2a Intel Corp. MaxPower 100mA Bus 001 Thiết bị 007: ID 046d: c52b Logitech, Inc. Bộ thu thống nhất MaxPower 98mA Bus 001 Thiết bị 005: ID 1a40: 0101 Terminus Technology Inc. Thiết bị Hub MaxPower 100mA Bus 001 010: ID 125f: c93a A-DATA Technology Co., Ltd. 4GB Pen Drive MaxPower 480mA Bus 001 Thiết bị 003: ID 04f2: b424 Chicony Electronics Co., Ltd MaxPower 500mA Bus 001 Thiết bị 001: ID 1d6b: 0002 Linux Foundation 2.0 root hub MaxPower 0mA

Các lệnh rất hữu ích khác là thiết bị usb, HWiNFO, hoặc, ví dụ, nếu chúng ta có đường dẫn của một thiết bị (bên trong / dev /), chúng ta có thể yêu cầu hệ thống cung cấp tất cả thông tin có thể có về nó và các hệ thống con mà nó phải đi qua. Ví dụ: nếu chúng tôi kết nối một đĩa cứng USB, để có thể xem cách sử dụng thiết bị, chúng tôi cần trình điều khiển SCSI (đối với là / dev / sdX), chúng tôi cũng cần trình điều khiển lưu trữ USB, hoạt động thông qua Cổng USB, thuộc về một trung tâm, được cắm vào cổng PCI, trong số các hệ thống trung gian khác. Tất cả những gì chúng tôi có thể thấy với

$ udevadm thông tin --query = path --name = / dev / sdX --attribute-walk

o

$ udevadm thông tin -a -n / dev / sdX

Nếu chúng ta muốn liên doanh, chúng ta cũng có thể tham gia / sys / bus / usb và nhìn vào mọi thứ ở đó, chúng ta sẽ thấy rất nhiều thông tin, nhưng may mắn thay các lệnh trên phân loại tất cả thông tin này.

Đặc quyền và thiết bị

Để thực hiện tác vụ này, chúng tôi sẽ cần biết thiết bị nào chúng tôi sẽ kết nối lại. Để làm điều này, chúng ta có thể chạy:

$ dmesg | tail [Thu ngày 24 tháng 19 50:04:2016 7] sd 0: 0: 0: 3: Loại sg0 chung chung đính kèm 798339.431677 [7] sd 0: 0: 0: 15806464: [sdc] 512 Khối logic 8.09 byte: ( 7.54 GB / 798339.431840 GiB) [7] sd 0: 0: 0: 798339.431848: [sdc] Write Protect bị tắt [7] sd 0: 0: 0: 00: [sdc] Mode Sense: 00 00 00 798339.431988 [7] sd 0: 0: 0: 798339.431996: [sdc] Yêu cầu dữ liệu bộ nhớ cache không thành công [7] sd 0: 0: 0: 798339.434157: [sdc] Giả sử bộ đệm ổ đĩa: ghi qua [1] sdc: sdc2 sdc798339.446812 [7] sd 0 : 0: 0: 798360.808588: [sdc] Đĩa di động SCSI được đính kèm [9660] Tiện ích mở rộng ISO 3: Microsoft Joliet Cấp 798360.809353 [9660] Tiện ích mở rộng ISO 1991: RRIP_XNUMXA

Trong đầu ra này, chúng ta sẽ thấy rằng thiết bị chúng ta đang làm việc sdc (sdc1 và sdc2 sẽ là các phân vùng trong đĩa đó). Đối với các ví dụ tôi sẽ sử dụng thiết bị này, trong trường hợp của bạn, bạn sẽ phải hình dung mình có tài khoản nào.

Trong các ví dụ dưới đây, tôi sẽ sử dụng sudo để thực hiện các lệnh với các đặc quyền của nguồn gốc. Mặc dù nó sẽ là đủ để có một người dùng có đủ quyền. Nếu chúng tôi muốn xem các đặc quyền cần thiết, chỉ cần làm ls tới thiết bị:

$ ls -latr / dev / sdc brw-rw ---- 1 đĩa gốc 8, 32 ngày 24 tháng 19 50:XNUMX / dev / sdc

Ở đó, chúng tôi thấy rằng chủ sở hữu là người chủ và nhóm đĩa. Chỉ cần một người dùng thuộc đĩa nhóm là đủ.

Phương pháp 1. Coi nó như một đĩa CD / DVD

Nó là đơn giản nhất của tất cả. Chắc chắn nếu bạn đã sử dụng GNU / Linux trong nhiều năm, khi bạn làm việc với CD-ROM hoặc DVD, bạn đã sử dụng lệnh eject. Chà, eject được sử dụng để mở CDROM và eject -t được sử dụng để đóng khay. Chà, nếu chúng ta làm điều này trước thiết bị USB:

$ sudo eject -t / dev / sdc

Thiết bị sẽ xuất hiện như thể chúng tôi đã kết nối lại.

Phương pháp 2. Đã rút phích cắm và cắm vào máy ảo

Trên một số hệ thống (miễn là phần cứng hỗ trợ), khi bạn tháo thiết bị USB một cách an toàn, thiết bị sẽ ngừng cấp nguồn và thiết bị không còn xuất hiện nữa. Nó cũng giống như khi bạn làm:

udisksctl power-off -b / dev / sdc

Trong trường hợp này, / dev / sdc đó là thiết bị của tôi và với lệnh này, nó mô phỏng ngắt kết nối nguồn ảo.

Vấn đề là bây giờ / dev / sdc không tồn tại, hơn nữa, nếu chúng ta nhìn vào dmesg, chúng ta sẽ nhận được một cái gì đó như thế này:

$ dmesg | đuôi [281954.693298] usb 1-5: Ngắt kết nối USB, thiết bị số 3

Vì vậy, nếu chúng ta thử với phương pháp đẩy ra nó sẽ không làm việc. Lưu ý: Tôi đã đánh dấu usb 1-5 và chúng ta sẽ xem lý do tại sao ngay sau đây.

Nếu bạn làm việc từ xa, đây có thể là một ý tưởng hay. Hãy tưởng tượng rằng bạn có gắn ổ USB để sao lưu. Khi bạn tạo các bản sao, hệ thống nên biết rằng có các đĩa được kết nối nhưng khi chúng ta không sử dụng chúng, một mặt chúng ta phải tiết kiệm năng lượng và tránh mòn đĩa, vì vậy tốt hơn là cắt dòng điện, mặt khác, chúng tôi không muốn các ứng dụng độc hại thấy rằng chúng tồn tại những đĩa này để chúng không bị nhiễm. (Có, trong GNU / Linux có vi rút).

Làm thế nào để chúng ta kết nối hiện tại?

Chúng ta phải thực hiện một cuộc gọi đến cổng USB, vì điều này có một dự án được gọi là sự trung thành (Tôi liên kết đến một nhánh của dự án ban đầu vì ở đây một lỗi đã được sửa có thể loại bỏ dòng điện khỏi nhiều thiết bị hơn chứ không chỉ thiết bị mà chúng tôi muốn). Có nhiều dự án hơn (như uhubctl), nhưng điều này không có phụ thuộc khi chúng ta biên dịch, nó cũng chỉ là một tệp hubpower.c.
Đầu tiên, chúng tôi biên dịch nó,

$ gcc -o hubpower hubpower.c

Bây giờ, bạn có nhớ những con số được in đậm từ dmesg? Chà, chúng ta sẽ sử dụng chúng, chúng ta sẽ phải ngắt kết nối thiết bị và kết nối lại, như thế này:

$ sudo ./hubpower 1: 1 nguồn 5 tắt Trạng thái cổng 5: 0000 Power-Off $ sudo ./hubpower 1: 1 nguồn 5 trên trạng thái cổng 5: 0100 Power-On

Nếu thiết bị không phát hiện ra chúng tôi, chúng tôi có thể thử thực hiện:

$ sudo ./hubpower 1: 1 bind Yêu cầu trình điều khiển liên kết được gửi đến hạt nhân

Bằng cách này, chúng ta sẽ thấy lại thiết bị USB đã kết nối của mình.

Nếu chúng tôi không muốn một chương trình C ... tôi có nó trong perl

Một chương trình C rất khó để biên dịch và kiểm tra xem những gì chúng ta sẽ làm rất đơn giản, vì vậy chúng ta có thể thử cổng nhỏ này trong 10 dòng được thực hiện bằng perl:

#! / bin / perl yêu cầu "sys / ioctl.ph"; $ device = "05"; open (my $ usbdev,"> "," / dev / bus / usb/ 001/001 "); $ data = pack ("H *", "23010800". $ thiết bị. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ data); $ data = pack ("H *", "23030800". $ thiết bị. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ data); đóng ($ usbdev);

Chúng ta phải tôn trọng $ thiết bị, số cổng (trong trường hợp của tôi là 5), nó là giá trị thập lục phân, do đó 10 sẽ là A, 11 sẽ là B, 15 sẽ là F, 16 sẽ là 10 ... Chúng tôi cũng phải theo dõi thiết bị và xe buýt mà chúng tôi truy cập từ / dev / bus / usb /001/001, các số phải đi với số XNUMX ở đầu vì chúng tôi đang gọi tệp đó.

Như chúng ta thấy, key nằm trong ioctl (), nó là một hàm thao tác các thông số của thiết bị từ một tệp đặc biệt trong hệ thống tệp. Trong số các giá trị thập lục phân được sử dụng, chúng tôi tìm thấy 0xC0185500, một hằng số được gọi là USBDEVFS_CONTROL mà chúng tôi sẽ gửi một lệnh điều khiển đến thiết bị USB, Các mã khác thuộc về yêu cầu ngắt kết nối và kết nối (bạn có thể tìm thêm thông tin trong chương trình được thực hiện bằng C).

Phương pháp 3. Ẩn và hiển thị thiết bị

Một cách khác để ngắt kết nối thiết bị có thể là:

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

Và chúng tôi có thể khôi phục nó bằng cách:

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

Phương pháp này không gây ra sự ngắt kết nối hoàn toàn của thiết bị. Nó chỉ làm cho hệ điều hành không nói chuyện với nó và nhiều thiết bị, khi một máy tính không muốn biết bất cứ điều gì về chúng, được đặt ở chế độ năng lượng thấp, vì chúng tôi sẽ không yêu cầu bất cứ điều gì.

Phương pháp 4. Ủy quyền thiết bị

Nhược điểm của phương pháp này là trong nhiều hệ thống, nhiều thiết bị có thể tạm thời ngừng hoạt động, đó không chỉ là thứ chúng ta cần mà chúng ta còn tấn công toàn bộ hub USB. Ví dụ:

$ echo 0 | sudo tee / sys / bus / usb / devices / usb1 / Authorised $ echo 1 | sudo tee / sys / bus / usb / devices / usb1 / Authorised

Tất nhiên, chúng tôi có thể chạy mọi thứ liên tiếp:

$ echo 0 | sudo tee / sys / bus / usb / devices / usb1 / Authorised; tiếng vang 1 | sudo tee / sys / bus / usb / devices / usb1 / Authorised

Chúng tôi phải cẩn thận, nếu có nhiều đĩa được kết nối với cùng một cổng USB (và hầu như luôn luôn trong máy tính của chúng tôi, một số cổng USB hơn những cổng mà chúng tôi thấy được kết nối nội bộ với một trung tâm, vì vậy có các nhóm cổng có cùng một USB cha, đặt nó theo một cách nào đó.

Phương pháp 5. Khởi động lại hệ thống con USB

Nếu chúng ta muốn khởi động lại hệ thống con USB. Đó là, làm mới tất cả các thiết bị USB, chẳng hạn như rút và cắm tất cả chúng, một mặt chúng ta có thể tải xuống và tải lại mô-đun hạt nhân USB:

$ sudo modprobe -r ehci_hcd; sudo modprobe ehci_hcd # Đối với USB2 $ sudo modprobe -r xhci_hcd; sudo modprobe xhci_hcd # Đối với USB3

Mặc dù một số bản phân phối, phiên bản mới nhất của Ubuntu và các dẫn xuất đi kèm, có mô-đun USB tích hợp và chúng không thể được tải xuống. Mặt khác, hệ thống có thể không cho phép chúng tôi tải chúng xuống vì chúng đang được sử dụng do các mô-đun khác (máy in, bộ lưu trữ, thiết bị giao diện, v.v.) và nếu chúng tôi bắt đầu tải xuống mô-đun và làm hỏng mọi thứ, chúng tôi có thể phải khởi động lại máy tính khi kết thúc. Vì vậy, theo một cách khác, chúng ta có thể làm:

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

Để tìm thiết bị của mình, chúng ta có thể thực hiện lệnh bên trong / sys / bus / pci / drivers / xhci_hcd, một số thứ sẽ xuất hiện, chúng ta phải tìm một cái trông giống như thế này aaaa: bb: cc: dd.e. Cổng USB của bạn có thể không phải là xhci_hcd (USB3) mà là ehci_hcd (USB2)


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   Cristian dijo

    Bài báo xuất sắc!

    1.    gasparfm dijo

      Cảm ơn Cristian rất nhiều! Tôi hy vọng bạn đã tìm thấy nó hữu ích.

  2.   Antonio juan dijo

    Trong bài viết này không nói rằng bất cứ khi nào bạn định đặt nó, nó nằm ở phía đối diện với cái đúng và bạn phải xoay nó lại ... Bài báo tuyệt vời.

    1.    gasparfm dijo

      Cảm ơn Antonio Juan! Nhìn kìa, bạn không biết điều đó đã xảy ra với tôi bao nhiêu lần trong khi tôi đang thử mọi thứ mà tôi đã đưa vào bài viết! 🙂

  3.   ROMAT dijo

    Xuất sắc. Một mặt hàng cao cấp. Nó phải có tiêu đề: "Tìm hiểu về hệ thống Linux bằng cách rút và cắm thẻ USB của bạn." Xin chúc mừng.
    Lời chào từ Malaga.

    1.    gasparfm dijo

      Vâng, vâng, tôi không biết liệu ai đó sẽ bắt đầu lập trình bằng C và truy cập các thiết bị từ bài đăng này! Cũng từ Malaga !! Chúng tôi ở khắp mọi nơi 🙂

  4.   HO2Gi dijo

    Bài viết ấn tượng. Bạn đã đi quá đà với tài liệu như vậy.

    1.    gasparfm dijo

      Cảm ơn HO2Gi !! Trên blog cá nhân của tôi ( http://totaki.com/poesiabinaria ) cũng có rất nhiều hướng dẫn về phong cách 🙂

  5.   atahualpa dijo

    cảm ơn bạn nhiêu lăm. Tôi đang bắt đầu trong linux, cụ thể là trong bạc hà linux và tôi gặp sự cố sau: trong bảng điều khiển, tôi có thể thấy rằng điện thoại của tôi được kết nối với máy nhưng không có trong trình quản lý tệp. Và do đó tôi không thể sử dụng nó như một modem để kết nối với internet. Những gì tôi có thể làm được?

    1.    Gaspar Fernandez dijo

      Có những điện thoại không cho phép bạn kết nối như một modem, nhưng bạn có thể thực hiện Tethering

  6.   Milazzo dijo

    Tài liệu tuyệt vời!
    Cảm ơn bạn đã dành thời gian để chia sẻ kinh nghiệm.
    Tôi đang sử dụng nó làm tài liệu tham khảo cho một loại vấn đề khác mà tôi gặp phải: Ngắt kết nối cổng USB trong ubuntu (# 42 ~ precision1-Ubuntu SMP Thứ tư ngày 14 tháng 15 31:16:2013 UTC XNUMX)
    Có một lúc khi Hệ thống ném -110 trong dmesg và khởi động lại PC, nó được giả định rằng lỗi là do thiếu nguồn trong USB nơi thiết bị được kết nối (USB3.0).

    Bây giờ tôi sử dụng lsusb -v để kiểm tra mức năng lượng của thiết bị nhưng nó ném 2mA, điều này hoàn toàn vô lý ... chỉ có đèn LED tiêu thụ nhiều hơn thế ...

    Tôi kết nối modem huawei E4 USB-8372G, tuy nhiên công suất tối đa chỉ ra 2mA, thật không thể tin được, bây giờ nghi ngờ đã thay đổi và những người khác đã phát sinh:
    MaxPower có phải là thuộc tính mặc định trên thiết bị hoặc trong hệ điều hành không?
    Nó có phải là thông số về công suất tối đa mà cổng usb sẽ cung cấp không?
    Trong trường hợp là một tham số
    Thông số này có thể được sửa đổi và đặt thành mức tối đa được cấp bởi cổng USB (900mAh- 3.0 / 500mAh- 2.0) không?
    Trong trường hợp nó không phải là một tham số,
    Nó có phải là giá trị đo lường thời gian thực của mức tiêu thụ USB (không chắc)?
    Nếu đó là một lựa chọn khác, vui lòng giải thích cho tôi vì tôi đang nghi ngờ về thông tin tham khảo.

    Tôi có một số nghi ngờ về giá trị MaxPower này, nếu bạn có bất kỳ thông tin bổ sung nào, tôi sẽ rất biết ơn.

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

    Thiết bị Bus 002 006: ID 1a86: 7523 QinHeng Electronics Bộ chuyển đổi USB-Serial HL-340
    bDeviceClass 255 Lớp cụ thể của nhà cung cấp
    iProduct 2 USB2.0-Serial
    MaxPower 96mA
    Thiết bị Bus 002 008: ID 12d1: 14db Huawei Technologies Co., Ltd.
    bDeviceClass 2 Communications
    iProduct 2 HUAWEI_MOBILE
    MaxPower 2mA

  7.   anonimo dijo

    Nó có thể được áp dụng cho các cửa sổ?

  8.   Chelo dijo

    Cảm ơn rất nhiều. Với udisksctl power-off -b / dev / sdc trên đĩa ngoài của tôi, nó đã đủ để giải quyết cơn đau đầu. Sẽ không tốt hơn nếu việc ngắt kết nối có một tùy chọn để tự thực hiện việc này?

  9.   Marisa dijo

    Chúa ơi, cái quái gì vậy! Có ai đọc toàn bộ di chúc này không? Và ở trên sau tấm, chúng ta vẫn chưa biết cách tắt giao tiếp âm thanh DAC / USB, máy in, máy tính bảng đồ họa ... à, không có gì không phải là tăng đột biến hoặc một đĩa ngoài. Thật là lãng phí thời gian ...