コマンドラインからUSBデバイスを取り外して再接続するには?

コマンドラインからUSBデバイスを取り外して再接続するには?

gnome-disk現在行っていること、コマンドラインで同じことを行う方法、gnome-disk実行したすべての作業を取り消す方法を知りたいです。 (すでに行った操作はキャンセルできません。)

いくつかの実験を行った結果、次のことがわかりました。私が使用しているUSBフラッシュサムドライブ(「スティック」)には、切り替え可能な少なくとも3つの「状態レベル」があり、そのうちの2つはgnome-drive「取り出し」を使用して切り替えることができます。ボタン(オンとオフ)と「電源オフ」(オフのみ)。

最高レベルから最低レベルまで、以下を発見しました。

  1. 注入
    • gnome-driveポップアップボタン
    • gnome-drive や他の場所からドライブが消えません。
    • コマンドライン:eject /dev/sdb
    • キャンセルできません。gnome-drive
    • 元に戻す:eject --trayclose /dev/sdb
    • カーネルメッセージ( journalctl -k)
      • 注入
        • sdb: detected capacity change from 30253056 to 0
      • ポップアップをキャンセル
        • sd 4:0:0:0: [sdb] 30253056 512-byte logical blocks: (15.5 GB/14.4 GiB)
        • sdb: detected capacity change from 0 to 30253056
        • sdb: [partition details of my drive]
  2. (オフ)バインディング
    • 対応する項目はありません。gnome-drive
    • コマンドライン:echo 3-6 > /sys/bus/usb/drivers/usb/unbind
    • gnome-driveデバイスが完全に消える
    • カーネルメッセージなし
    • lsusb -tデバイスは引き続き表示されますが、クラス(「一括ストア」)またはドライバ(「usb-storage」)は表示されなくなります。
    • /sys/bus/usb/drivers/usb/3-6ディレクトリが消えた
    • 元に戻すecho 3-6 > /sys/bus/usb/drivers/usb/bind
      • これによりカーネルメッセージが表示されます。
        • usb-storage 3-6:1.0: USB Mass Storage device detected
        • scsi host4: usb-storage 3-6:1.0
        • scsi 4:0:0:0: Direct-Access TOSHIBA TransMemory PMAP PQ: 0 ANSI: 6
        • sd 4:0:0:0: Attached scsi generic sg2 type 0
        • sd 4:0:0:0: [sdb] 30253056 512-byte logical blocks: (15.5 GB/14.4 GiB)
        • sd 4:0:0:0: [sdb] Write Protect is off
        • sd 4:0:0:0: [sdb] Mode Sense: 45 00 00 00
        • sd 4:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
        • sdb: [partition details of my drive...]
        • sd 4:0:0:0: [sdb] Attached SCSI removable disk
  3. 電源を切る
    • gnome-drive電源オフボタン
    • 物理的にプラグを抜くように、デバイスはすべてのものから消えます。
    • 実際のプラグを抜くことと区別できない
    • カーネルメッセージ:
      • usb 3-6: USB disconnect, device number 10
    • コマンドラインで電源を切るには?
    • コンピュータを再接続せずにコンピュータの電源を入れ直すにはどうすればよいですか?

完全性のためにスティックを再挿入すると、新しいデバイス番号(11)が割り当てられ、バスとポートは同じまま(3-6)、次のカーネルメッセージが表示されます。

usb 3-6: new high-speed USB device number 11 using xhci_hcd
usb 3-6: New USB device found, idVendor=0930, idProduct=6545, bcdDevi>
usb 3-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-6: Product: TransMemory
usb 3-6: Manufacturer: TOSHIBA
usb 3-6: SerialNumber: C03FD5F7713EE2B1B000821E
[plus all kernel messages as quoted under (re-)bind above]

答え1

同様の質問(タイトルの質問と同じ)が長年にわたって提起されました。[1][2][サム](時間をかけて検索してみると、おそらく10を超えることになるでしょう...)ほとんどの回答はコードの変更のためにもはや有効ではありません
...GNOME

gnome-disk現在行っていることとコマンドラインで同じことをする方法を知りたいです。

gnome-disk最も簡単な方法は、例えばソースコードを見ることです。gduwindow.c2つの機能を使用してくださいudisks_drive_call_eject ()udisks_drive_call_power_off ()ここに録音してください電話すると言います。Eject()そしてそれぞれPowerOff()D-Busメソッドこれはd-bus、 を呼び出して cli からこれらのメソッドを呼び出すことができることを意味します。
例:フラッシュドライブがADATA識別sdaされたがマウントされていない

