Ellerinizi klavyeden çekmeden bir USB cihazını çıkarmanın ve bağlamanın 5 yolu

Çoğu durumda, bilgisayarımızı kullanırken bir USB cihazının bağlantısını keseriz (olması gerektiği gibi) ve hemen ardından, bir dosyayı kopyalamayı unuttuğumuzu veya bir verinin olduğundan emin olmamız gerektiğini fark ederiz. birimimizde. Bu durumlarda, uzaktan çalışırken USB sürücülerin fiilen bağlantısını kesmek genellikle çok kullanışlıdır.

Cihazı çıkardıktan sonra, onu cihaz listemizde artık görmüyoruz, ancak sabit sürücü veya pendrive hala USB bağlantı noktası üzerinden bağlı ve bugün birçok dağıtımda sürücüyü güvenli bir şekilde çıkardığımız için cihazı da görmüyoruz ve Yapamayız dağ bizim terminalimizden. En hızlı çözüm, kablonun bağlantısını kesip tekrar takmaktır, bazı durumlarda ya ayağa kalkmak zorunda kalma tembelliği nedeniyle ya da önünde olmadığımız ve etrafta kimsenin olmadığı bir bilgisayara erişiyor olmamız nedeniyle yapamıyoruz.

USB cihazları hakkında bilgiler

Başlamadan önce, sisteme bağlı USB cihazları hakkında nasıl bilgi alacağımızı görelim. Bunun için kullanabiliriz lsusb, şu anda bağlı cihazları listeleyecektir. Şu anda bilgisayarıma ne aldığıma dair örnekler verdim, ama belki de aldığınızdan çok farklıdır:

$ lsusb Bus 002 Cihaz 001: ID 1d6b: 0003 Linux Foundation 3.0 kök hub Bus 001 Cihaz 006: ID 8087: 0a2a Intel Corp. Bus 001 Cihaz 007: ID 046d: c52b Logitech, Inc. Birleştirici Alıcı Veri Yolu 001 Cihaz 005: ID 1a40 : 0101 Terminus Technology Inc. Hub Bus 001 Cihaz 010: ID 125f: c93a A-DATA Technology Co., Ltd. 4GB Pen Drive Bus 001 Device 003: ID 04f2: b424 Chicony Electronics Co., Ltd Bus 001 Device 001: ID 1d6b : 0002 Linux Foundation 2.0 kök hub

Daha fazla bilgi istiyorsak, bize modüller hakkında bilgi içeren ağaç şeklinde bir çıktı gösterecek -t değiştiricisini kullanabiliriz:

$ 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, 0 ise, Class = Video, Driver = uvcvideo, 480M | __ Port 4: Dev 3, If 1, Class = Video, Driver = uvcvideo, 480M | __ Port 5: Dev 10, If 0, Class = Yığın Depolama, Sürücü = usb-depolama, 480M | __ Bağlantı Noktası 6: Dev 5, 0 ise, Sınıf = Hub, Sürücü = hub / 4p, 12M | __ Bağlantı Noktası 4: Dev 7, 0 ise, Sınıf = İnsan Arabirim Cihazı, Sürücü = 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 | __ Bağlantı Noktası 9: Dev 6, 0 ise, Sınıf = Kablosuz, Sürücü = btusb, 12M | __ Bağlantı Noktası 9: Dev 6, 1 ise, Sınıf = Kablosuz, Sürücü = btusb, 12M

Daha fazla bilgi istiyorsak, kullanabiliriz lsusb -v (çıktı çok büyük), örneğin, cihaza verilen maksimum gücü şu şekilde de bilebiliriz:

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

Diğer çok kullanışlı komutlar usb cihazları, hwinfoveya örneğin, bir aygıtın yoluna sahipsek (/ dev / içinde), sistemden kendisi ve geçmesi gereken alt sistemler hakkında tüm olası bilgileri isteyebiliriz. Örneğin, bir USB sabit diski bağlarsak, cihazı nasıl kullanacağımızı görebilmemiz için, bir SCSI sürücüsüne ihtiyacımız var (/ dev / sdX olmak için), ayrıca, USB portu üzerinden çalışan bir USB depolama sürücüsüne ihtiyacımız var. diğer ara sistemler arasında bir PCI bağlantı noktasına takılan bir hub. Tüm görebildiğimiz

