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)
Artikel yang bagus!
Terima kasih banyak Cristian! Saya harap Anda merasakan manfaatnya.
Di artikel ini tidak dikatakan bahwa setiap kali akan diletakkan, itu berlawanan dengan yang benar dan Anda harus memutarnya ... hehehe. Artikel bagus.
Terima kasih Antonio Juan! Begini, Anda tidak tahu berapa kali itu terjadi pada saya ketika saya mencoba semua yang saya masukkan ke dalam pos! 🙂
Bagus. Item unggulan. Ini harus berjudul: "Pelajari tentang sistem Linux hanya dengan mencabut dan mencolokkan stik USB Anda." Selamat.
Salam dari Malaga.
Ya, saya tidak tahu apakah seseorang akan memulai pemrograman dalam C dan mengakses perangkat dari posting ini! Juga dari Malaga !! Kami ada dimana-mana 🙂
Artikel yang mengesankan. Anda sudah berlebihan dengan materi seperti itu.
Terima kasih HO2Gi !! Di blog pribadi saya ( http://totaki.com/poesiabinaria ) ada juga banyak tutorial tentang gaya 🙂
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?
Ada ponsel yang tidak memungkinkan Anda terhubung sebagai modem, tetapi Anda dapat melakukan Tethering
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
Bisakah itu diterapkan ke windows?
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?
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...