5 cara untuk memutuskan dan menghubungkan perangkat USB tanpa melepaskan tangan Anda dari keyboard

Dalam banyak kesempatan, ketika kami menggunakan komputer kami, kami memutuskan perangkat USB (dengan aman, sebagaimana mestinya) dan, segera setelah itu, kami menyadari bahwa kami lupa untuk menyalin file atau bahwa kami harus memastikan bahwa data ada di unit kami. Untuk kasus ini, biasanya sangat berguna untuk mencabut drive USB secara virtual saat kami bekerja dari jarak jauh.

Setelah mengeluarkan perangkat, kami tidak lagi melihatnya di daftar perangkat kami, tetapi hard drive atau flashdisk masih terhubung dengan port USB, dan di banyak distribusi saat ini, setelah mengeluarkan drive dengan aman, kami juga tidak melihat perangkat dan Kami tidak bisa melakukannya meningkat dari terminal kami. Solusi tercepat adalah dengan mencabut kabel dan menyambungkannya kembali, dalam beberapa kasus, baik karena malas karena harus bangun atau karena kita mengakses komputer yang tidak kita hadapi dan tidak ada orang di sekitar kita, kita tidak dapat melakukannya .

Informasi tentang perangkat USB

Sebelum kita mulai, mari kita lihat bagaimana mendapatkan informasi tentang perangkat USB yang terhubung ke sistem. Untuk ini, kita bisa menggunakan lsusb, yang akan mencantumkan perangkat yang terhubung sekarang. Saya memberikan contoh apa yang saya dapatkan di komputer saya sekarang, tapi mungkin sangat berbeda dari yang Anda dapatkan:

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

Jika kita menginginkan informasi lebih lanjut, kita dapat menggunakan -t modifier yang akan menunjukkan kepada kita keluaran berupa pohon dengan informasi tentang modul:

$ 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 | __ Port 4: Dev 3, Jika 0, Kelas = Video, Driver = uvcvideo, 480M | __ Port 4: Dev 3, Jika 1, Kelas = Video, Driver = uvcvideo, 480M | __ Port 5: Dev 10, Jika 0, Kelas = Penyimpanan Massal, Driver = penyimpanan usb, 480M | __ Port 6: Dev 5, If 0, Class = Hub, Driver = hub / 4p, 12M | __ Port 4: Dev 7, If 0, Class = Human Interface Device, 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 | __ Port 9: Dev 6, Jika 0, Kelas = Nirkabel, Driver = btusb, 12M | __ Port 9: Dev 6, Jika 1, Kelas = Nirkabel, Driver = btusb, 12M

Jika kami menginginkan lebih banyak informasi, kami dapat menggunakan lsusb -v (keluarannya sangat besar), selain itu kita bisa, misalnya mengetahui daya maksimum yang disalurkan ke perangkat, dengan cara berikut:

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

Perintah lain yang sangat berguna adalah perangkat usb, hwinfo, atau, misalnya, jika kita memiliki jalur perangkat (di dalam / dev /), kita dapat meminta sistem untuk semua informasi yang mungkin tentangnya dan subsistem yang harus dilalui. Misalnya, jika kita menghubungkan hard disk USB, agar kita dapat melihat bagaimana perangkat itu digunakan, kita membutuhkan driver SCSI (untuk menjadi / dev / sdX), kita juga membutuhkan driver penyimpanan USB, yang bekerja melalui Port USB, yang merupakan bagian dari hub, yang dihubungkan ke port PCI, di antara sistem perantara lainnya. Semua yang bisa kami lihat

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

o

$ udevadm info -a -n / dev / sdX

Jika kita ingin bertualang, kita juga bisa masuk / sys / bus / usb dan melihat semua yang ada, kita akan melihat banyak informasi, tetapi untungnya perintah di atas mengklasifikasikan semua informasi ini.

Hak istimewa dan perangkat

Untuk melakukan tugas ini kita perlu mengetahui perangkat mana yang akan kita gunakan sambungkan kembali. Untuk melakukan ini, kita dapat menjalankan:

$ dmesg | tail [Kam 24 Nov 19:50:04 2016] sd 7: 0: 0: 0: Terlampir scsi generic sg3 tipe 0 [798339.431677] sd 7: 0: 0: 0: [sdc] 15806464 blok logis 512-byte: ( 8.09 GB / 7.54 GiB) [798339.431840] sd 7: 0: 0: 0: [sdc] Write Protect tidak aktif [798339.431848] sd 7: 0: 0: 0: [sdc] Mode Sense: 00 00 00 00 [798339.431988] sd 7: 0: 0: 0: [sdc] Gagal meminta data cache [798339.431996] sd 7: 0: 0: 0: [sdc] Dengan asumsi cache drive: tulis melalui [798339.434157] sdc: sdc1 sdc2 [798339.446812] sd 7 : 0: 0: 0: [sdc] Disk yang dapat dilepas SCSI terpasang [798360.808588] Ekstensi ISO 9660: Microsoft Joliet Level 3 [798360.809353] Ekstensi ISO 9660: RRIP_1991A