$ udevadm bilgisi --query = yol --isim = / dev / sdX - öznitelik-yürüyüş

o

$ udevadm bilgisi -a -n / dev / sdX

Girişimci olmak istiyorsak, biz de girebiliriz / sys / veri yolu / usb ve var olan her şeye bakın, çok fazla bilgi göreceğiz, ama neyse ki yukarıdaki komutlar tüm bu bilgileri sınıflandırıyor.

Ayrıcalıklar ve cihazlar

Bu görevi gerçekleştirmek için hangi cihaza gideceğimizi bilmemiz gerekecek yeniden bağlanmak. Bunu yapmak için şunları çalıştırabiliriz:

$ dmesg | tail [24 Kasım 19:50:04 2016] sd 7: 0: 0: 0: Ekli scsi jenerik sg3 türü 0 [798339.431677] sd 7: 0: 0: 0: [sdc] 15806464 512 bayt mantıksal bloklar: ( 8.09 GB / 7.54 GiB) [798339.431840] sd 7: 0: 0: 0: [sdc] Yazma Koruması kapalı [798339.431848] sd 7: 0: 0: 0: [sdc] Mod Algılama: 00 00 00 00 [798339.431988] sd 7: 0: 0: 0: [sdc] Önbellek verilerini sorma başarısız [798339.431996] sd 7: 0: 0: 0: [sdc] Sürücü önbelleği varsayılıyor: [798339.434157] sdc: sdc1 sdc2 [798339.446812] sd 7 üzerinden yaz : 0: 0: 0: [sdc] Bağlı SCSI çıkarılabilir disk [798360.808588] ISO 9660 Uzantılar: Microsoft Joliet Düzey 3 [798360.809353] ISO 9660 Uzantılar: RRIP_1991A

Bu çıktıda çalıştığımız cihazın sdc (sdc1 ve sdc2, bu disk içindeki bölümler olacaktır). Örnekler için bu cihazı kullanacağım, sizin durumunuzda hangi hesaba sahip olduğunuzu görselleştirmeniz gerekecek.

Aşağıdaki örneklerde kullanacağım sudo komutları aşağıdaki ayrıcalıklarla yürütmek kök. Yeterli izne sahip bir kullanıcıya sahip olmak yeterli olacaktır. Gerekli ayrıcalıkları görmek istiyorsak, ls cihaza:

$ ls -latr / dev / sdc brw-rw ---- 1 kök disk 8, 32 Kasım 24 19:50 / dev / sdc

Orada sahibin kök olduğunu ve grubun disk. Grup diskine ait bir kullanıcının olması yeterli olacaktır.

Yöntem 1. CD / DVD gibi davranın

En basit olanıdır. Elbette yıllardır GNU / Linux kullanıyorsanız, CD-ROM veya DVD ile çalışırken eject komutunu kullandınız. Eh, CDROM'u açmak için çıkarma ve tepsiyi kapatmak için çıkarma -t kullanılmıştır. Bunu USB cihazından önce yaparsak:

$ sudo çıkarma -t / dev / sdc

Cihaz, yeniden bağlamışız gibi görünmelidir.

Yöntem 2. Takılı Değil ve Sanal Olarak Takılı

Bazı sistemlerde (donanım desteklediği sürece), USB cihazını güvenli bir şekilde çıkardığınızda, cihaz gücü keser ve cihaz artık görünmez. Yaptığınız zamanla aynıdır:

udisksctl kapanma -b / dev / sdc

Bu durumda, / Dev / SDC bu benim cihazım ve bu komutla sanal bir güç bağlantısının kesilmesini simüle etti.

Sorun şu ki / dev / sdc artık mevcut değil, dahası, dmesg'ye bakarsak, şöyle bir şey elde ederiz:

