web-dev-qa-db-ja.com

USBデバイス(ドングル)を論理的に取り出し/切断して再接続するにはどうすればよいですか?

ドングルUSBがサーバーに接続されている場合にのみ機能する商用アプリケーションを購入しました。ただし、アプリケーションがドングルを認識できない場合があるため、機能しませんが、誰かがドングルをUSBポートから物理的に取り出して再度接続すると、認識して正常に機能します。

サーバーには43個のモジュールがロードされており、ドングルをアタッチ/イジェクトしてもモジュールの数は増減しません。

また、sbmonsbmon1sbmon2ファイルが/ devドングルと番号の取り出し/取り付けの前後にあります/ dev内のファイルの数は、ドングルの取り出し/取り付けの前後で変更されません。

journalctl -fドングルを取り出した後のコマンド:

Jan 19 18:10:28 iwr kernel: usb 2-2.1: USB disconnect, device number 5

journalctl -fドングルを取り付けた後のコマンド:

Jan 19 18:11:11 iwr kernel: usb 2-2.1: new full-speed USB device number 6 using uhci_hcd
Jan 19 18:11:11 iwr kernel: usb 2-2.1: New USB device found, idVendor=0403, idProduct=c580
Jan 19 18:11:11 iwr kernel: usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Jan 19 18:11:11 iwr kernel: usb 2-2.1: Product: HID UNIKEY
Jan 19 18:11:11 iwr kernel: usb 2-2.1: Manufacturer: OEM
Jan 19 18:11:11 iwr kernel: usbhid 2-2.1:1.0: couldn't find an input interrupt endpoint

取り出して論理的に取り付けることはできますか? (コマンドの発行、モジュールの削除など)

インターネット上で見つかった多くの回答(TNWのコメントにあるものを含む)は、2.6.somethingカーネル以降廃止された/sys/bus/usb/devices/2-2/power/levelまたは/sys/bus/usb/devices/2-2/power/controlに依存しています。新しいカーネルの場合、 推奨手順 は、ドライバーのバインドを解除して再バインドすることです。これにより、通常、電源が入れ直されます。

# Find out which driver to unbind
tree /sys/bus/usb/devices/2-2.1 | grep driver
|-- driver -> ../../../../../../bus/usb/drivers/whatever

# Unbind the driver
echo 2-2.1 > /sys/bus/usb/drivers/whatever/unbind

# Rebind the driver
echo 2-2.1 > /sys/bus/usb/drivers/whatever/bind
7