Dalam output ini, kita akan melihat bahwa perangkat yang kita gunakan adalah sdc (sdc1 dan sdc2 akan menjadi partisi di dalam disk itu). Untuk contoh saya akan menggunakan perangkat ini, dalam kasus Anda, Anda harus memvisualisasikan akun mana yang Anda miliki.

Dalam contoh di bawah ini saya akan menggunakan sudo untuk menjalankan perintah dengan hak istimewa akar. Meskipun itu sudah cukup untuk memiliki pengguna dengan izin yang memadai. Jika kita ingin melihat hak istimewa yang diperlukan, lakukan saja ls ke perangkat:

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

Di sana kita melihat bahwa pemiliknya adalah root dan grupnya cakram. Ini akan cukup untuk memiliki pengguna yang termasuk dalam disk grup.

Metode 1. Perlakukan seperti CD / DVD

Ini yang paling sederhana dari semuanya. Tentunya jika Anda telah berada di GNU / Linux selama bertahun-tahun, ketika Anda bekerja dengan CD-ROM atau DVD Anda menggunakan perintah eject. Nah, eject digunakan untuk membuka CDROM dan eject -t digunakan untuk menutup baki. Nah, jika kita melakukan ini sebelum perangkat USB:

$ sudo eject -t / dev / sdc

Perangkat akan muncul seolah-olah kita telah menghubungkannya lagi.

Metode 2. Unplugged dan Virtual Plugged In

Pada beberapa sistem (selama perangkat keras mendukungnya), saat Anda melepas perangkat USB dengan aman, daya perangkat akan berhenti dan perangkat tidak lagi muncul. Ini sama seperti saat Anda melakukannya:

udisksctl matikan -b / dev / sdc

Dalam hal ini, / dev / sdc itu perangkat saya, dan dengan perintah ini ia mensimulasikan pemutusan daya virtual.

Masalahnya sekarang / dev / sdc tidak ada, apalagi jika kita lihat dmesg kita akan mendapatkan sesuatu seperti ini:

$ dmesg | ekor [281954.693298] usb 1-5: Lepaskan USB, perangkat nomor 3

Jadi jika kita coba dengan metode ejektor itu tidak akan bekerja. Catatan: Saya telah menyoroti usb 1-5 dan kita akan segera melihat alasannya.

Jika Anda bekerja dari jarak jauh, ini mungkin ide yang bagus. Bayangkan Anda memiliki drive USB yang terhubung untuk membuat salinan cadangan. Ketika Anda membuat salinan, itu baik bahwa sistem mengetahui bahwa ada disk yang terhubung tetapi, ketika kami tidak menggunakannya, di satu sisi kami harus menghemat energi dan hindari keausan cakram, jadi lebih baik memotong arus, di sisi lain, kami tidak ingin aplikasi berbahaya melihat keberadaannya disk ini agar tidak terinfeksi. (Ya, di GNU / Linux ada virus).

Bagaimana kita menghubungkan arus sekarang?

Kita harus melakukan panggilan ke port USB, untuk ini ada proyek bernama kekuatan hub (Saya menautkan ke garpu dari proyek asli karena di sini bug diperbaiki yang dapat menghapus arus dari lebih banyak perangkat dan bukan hanya yang kita inginkan). Ada lebih banyak proyek (seperti uhubctl), tetapi ini tidak memiliki dependensi karena saat kita pergi untuk mengkompilasi, ini juga hanya file hubpower.c.
Pertama, kami menyusunnya,

$ gcc -o hubpower hubpower.c

Sekarang, apakah Anda ingat angka yang dicetak tebal dari dmesg? Nah, kita akan menggunakannya, kita harus memutuskan perangkat dan menghubungkannya kembali, seperti ini:

$ sudo ./hubpower 1: 1 power 5 off Port 5 status: 0000 Power-Off $ sudo ./hubpower 1: 1 power 5 on Port 5 status: 0100 Power-On

Jika perangkat tidak mendeteksi kami, kami dapat mencoba melakukan:

$ sudo ./hubpower 1: 1 permintaan bind Bind-driver dikirim ke kernel

Dengan cara ini, kita akan melihat perangkat USB kita yang terhubung lagi.

Jika kita tidak menginginkan program C ... Saya memilikinya di perl

Program C sulit untuk dikompilasi dan diuji jika yang akan kita lakukan sangat sederhana, jadi kita dapat mencoba port kecil ini dalam 10 baris yang dibuat dalam perl:

#! / bin / perl membutuhkan "sys / ioctl.ph"; $ perangkat = "05"; buka ($ usbdev saya,"> "," / dev / bus / usb/ 001/001 "); $ data = paket ("H *", "23010800". $ perangkat. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ data); $ data = paket ("H *", "23030800". $ perangkat. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ data); tutup ($ usbdev);

Kita harus menghormati $ perangkat, nomor port (dalam kasus saya 5), ​​itu adalah nilai dalam heksadesimal, oleh karena itu 10 akan menjadi A, 11 akan menjadi B, 15 akan menjadi F, 16 akan menjadi 10 ... Kami juga harus memantau perangkat dan bus, yang kami akses dari / dev / bus / usb /001/001, angka harus menggunakan nol di depan karena kita memanggil file itu.

Seperti yang bisa kita lihat, kuncinya ada di ioctl (), ini adalah fungsi yang memanipulasi parameter perangkat dari file khusus di sistem file. Di antara nilai heksadesimal yang digunakan, kami temukan 0xC0185500, sebuah konstanta yang disebut USBDEVFS_CONTROL yang dengannya kami akan mengirimkan perintah kontrol ke perangkat USB, Kode-kode lain milik pemutusan dan permintaan koneksi (Anda dapat menemukan informasi lebih lanjut dalam program yang dibuat di C).

Metode 3. Menyembunyikan dan menampilkan perangkat

Cara lain untuk memutuskan sambungan perangkat adalah:

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

Dan kami dapat memulihkannya dengan melakukan:

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

Metode ini tidak menyebabkan pemutusan sambungan perangkat sepenuhnya. Itu hanya membuat sistem operasi tidak berbicara dengannya dan banyak perangkat, ketika komputer tidak ingin tahu apa-apa tentang mereka, dimasukkan ke mode daya rendah, karena kita tidak akan meminta apa pun.

Metode 4. Otorisasi perangkat

Kelemahan dari metode ini adalah bahwa di banyak sistem lebih banyak perangkat dapat dinonaktifkan sementara, yang tidak hanya yang kami butuhkan, tetapi kami juga menyerang seluruh hub USB. Sebagai contoh:

$ echo 0 | sudo tee / sys / bus / usb / devices / usb1 / diberi otorisasi $ echo 1 | sudo tee / sys / bus / usb / devices / usb1 / resmi

Yang, tentu saja, kita dapat menjalankan semuanya secara berurutan:

$ echo 0 | sudo tee / sys / bus / usb / perangkat / usb1 / resmi; echo 1 | sudo tee / sys / bus / usb / devices / usb1 / resmi