sda           8:0    1 14,9G  0 disk 
├─sda1        8:1    1 14,6G  0 part

まず、対応するドライブIDを取得しますsda

busctl get-property org.freedesktop.UDisks2 /org/freedesktop/UDisks2/block_devices/sda org.freedesktop.UDisks2.Block Drive

これは次のように印刷されます

o "/org/freedesktop/UDisks2/drives/ADATA"

d-busその後、ドライブを取り出すか、電源を切るために呼び出されるオブジェクトとして引用符で囲まれた部分を使用できます。

busctl call  org.freedesktop.UDisks2 /org/freedesktop/UDisks2/drives/ADATA org.freedesktop.UDisks2.Drive Eject 'a{sv}' 0

busctl call  org.freedesktop.UDisks2 /org/freedesktop/UDisks2/drives/ADATA org.freedesktop.UDisks2.Drive PowerOff 'a{sv}' 0

gdbusコンクリートと同じGNOME

gdbus call --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2/drives/ADATA --method org.freedesktop.UDisks2.Drive.Eject {}

gdbus call --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2/drives/ADATA --method org.freedesktop.UDisks2.Drive.PowerOff {}

ファイルシステムがマウントされている場合(ドライブが使用されている場合)、これらのコマンドでエラーが発生することに注意してください。また、ドキュメントに示すように、un-ejectorメソッドがないun-power-offためgnome-disk、これらの操作をキャンセルすることはできません。
なぜ誰かが上記のコマンドを使用しているのかわかりません。 (eject()フラッシュドライブの文脈では意味をよく理解していませんが、これは別の議論です。)...
私は(他の多くのように)ファイルシステムをアンマウントしました。

udisksctl unmount -b /dev/sda1

それからドライブの電源を切るそして

udisksctl power-off -b /dev/sda

電源が切れたドライブを再接続するには、ある種のUSBポートのリセット/再スキャン/再構成を実行する必要があります(通常のユーザーは実行できません)。他の投稿のソリューションのうちカーネル6.6.2を使用している場合は効果がありませんでした。

答え2

コマンドラインから電源を切るには?

echo 1 > /sys/bus/usb/devices/3-2.1/port/disable

ポートはbus_nr-port.by.port.hub.chain.seperated.with.dots、つまり3-3、またはです3-2.4.6。どちらの例でも、ポートはバス3にあります。最初の例はポート3で、2番目の例はバス3のポート2に最初のハブがあり、最初のハブのポート4に2番目のハブがある2つのハブのチェーンです。このデバイスは、2番目のハブのポート6にあります。

コンピュータを再接続せずにコンピュータの電源を入れ直すにはどうすればよいですか?

echo 0 > '/sys/devices/pci0000:00/0000:00:14.0/usb3/3-0:1.0/usb3-port3/disable'

3-2.1それともそうかもしれないから

echo 0 > '/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0/3-2-port1/disable'

ポートが有効になっている場合は、pwd -Pこのファイルがあるディレクトリでdisableそのハブのポート管理インターフェイスの実際の場所をプレビューできます。ls -l /sys/bus/usb/devices/usb*良いスタートは、USBバス用のホストコントローラのリストを作成することです。

また、見ることができます説明する方法lsusbより多くのヒントをご覧ください。 (またはカーネル文書.)

答え3

コマンドラインから電源を切るには?

アップデート:ついに見つけました。その他の回答をご覧ください。

コンピュータを再接続せずにコンピュータの電源を入れ直すにはどうすればよいですか?

粗い方法(マウスとキーボードが一時的にシャットダウンされたため、両方のコマンドを実行できることを確認してください...)は、USBホストPCIデバイスを再バインドすることです。ブートや物理的な再挿入など、すべてのポートを再起動するようです。少なくとも私にとって:

echo 0000:00:14.0 > /sys/bus/pci/drivers/xhci_hcd/unbind
echo 0000:00:14.0 > /sys/bus/pci/drivers/xhci_hcd/bind

もちろん、この数字は環境に合わせて調整する必要があります。お持ちの製品を確認してください。

lspci -t

明らかにするそれxhci_hcdUSBバスは次のように駆動されます。

ls -la /sys/bus/pci/drivers/xhci_hcd/ | grep ^l

0000:00:14.0デバイスとしてのみ表示されます。

関連情報