lsusb出力またはデバイスパスからデバイスファイル名を取得する方法


11

関連質問:USB接続/切断通知

デバイスのプラグを抜いたり抜いたりすると、すぐに通知されます。しかし、それを(ほぼ)完璧にするために/dev/ttyUSB0、のようなデバイスファイル名を取得したいと思っています。

しかし、この情報をからudev、またはからlsusb、またはその他の方法で取得する方法を見つけることができません。私が持っているデバイスの唯一のIDは、のようなデバイスパスです/devices/pci0000:00/0000:00:1d.0/usb5/5-1。それからデバイスのファイル名を取得する方法は?


1
の下のディレクトリを参照し/dev/disk/ます。by-labelおよびby-idパスが役立つ場合があります。
lornix 14年

ありがとう。ただし、/dev/diskストレージデバイスのみが含まれています。たとえば、については何もありません/dev/ttyUSB0
ドミトリーフランク

あなたのユースケースは何ですか?/dev/ttyUSB0etcの何が特別なのですか?
Faheem Mitha

回答:


5

UVCカメラ用のデバイスを見つけようとしているとすると、lsusbは次のように表示します。

Bus 001 Device 004: ID 1e4e:0102 Cubeternet GL-UPC822 UVC WebCam

デバイスのファイル名は/dev/bus/usb/001/004(最初のコンポーネントはバスID、次はデバイスID)です。


5
これは、のようにデバイスノードを取得する方法ではありません/dev/ttyUSB0
ドミトリーフランク

5

私はそのためのスクリプトを作成したばかりですが、それはきれいではありませんが、私にとってはうまくいきます。

このスクリプトをArch Linuxで次の構成でテストしました。

$ uname -a
Linux 4.4.13-1-lts #1 SMP Wed Jun 8 16:44:31 CEST 2016 x86_64 GNU/Linux

そして、私のデバイス名は/dev/sdbあなたのものとはかなり異なります。私もそれがあなたのために機能することを願っています。

このスクリプトはプログラムのusbutilsパッケージに依存していることにも注意してくださいusb-devices。すべてのLinuxにデフォルトでインストールされていると思いますが、間違っている可能性があります。

スクリプトusbname

#!/usr/bin/bash

# Input should be a single line from lsusb output:
DATA=$1

# Read the bus number:
BUS=`echo $DATA | grep -Po 'Bus 0*\K[1-9]+'`

# Read the device number:
DEV=`echo $DATA | grep -Po 'Device 0*\K[1-9]+'`

FOUND=false
USB_Serial=""

# Search for the serial number of the PenDrive:
while read line
do
  if [ $FOUND == true ]; then
    USB_Serial=`echo "$line" | grep -Po 'SerialNumber=\K.*'`
    if [ "$USB_Serial" != "" ]; then
      break;
    fi
  fi

  if [ "`echo "$line" | grep -e "Bus=0*$BUS.*Dev#= *$DEV"`" != "" ]; then
    FOUND=true
  fi
done <<< "$(usb-devices)"

# Get the base name of the block device, e.g.: "sdx"
BASENAME=`file /dev/disk/by-id/* | grep -v 'part' | grep -Po "$USB_Serial.*/\K[^/]+$"`

# Build the full address, e.g.: "/dev/sdx"
NAME="/dev/$BASENAME"

# Output the address:
echo $NAME

使用法:

$ ./usbname "$(lsusb | grep '<my_usb_label_or_id>')"
/dev/sdb

USBデバイスがブロックデバイスでない場合、これは機能しません。
カイルファルコナー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.