Kami harus berhati-hati, jika ada lebih banyak disk yang terhubung ke port USB yang sama (dan hampir selalu di komputer kami, beberapa port USB daripada yang kami lihat terhubung secara internal ke hub, jadi ada grup port dengan USB yang sama ayah, katakan dengan cara tertentu.

Metode 5. Mulai ulang subsistem USB

Jika kita ingin merestart subsistem USB. Artinya, segarkan semua perangkat USB, seperti mencabut dan mencolokkan semuanya, di satu sisi kita dapat mengunduh dan memuat ulang modul kernel USB:

$ sudo modprobe -r ehci_hcd; sudo modprobe ehci_hcd #Untuk USB2 $ sudo modprobe -r xhci_hcd; sudo modprobe xhci_hcd #Untuk USB3

Meskipun beberapa distribusi, versi terbaru Ubuntu dan turunannya disertakan, memiliki ekstensi modul USB terintegrasi dan mereka tidak dapat diunduh. Di sisi lain, sistem mungkin tidak mengizinkan kami mengunduhnya karena mereka sedang digunakan karena modul lain (printer, penyimpanan, perangkat antarmuka, dll.), Dan jika kami mulai mengunduh modul dan merusak barang, kami mungkin harus memulai ulang komputer. di bagian akhir. Jadi, dengan cara lain yang bisa kita lakukan:

$ 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

Untuk menemukan device kita, kita dapat melakukan ls di dalam / sys / bus / pci / drivers / xhci_hcd, beberapa hal akan muncul, kita harus mencari yang seperti ini aaaa: bb: cc: dd.e. Porta USB Anda mungkin tidak datang sebagai xhci_hcd (USB3), melainkan ehci_hcd (USB2)


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   Cristian dijo

    Artikel yang bagus!

    1.    terengah-engah dijo

      Terima kasih banyak Cristian! Saya harap Anda merasakan manfaatnya.

  2.   Antonio juan dijo

    Di artikel ini tidak dikatakan bahwa setiap kali akan diletakkan, itu berlawanan dengan yang benar dan Anda harus memutarnya ... hehehe. Artikel bagus.

    1.    terengah-engah dijo

      Terima kasih Antonio Juan! Begini, Anda tidak tahu berapa kali itu terjadi pada saya ketika saya mencoba semua yang saya masukkan ke dalam pos! 🙂

  3.   ROMSAT dijo

    Bagus. Item unggulan. Ini harus berjudul: "Pelajari tentang sistem Linux hanya dengan mencabut dan mencolokkan stik USB Anda." Selamat.
    Salam dari Malaga.

    1.    terengah-engah dijo

      Ya, saya tidak tahu apakah seseorang akan memulai pemrograman dalam C dan mengakses perangkat dari posting ini! Juga dari Malaga !! Kami ada dimana-mana 🙂

  4.   HO2Gi dijo

    Artikel yang mengesankan. Anda sudah berlebihan dengan materi seperti itu.

    1.    terengah-engah dijo

      Terima kasih HO2Gi !! Di blog pribadi saya ( http://totaki.com/poesiabinaria ) ada juga banyak tutorial tentang gaya 🙂

  5.   atahualpa dijo

    Terima kasih banyak teman. Saya memulai di linux, khususnya di linux mint, dan saya mengalami masalah berikut: di konsol saya dapat melihat bahwa ponsel saya terhubung ke mesin tetapi tidak di pengelola file. Dan karena itu saya tidak dapat menggunakannya sebagai modem untuk terhubung ke internet. Apa yang saya bisa lakukan?

    1.    Gaspar Fernandez dijo

      Ada ponsel yang tidak memungkinkan Anda terhubung sebagai modem, tetapi Anda dapat melakukan Tethering

  6.   Milazzo dijo

    Dokumentasi yang bagus!
    Terima kasih telah meluangkan waktu untuk berbagi pengalaman.
    Saya menggunakannya sebagai referensi untuk jenis masalah lain yang saya miliki: Pemutusan sambungan port USB di ubuntu (# 42 ~ precision1-Ubuntu SMP Wed 14 Agustus 15:31:16 UTC 2013)
    Ada saatnya Sistem melempar -110 ke dmesg dan me-restart PC, diasumsikan bahwa kegagalan tersebut disebabkan oleh kurangnya daya di USB tempat perangkat terhubung (USB3.0).

    Sekarang saya menggunakan lsusb -v untuk memverifikasi tingkat daya perangkat tetapi melempar 2mA, yang sama sekali tidak masuk akal ... hanya LED yang mengkonsumsi lebih dari itu ...

    Saya menghubungkan modem huawei E4 USB-8372G, tetapi kekuatan maksimum menunjukkan 2mA, yang luar biasa, sekarang keraguan telah berubah dan yang lain telah muncul:
    Apakah MaxPower merupakan atribut yang tersedia secara default di perangkat atau di OS?
    Apakah ini parameter daya maksimum yang akan diberikan oleh port usb?
    Dalam hal menjadi parameter
    Dapatkah parameter ini diubah dan disetel ke maksimum yang diberikan oleh port USB (900mAh- 3.0 / 500mAh- 2.0)?
    Jika ini bukan parameter,
    Apakah ini nilai pengukuran konsumsi USB secara real-time (tidak mungkin)?
    Jika ini adalah opsi lain, tolong jelaskan kepada saya karena saya ragu tentang informasi referensial.

    Saya memiliki beberapa keraguan mengenai nilai MaxPower ini, jika Anda memiliki informasi tambahan, saya akan sangat berterima kasih.

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

    Bus 002 Perangkat 006: ID 1a86: 7523 QinHeng Electronics HL-340 USB-Serial adapter
    bDeviceClass 255 Kelas Khusus Vendor
    iProduct 2 USB2.0-Serial
    MaxPower 96mA
    Bus 002 Perangkat 008: ID 12d1: 14db Huawei Technologies Co., Ltd.
    bDeviceClass 2 Komunikasi
    iProduct 2 HUAWEI_MOBILE
    MaxPower 2mA

  7.   Anonimo dijo

    Bisakah itu diterapkan ke windows?

  8.   Chelo dijo

    Terima kasih banyak. Dengan udisksctl power-off -b / dev / sdc pada disk eksternal saya, itu sudah cukup untuk mengatasi sakit kepala. Bukankah lebih baik jika unmount memiliki opsi untuk melakukannya sendiri?

  9.   Marisa dijo

    Tuhan apa-apaan! Apakah ada yang membaca seluruh wasiat ini? Dan di atas setelah piring kita masih tidak tahu cara mematikan antarmuka suara DAC / USB, printer, tablet grafis ... singkatnya, tidak ada yang bukan spike atau disk eksternal. Buang-buang waktu...