V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
wniming
V2EX  ›  Linux

Linux 有办法根据设备号重命名 usb 设备的名称吗?

  •  
  •   wniming · 6 小时 27 分钟前 · 699 次点击

    我的电脑上插了 3 个完全一样的 usb 蓝牙接收器,有时我需要把其中一个通过 spice 的 usb 重定向分配给虚拟机用,但是因为设备名称完全一样,在我使用 virt-viewer 时我无法区分哪个设备是我想要重定向给虚拟机的设备,比如我电脑上 lsusb 有以下输出

    d@desktop:~$ lsusb
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 002: ID 0b05:19af ASUSTek Computer, Inc. AURA LED Controller
    Bus 001 Device 005: ID 2b89:8761 Realtek Bluetooth Radio
    Bus 001 Device 006: ID 2b89:8761 Realtek Bluetooth Radio
    Bus 001 Device 007: ID 32c2:0012 HS6209 2.4G Wireless Receiver
    Bus 001 Device 009: ID 174c:2074 ASMedia Technology Inc. ASM1074 High-Speed hub
    Bus 001 Device 012: ID 413c:301c Dell Computer Corp. Dell Universal Receiver
    Bus 001 Device 013: ID 17ef:6047 Lenovo ThinkPad Compact Keyboard with TrackPoint
    Bus 001 Device 018: ID 2b89:8761 Realtek Bluetooth Radio
    Bus 001 Device 021: ID 17ef:60ee Lenovo TrackPoint Keyboard II
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 002 Device 002: ID 174c:3074 ASMedia Technology Inc. ASM1074 SuperSpeed hub
    
    

    有 3 个设备的名称都是“Realtek Bluetooth Radio”,我希望有办法让这里的名称后面跟上这个设备的 Device 号,比如 “Realtek Bluetooth Radio 5”,“Realtek Bluetooth Radio 6”,“Realtek Bluetooth Radio 18”

    我觉得这应该需要给 udev 添加一些规则才能实现,但是我对 udev 也不是很熟悉,想请教一下有经验的老哥这个要怎么实现

    17 条回复    2025-03-04 17:36:59 +08:00
    Cooky
        1
    Cooky  
       6 小时 22 分钟前
    试试 lsusb.py ,可以看设备在哪个接口下
    wniming
        2
    wniming  
    OP
       6 小时 17 分钟前
    @Cooky 感谢回复,我并不是不知道哪个设备在哪个接口下,因为在 virt-viewer 里选择 usb 设备时只显示 usb 设备的名称,所以即便知道 usb 设备再那个接口下也无法判断。
    oott123
        3
    oott123  
       6 小时 0 分钟前
    听起来可以给 virt-viewer 做个 filesystem namespace ,再把里面的 sysfs 重新挂载成自己魔改的?
    julyclyde
        4
    julyclyde  
       5 小时 54 分钟前
    @oott123 我感觉跟“里面的 sysfs”没啥关系吧?
    jasonyang9
        5
    jasonyang9  
       5 小时 49 分钟前 via Android
    udev 就是匹配一些属性然后重命名设备,做过对网口的重命名,匹配的是 mac 地址
    wniming
        6
    wniming  
    OP
       5 小时 48 分钟前
    @oott123 如果有办法让 virt-viewer 运行在自己魔改的 filesystem namespace 那当然更好,但是我不知道要怎么搞,如果能在自己魔改的 filesystem namespace 里把不想重定向到另外两个 usb 设备都屏蔽掉,那我就可以用更方便的方式给虚拟机重定向 usb 设备了,比如可以用下面的命令:

    virt-viewer --connect qemu+ssh://[email protected]/session fedora41 --spice-usbredir-redirect-on-connect="0x03,0x17ef,0x60ee,-1,-1|0x03,0x32c2,0x0012,-1,-1"

    这样还能一步到位,都不用点鼠标操作重定向了,但目前因为有 3 个同样的 usb 设备,所以这种通过 vendor:product 的方式是不行的
    wniming
        7
    wniming  
    OP
       5 小时 39 分钟前
    @julyclyde 我觉得是有关系的,例如:

    d@desktop:/sys/bus/usb/devices/usb1/1-10$ cat /sys/devices/pci0000:00/0000:00:14.0/usb1/1-10/1-10:1.2/0003:17EF:60EE.00D5/uevent
    DRIVER=lenovo
    HID_ID=0003:000017EF:000060EE
    HID_NAME=Lenovo TrackPoint Keyboard II
    HID_PHYS=usb-0000:00:14.0-10/input2
    HID_UNIQ=
    MODALIAS=hid:b0003g0001v000017EFp000060EE
    d@desktop:/sys/bus/usb/devices/usb1/1-10$

    我觉得 lsusb 就是根据这里的 HID_NAME 来获取到 usb 设备的名称的
    wniming
        8
    wniming  
    OP
       5 小时 21 分钟前
    @oott123 看了下面这个帖子,感觉 linux 是不支持自己做一个魔改的 sysfs 的,因为内核不支持设备命名空间,任何进程都能看到系统上的所有设备,尽管进程不一定有权限使用设备。

    https://discuss.linuxcontainers.org/t/how-to-hide-of-host-root-device-from-container-lsblk/6103
    julyclyde
        9
    julyclyde  
       4 小时 36 分钟前
    @wniming 我觉得你应该先了解一下虚拟机里面的设备是怎么来的,再说
    julyclyde
        10
    julyclyde  
       4 小时 36 分钟前
    @wniming 你看的这个帖子不是虚拟机的,而是容器的
    Rorysky
        11
    Rorysky  
       4 小时 21 分钟前
    udev 规则了解下
    Rorysky
        12
    Rorysky  
       4 小时 19 分钟前
    即使是同型号设备,lsusb 看看参数肯定不一样( vendor id prod id 之类)

    示例:udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)

    https://wiki.debian.org/udev
    diivL
        13
    diivL  
       4 小时 8 分钟前
    src/virt-viewer-session-spice.c:859
    diivL
        14
    diivL  
       4 小时 3 分钟前   ❤️ 1
    src/virt-viewer-session-spice.c:859
    ```c
    usb_device_widget = spice_usb_device_widget_new(self->session,
    "%s %s");

    ```
    spice-gtk/src/usb-backend.c:1438
    ```c
    description = g_strdup_printf(format, manufacturer ? manufacturer : "",
    product, descriptor, bus, address);

    ```
    wniming
        15
    wniming  
    OP
       4 小时 0 分钟前
    @Rorysky #12 你看一下我这个帖子正文里的 lsusb 的输出,有 3 个 usb 设备的 vendor id prod id 是完全一样的:

    "ID 2b89:8761 Realtek Bluetooth Radio"
    boser1u
        16
    boser1u  
       3 小时 31 分钟前
    换成 3 个牌子吧
    adoal
        17
    adoal  
       1 小时 59 分钟前
    如果你的设备插的 USB 端口固定不变,那 devnum 、devpath 是固定的,可以跟 vid/pid 结合起来判断。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3448 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:36 · PVG 19:36 · LAX 03:36 · JFK 06:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.