
私はUSB Wi-FiドングルとWi-Fiキーを仮想マシン(QEmu / KVM仮想化)に自動的に追加するbashスクリプトを作業しています。
[編集]仮想マシンは現在Debian バスターリリースバージョン[/編集]
ホストコンピュータでTP-Link TL-WN823N USBドングルを接続すると、次のインタフェースが追加されます。
user@host:~$ ip -o link | grep wlx
57: wlx123456789012: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000\ link/ether 2a:51:d5:12:34:56 brd ff:ff:ff:ff:ff:ff
USB デバイスを一覧表示すると、次の結果が表示されます。
user@host:~$ lsusb | grep TP-Link
Bus 002 Device 009: ID 2357:0109 TP-Link TL WN823N RTL8192EU
したがって、次のように認識されます。wlx123456789012インターフェース、サプライヤー:製品IDは次のとおりです。2357:0109装備です#9USBバス#2.*
インターフェイス名だけを知っている場合は、ベンダー:製品IDをどのように確認できますか?
@meuh 提案
user@host:~$ ls --format=commas /sys/class/net/wlx123456789012/device
authorized, bAlternateSetting, bInterfaceClass, bInterfaceNumber,
bInterfaceProtocol, bInterfaceSubClass, bNumEndpoints, driver,
ep_01, ep_02, ep_03, ep_04, ep_05, ep_06, ep_81, ieee80211, leds,
modalias, net, power, subsystem, supports_autosuspend, uevent
だからいいえ行商人...でもない装備ファイルをこの場所に直接保存します(これによれば、これはテストにオンボードWi-Fiが含まれているためです)。
しかし、それが私にインスピレーションを与えたので、私は次のように試しました。
user@host:~$ grep -iEr "2357|0109" /sys/class/net/wlx123456789012/device
...
/sys/class/net/wlx123456789012/device/modalias:usb:v2357p0109d0101dc00dsc00dp00icFFiscFFipFFin00
/sys/class/net/wlx123456789012/device/uevent:PRODUCT=2357/0109/101
/sys/class/net/wlx123456789012/device/uevent:MODALIAS=usb:v2357p0109d0101dc00dsc00dp00icFFiscFFipFFin00
だから/sys/class/net/wlx123456789012/device、持っている:
モードエイリアス:usb:v2357血0109d0101dc00dsc00dp00icFFiscFFipFFin00
ueevent:製品=2357/0109/ 101
だから私は追跡を見つけましたが、@meuhが別のローカライゼーションを提供したという事実が解決策を疑うようにします(特にdistroのバージョンを変更したり、distroのみを変更したりする場合)。
@Tom Yanが提案しました。
user@host:~$ udevadm info /sys/class/net/wlx123456789012 \
| sort -r | awk '/ID_(VENDOR|MODEL)_ID/'
E: ID_VENDOR_ID=2357
E: ID_MODEL_ID=0109
注:ここではPRODUCTの代わりにMODELを使用します。ソート -rMODEL 行の前に VENDOR 行をソートするために使用されます。
答え1
Ralink RT5370ワイヤレスアダプタをDebian 10システムに接続しました。
デフォルトではネットワークデバイスとして表示されますwlxc83a35c4a44b
。
/sys/class/*
これは基本的に、葉が主に枝のシンボリックリンクであるディレクトリサブツリーであることを覚えておく必要があります/sys/devices/*
。
# realpath /sys/class/net/wlxc83a35c4a44b
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/net/wlxc83a35c4a44b
# realpath /sys/class/net/wlxc83a35c4a44b/device
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0
したがって、device
シンボリックリンクは実際に分岐内で実行され、/sys/devices/...
USBコントローラとデバイスの間にレイヤ()があります(この場合はUSBハブはありません)。1-8
このレベルには役に立つものが含まれていますか?
# ls --format=commas /sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/..
1-8:1.0/, ep_00/, power/, authorized, avoid_reset_quirk, bcdDevice,
bConfigurationValue, bDeviceClass, bDeviceProtocol, bDeviceSubClass,
bmAttributes, bMaxPacketSize0, bMaxPower, bNumConfigurations, bNumInterfaces,
busnum, configuration, descriptors, dev, devnum, devpath, driver@,
firmware_node@, idProduct, idVendor, ltm_capable, manufacturer, maxchild, port@,
product, quirks, removable, remove, rx_lanes, serial, speed, subsystem@,
tx_lanes, uevent, urbnum, version
idProduct
とがありますidVendor
。名前だけでネットワークデバイスにアクセスできますか?
# cat /sys/class/net/wlxc83a35c4a44b/device/../idProduct
5370
# cat /sys/class/net/wlxc83a35c4a44b/device/../idVendor
148f
正しいデバイスであることを確認してみましょう。
# lsusb -d 148f:5370
Bus 001 Device 014: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter
そうだね。
また、ルートなしで動作し、途中でUSBハブを追加します。
$ realpath /sys/class/net/wlxc83a35c4a44b/device
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-7/1-7.2/1-7.2:1.0
$ cat /sys/class/net/wlxc83a35c4a44b/device/../idVendor
148f
$ cat /sys/class/net/wlxc83a35c4a44b/device/../idProduct
5370
答え2
したがって、udev @ Tom Yanが提案したように、すべてのWi-Fi USBアダプタインタフェースをVendor:製品と一緒に一覧表示するには、次のことをお勧めします。
user@host:~$ for i in $( find /sys/class -name "wlx*" ) ; do \
echo "$( echo $i | grep -oE "[^/]+$" ) $( \
udevadm info $i \
| awk '\
function get_val () { split ( $0 , a , "=" ) ; return a [ 2 ] } \
/ID_VENDOR_ID/ { v = get_val() } \
/ID_MODEL_ID/ { m = get_val() } \
END { print v ":" m }\
' \
)" ; \
done
wlx123456789012 2357:0109
説明:各インターフェイス(for i in ...; do ...; done)ごとにすべてのWi-Fi USBドングルインターフェイスパスを一覧表示し(/sys/class -name "wlx *"を検索)、各パスにインポート来て、インターフェイス名(echo $i | grep -oE "[^/]+$" )だから/sys/class/net/wlx123456789012 -> wlx123456789012、すべてのudev属性を取得してそれをフィルタリングします(udevadm info $i | awk 。 ..) 。
フィルタリングプロセス:
現在のレコード($ 0)を等号文字( "=")で除算し、その結果を "a"配列に格納し、 "a"の2番目のメンバーを返すことによってID値を返す関数を作成します(関数get_val)
値のフィルタリングと保存(/ ID_VENDOR_ID / ...と/ ID_MODEL_ID / ...)
最後に保存された値を正しい順序で印刷します。 Supply:Model(END {...})
そして@telcoMのシステム独立で簡単な方法に基づいています。
user@host:~$ for i in $( find /sys/class/net/ -type l -name "wlx*" ) ; do \
echo "$( \
echo $i | grep -oE "[^/]+$" \
) $( \
cat $i/device/../idVendor \
):$( \
cat $i/device/../idProduct \
)" ; \
done
wlx123456789012 2357:0109
説明: 各インターフェイス (for i in ... ; do ... ; done ) のすべての Wi-Fi USB アダプタインターフェイスリンク ( find /sys/class/net -type l -name "wlx*" ) と各リンクのみリストします。インターフェイス名( echo $i | grep -oE "[^/]+$" ) を取得して表示するので、 /sys/class/net/wlx123456789012 -> wlx123456789012 を表示し、ベンダーID親フォルダのコンテンツをリンクし、同じことを行います。製品番号