$ dmesg | kuyruk [281954.693298] usb1-5: USB bağlantısı kesme, cihaz numarası 3

Yani yöntemini denersek çıkarmak çalışmayacak. Not: Vurguladım usb1-5 ve neden kısa bir süre sonra göreceğiz.

Uzaktan çalışırsanız, bu iyi bir fikir olabilir. Yedeklemeye bağlı USB sürücüleriniz olduğunu hayal edin. Kopyaları oluştururken, sisteme bağlı disklerin olduğunu bilmek iyidir, ancak bir yandan onları kullanmadığımızda enerji tasarrufu ve disk aşınmasını önleyin, bu nedenle diğer yandan akımı kesmek daha iyidir, kötü amaçlı uygulamaların var olduklarını görmesini istemiyoruz bu disklere virüs bulaşmaması için. (Evet, GNU / Linux'ta virüsler var).

Akımı şimdi nasıl bağlarız?

USB portuna bir çağrı yapmalıyız, bunun için adında bir proje var hub gücü (Orijinal projenin bir çatalına bağlantı veriyorum çünkü burada akımı yalnızca istediğimiz cihazdan değil, daha fazla cihazdan kaldırabilen bir hata düzeltildi). Daha fazla proje var (gibi uhubctl), ancak derlemeye gittiğimizde hiçbir bağımlılığı yoktur, aynı zamanda sadece bir hubpower.c dosyasıdır.
Önce derliyoruz,

$ gcc -o hubpower hubpower.c

Şimdi, kalın harflerle yazılmış sayıları hatırlıyor musunuz? dmesgPeki, onları kullanacağız, cihazın bağlantısını kesip yeniden bağlamamız gerekecek, şöyle:

$ sudo ./hubpower 1: 1 güç 5 kapalı Bağlantı noktası 5 durumu: 0000 Kapatma $ sudo ./hubpower 1: 1 güç 5 açık Bağlantı noktası 5 durumu: 0100 Güç Açık

Cihaz bizi algılamazsa şunları yapmayı deneyebiliriz:

$ sudo ./hubpower 1: 1 bind Bind-driver isteği çekirdeğe gönderildi

Böylelikle bağlı USB cihazımızı tekrar göreceğiz.

Bir C programı istemiyorsak ... Perl'de bende var

Yapacağımız şeyin çok basit olup olmadığını bir C programını derlemek ve test etmek zordur, bu nedenle bu küçük portu perl'de yapılmış 10 satırda deneyebiliriz:

#! / bin / perl "sys / ioctl.ph" gerektirir; $ device = "05"; open ($ usbdev'im,"> "," / dev / bus / usb/ 001/001 "); $ veri = paket ("H *", "23010800". $ aygıt. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ veri); $ veri = paket ("H *", "23030800". $ aygıt. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ veri); kapat ($ usbdev);

Saygı duymalıyız $ deviceport numarası (benim durumumda 5 idi), onaltılık bir değerdir, bu nedenle 10 A olacak, 11 B olacak, 15 F olacak, 16 olacak 10 ... Ayrıca cihazı ve veriyolu da izlemeliyiz, / dev / bus / usb / 'den eriştiğimiz001/001, bu dosyayı çağırdığımız için numaraların başında sıfır olmalıdır.

Gördüğümüz gibi, anahtar ioctl () içindedir, bir aygıtın parametrelerini dosya sistemindeki özel bir dosyadan işleyen bir işlevdir. Kullanılan onaltılık değerler arasında buluyoruz 0xC0185500USB cihazına bir kontrol komutu göndereceğimiz USBDEVFS_CONTROL adlı bir sabit, Diğer kodlar bağlantı kesme ve bağlantı isteğine aittir (daha fazla bilgiyi C'de yapılan programda bulabilirsiniz).

Yöntem 3. Cihazı gizleme ve gösterme

Cihazın bağlantısını kesmenin başka bir yolu da şunlar olabilir:

echo '1-5' | sudo tee / sys / bus / usb / sürücüler / usb / unbind

Ve bunu yaparak kurtarabiliriz:

echo '1-5' | sudo tee / sys / bus / usb / sürücüler / usb / bind

Bu yöntem, cihaz bağlantısının tamamen kesilmesine neden olmaz. Yalnızca işletim sisteminin kendisiyle konuşmamasını sağlar ve bir bilgisayar onlar hakkında hiçbir şey bilmek istemediğinde birçok cihaz, hiçbir şey istemeyeceğimiz için düşük güç moduna alınır.

Yöntem 4. Cihaz yetkilendirme

Bu yöntemin dezavantajı, birçok sistemde daha fazla cihazın geçici olarak devre dışı bırakılabilmesidir, bu sadece ihtiyacımız olan şey değil, aynı zamanda tüm bir USB hub'ına da saldırıyoruz. Örneğin:

$ echo 0 | sudo tee / sys / bus / usb / cihazlar / usb1 / yetkili $ echo 1 | sudo tee / sys / bus / usb / cihazlar / usb1 / yetkili

Tabii ki, her şeyi arka arkaya çalıştırabiliriz:

$ echo 0 | sudo tee / sys / bus / usb / cihazlar / usb1 / yetkili; yankı 1 | sudo tee / sys / bus / usb / cihazlar / usb1 / yetkili

Aynı USB bağlantı noktasına bağlı daha fazla disk varsa (ve neredeyse her zaman bilgisayarlarımızda, gördüğümüzden çok sayıda USB bağlantı noktası dahili olarak bir hub'a bağlı olduğundan, aynı USB'ye sahip bağlantı noktası grupları var) dikkatli olmalıyız. baba, bir şekilde koy.

Yöntem 5. USB alt sistemini yeniden başlatın

USB alt sistemini yeniden başlatmak istiyorsak. Yani, tüm USB aygıtlarını, hepsini çıkarıp takmak gibi yenileyin, bir yandan USB çekirdek modülünü indirip yeniden yükleyebiliriz:

$ sudo modprobe -r ehci_hcd; sudo modprobe ehci_hcd # USB2 için $ sudo modprobe -r xhci_hcd; sudo modprobe xhci_hcd # USB3 için

Bazı dağıtımlar, Ubuntu'nun en son sürümleri ve türevleri dahil olsa da, entegre USB modülleri ve indirilemezler. Öte yandan, diğer modüller (yazıcılar, depolama, arayüz cihazları vb.) Nedeniyle kullanımda oldukları için sistem bunları indirmemize izin vermeyebilir ve modülleri indirmeye ve bir şeyleri kırmaya başlarsak bilgisayarı yeniden başlatmamız gerekebilir. sonunda. Yani, başka bir şekilde yapabiliriz:

$ 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

Cihazımızı bulmak için / sys / bus / pci / drivers / xhci_hcd içinde ls yapabiliriz, birkaç şey görünecek, buna benzer bir tane aramalıyız aaaa: bb: cc: dd.e. USB bağlantı noktanız xhci_hcd (USB3) değil, ehci_hcd (USB2) olarak gelebilir


14 yorum, sizinkini bırakın

Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   Cristian dijo

    Harika makale!

    1.    Gasparfm dijo

      Çok teşekkür ederim Cristian! Umarım yararlı bulmuşsundur.

  2.   Anthony John dijo

    Bu yazıda, ne zaman koyacak olursanız olun, doğru olanın tam tersi olduğu ve onu çevirmeniz gerektiği söylenmiyor ... Harika makale.

    1.    Gasparfm dijo

      Teşekkürler Antonio Juan! Pekala bak, gönderiye koyduğum her şeyi denerken bana kaç kez geldiğini bilmiyorsun! 🙂

  3.   ROMSAT dijo

    Harika. Üstün bir ürün. Başlığı şu olmalıdır: "USB çubuğunuzu çıkarıp takarak Linux sistemi hakkında bilgi edinin." Tebrikler.
    Malaga'dan selamlar.

    1.    Gasparfm dijo

      Evet, birisinin C ile programlamaya ve bu gönderiden cihazlara erişmeye başlayacağını bilmiyorum! Ayrıca Malaga'dan !! Biz her yerdeyiz 🙂

  4.   HO2Gi dijo

    Etkileyici makale. Böyle bir malzemeyle denize girdiniz.

    1.    Gasparfm dijo

      HO2Gi teşekkürler !! Kişisel blogumda ( http://totaki.com/poesiabinaria ) stilin birçok öğreticisi de var 🙂

  5.   Atahualpa dijo

    çok teşekkür ederim arkadaşım. Linux'ta, özellikle linux darphanede başlıyorum ve şu problemim var: konsolda telefonumun makineye bağlı olduğunu ancak dosya yöneticisinde olmadığını görebiliyorum. Bu nedenle internete bağlanmak için modem olarak kullanamıyorum. Ne yapabilirim?

    1.    Gaspar Fernandez dijo

      Modem olarak bağlanmanıza izin vermeyen telefonlar var, ancak Tethering yapabilirsiniz

  6.   Milazzo dijo

    Mükemmel dokümantasyon!
    Deneyimi paylaşmak için zaman ayırdığınız için teşekkür ederiz.
    Bunu sahip olduğum başka bir sorun türü için referans olarak kullanıyorum: Ubuntu'daki USB bağlantı noktalarının bağlantısının kesilmesi (# 42 ~ hassas1-Ubuntu SMP Çarşamba 14 Ağustos 15:31:16 UTC 2013)
    Sistemin dmesg'de -110 attığı ve bilgisayarı yeniden başlattığı bir zaman gelir, arızanın cihazın bağlı olduğu USB'deki (USB3.0) güç eksikliğinden kaynaklandığı varsayılır.

    Şimdi cihazın güç seviyesini doğrulamak için lsusb -v kullanıyorum ama 2mA atıyor, ki bu tamamen saçma ... sadece LED'ler bundan fazlasını tüketiyor ...

    Bir huawei E4 USB-8372G modem bağladım, ancak maxpower 2mA'yı gösteriyor ki bu inanılmaz, şimdi şüphe değişti ve diğerleri ortaya çıktı:
    MaxPower, cihazda veya işletim sisteminde varsayılan olarak gelen bir özellik midir?
    USB bağlantı noktasının sağlayacağı maksimum gücün bir parametresi mi?
    Parametre olması durumunda
    Bu parametre değiştirilebilir ve USB bağlantı noktası (900mAh- 3.0 / 500mAh- 2.0) tarafından verilen maksimum değere ayarlanabilir mi?
    Parametre olmaması durumunda,
    USB tüketiminin gerçek zamanlı bir ölçüm değeri mi (olası değil)?
    Başka bir seçenekse, lütfen bana açıklayın çünkü referans bilgilerle ilgili şüphelerim var.

    Bu MaxPower değeriyle ilgili birkaç şüphem var, herhangi bir ek bilginiz varsa çok minnettar olurum.

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

    Bus 002 Cihaz 006: ID 1a86: 7523 QinHeng Electronics HL-340 USB-Seri adaptör
    bDeviceClass 255 Satıcıya Özel Sınıf
    iProduct 2 USB2.0-Seri
    MaxPower 96mA
    Bus 002 Cihaz 008: ID 12d1: 14db Huawei Technologies Co., Ltd.
    bDeviceClass 2 İletişimleri
    iProduct 2 HUAWEI_MOBILE
    MaxPower 2mA

  7.   Anonim dijo

    Pencerelere uygulanabilir mi?

  8.   Chelo dijo

    Çok teşekkürler. Harici diskimdeki udisksctl power-off -b / dev / sdc ile baş ağrısını çözmem yeterli oldu. Unmount'un bunu kendisi yapma seçeneği olması daha iyi olmaz mıydı?

  9.   Marisa dijo

    Tanrım ne sikim! Bu vasiyetin tamamını okuyan var mı? Ve plakadan sonra, DAC / USB ses arabirimini, yazıcıyı, grafik tableti nasıl kapatacağımızı hala bilmiyoruz ... kısacası, sivri veya harici disk olmayan hiçbir şey. Ne zaman kaybı...