重命名相同 USB 设备的 sysfs 属性

Fra*_*alf 5 linux usb alsa udev

我正在尝试重命名两个相同的 USB 设备的“产品名称”,以便在使用时可以区分它们。

有问题的设备是 USB MIDI 接口 ( https://tie-products.com/en/produkt/midi-1i1o/ )

尝试了很多东西,但现在我陷入困境,无法到达任何地方。这可能吗?

在此输入图像描述

Aug 21 22:57:54 studio kernel: [    2.543513] usb 11-2.1.2: New USB device found, idVendor=fc02, idProduct=0101, bcdDevice= 2.50
Aug 21 22:57:54 studio kernel: [    2.543520] usb 11-2.1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
Aug 21 22:57:54 studio kernel: [    2.543524] usb 11-2.1.2: Product: USB MIDI Interface
..
Aug 21 22:57:54 studio kernel: [    3.379800] usb 11-2.1.3: New USB device found, idVendor=fc02, idProduct=0101, bcdDevice= 2.50
Aug 21 22:57:54 studio kernel: [    3.379807] usb 11-2.1.3: New USB device strings: Mfr=0, Product=2, SerialNumber=0
Aug 21 22:57:54 studio kernel: [    3.379811] usb 11-2.1.3: Product: USB MIDI Interface
Run Code Online (Sandbox Code Playgroud)
> udevadm info -a -p /devices/pci0000:00/0000:00:03.0/0000:03:00.0/usb11/11-2/11-2.1/11-2.1.2

#  looking at device '/devices/pci0000:00/0000:00:03.0/0000:03:00.0/usb11/11-2/11-2.1/11-2.1.2':
#    KERNEL=="11-2.1.2"
#    SUBSYSTEM=="usb"
#    DRIVER=="usb"
#    ..
#    ATTR{product}=="USB MIDI Interface"
#    ..
Run Code Online (Sandbox Code Playgroud)

这些是我的简单规则/etc/udev/rules.d/51-custom-usb-midi.rules

DEVPATH=="/devices/pci0000:00/0000:00:03.0/0000:03:00.0/usb11/11-2/11-2.1/11-2.1.2", ATTR{product}="USB MIDI Interface A"
DEVPATH=="/devices/pci0000:00/0000:00:03.0/0000:03:00.0/usb11/11-2/11-2.1/11-2.1.3", ATTR{product}="USB MIDI Interface B"
Run Code Online (Sandbox Code Playgroud)
> udevadm test /devices/pci0000:00/0000:00:03.0/0000:03:00.0/usb11/11-2/11-2.1/11-2.1.2
#  ..
#  11-2.1.2: /etc/udev/rules.d/51-custom-usb-midi.rules:1 Failed to write ATTR{/sys/devices/pci0000:00/0000:00:03.0/0000:03:00.0/usb11/11-2/11-2.1/11-2.1.2/product}, ignoring: Permission denied
#  ..
Run Code Online (Sandbox Code Playgroud)

更新1

下面由 MC68020 链接的文章解释了如何编辑其中一些内容(Alf_test)。然而,这还不足以让我更改MIDI 设备的名称USB MIDI 接口),这是我的目标。

调试图像

> ls -l /sys/devices/pci0000:00/0000:00:03.0/0000:03:00.0/usb11/11-2/11-2.2/11-2.2.4/11-2.2.4:1.0/sound/card7/id
-rw-r--r-- 1 root root 4096 Aug 31 08:57 /sys/devices/pci0000:00/0000:00:03.0/0000:03:00.0/usb11/11-2/11-2.2/11-2.2.4/11-2.2.4:1.0/sound/card7/id

> cat /sys/devices/pci0000:00/0000:00:03.0/0000:03:00.0/usb11/11-2/11-2.2/11-2.2.4/11-2.2.4:1.0/sound/card7/id
Alf_test

> ls -l /sys/devices/pci0000:00/0000:00:03.0/0000:03:00.0/usb11/11-2/11-2.2/11-2.2.4/product
-r--r--r-- 1 root root 4096 Aug 31 08:38 /sys/devices/pci0000:00/0000:00:03.0/0000:03:00.0/usb11/11-2/11-2.2/11-2.2.4/product

> cat /sys/devices/pci0000:00/0000:00:03.0/0000:03:00.0/usb11/11-2/11-2.2/11-2.2.4/product
USB MIDI Interface
Run Code Online (Sandbox Code Playgroud)

更新2

我注意到它aconnect -l显示了一个前置字符串MIDI 1,这实际上是 Bitwig 中显示的内容。

那么可以更改该字符串吗?

> aconnect -l
..
client 36: 'Fastlane' [type=kernel,card=5]
    0 'Fastlane MIDI A '
    1 'Fastlane MIDI B '
client 40: 'Faderfox PC4' [type=kernel,card=6]
    0 'Faderfox PC4 MIDI 1'
client 44: 'USB MIDI Interface' [type=kernel,card=7]
    0 'USB MIDI Interface MIDI 1'
client 48: 'USB MIDI Interface' [type=kernel,card=8]
    0 'USB MIDI Interface MIDI 1'
client 52: 'Intech Studio: Grid' [type=kernel,card=9]
    0 'Intech Studio: Grid MIDI 1'
..
Run Code Online (Sandbox Code Playgroud)

调试

更新 3 - 结论

到目前为止我的结论是这是不可能的,这有点糟糕,但不能拥有这一切......

MC6*_*020 2

据我了解,阅读您的 udev 规则后,您试图更改产品密钥的值。

\n

这是不可能的,因为对于 USB 设备,此信息直接来自设备描述符,因此不可修改。
\n因此ignoring: Permission denied你得到的结果是。

\n

您要更改的确实是 NAME 键。不幸的是,udev 并没有提供这种可能性man udev

\n
\n

udev 无法更改设备节点的名称,只能创建附加\n符号链接。

\n
\n

您将记下给出的建议:创建符号链接!它可能正好适合您的需要,只需更改要执行的操作:

\n

SYMLINK+="USB_MIDI_Interface_A"对于第一条规则,\nSYMLINK+="USB_MIDI_Interface_B"对于第二条规则。

\n
\n

编辑因为只涉及 alsa 设备。

\n

Alsa详细描述了一种使用udev识别两个相同设备的方法。

\n

此方法基于更改您可以读取的卡 ID/proc/asound/cardX/id

\n

简而言之,为了借助 udev 自动进行更改,您只需要编写以下规则:

\n
SUBSYSTEM!="sound", GOTO="my_usb_audio_end"\nACTION!="add", GOTO="my_usb_audio_end"\n\nDEVPATH=="/devices/pci0000:00/0000:00:13.2/usb2/2-6/2-6.2/2-6.2:1.0/sound/card?", ATTR{id}="UA1A_A"\nDEVPATH=="/devices/pci0000:00/0000:00:13.2/usb2/2-6/2-6.3/2-6.3:1.0/sound/card?", ATTR{id}="UA1A_B"\n\nLABEL="my_usb_audio_end"\n
Run Code Online (Sandbox Code Playgroud)\n

当然,您需要适应您的开发路径并关心我无法判断字符串标签是否允许最大 nb 个字符,也无法判断是否允许空格。

\n

您还需要使用amidi -l或检查cat /proc/asound/cards
\n我刚刚检查了插入我的中子合成器\xe2\x80\xa6 它就可以工作。(但是\xe2\x80\xa6 我只是喜欢这个名字;-P)\n还检查了rosegarden 在工作室> 管理midi 设备对话框中使用此标识符。

\n