首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为相同的usb设备重命名sysfs属性

为相同的usb设备重命名sysfs属性
EN

Unix & Linux用户
提问于 2022-08-21 21:23:11
回答 1查看 227关注 0票数 5

我试图重命名两个相同的usb设备的“产品名称”,这样我就可以在使用它们时区分它们。

所讨论的设备是USB MIDI接口(https://tie-products.com/en/produkt/midi-1i1o/)。

我试过很多东西,但现在我被困住了,什么都找不到。这有可能吗?

代码语言:javascript
复制
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
代码语言:javascript
复制
> 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"
#    ..

以下是我在/etc/udev/rules.d/51-custom-usb-midi.rules中的简单规则:

代码语言:javascript
复制
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"
代码语言:javascript
复制
> 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
#  ..

更新1

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

代码语言:javascript
复制
> 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

更新2

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

那么有可能改变这个字符串吗?

代码语言:javascript
复制
> 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'
..

更新3-结论

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

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-08-25 20:42:41

根据我所理解的阅读您的udev规则,您正在尝试更改产品密钥的值。

这是不可能的,因为,对于一个usb设备,这个信息直接来自设备描述符,因此是不可修改的。

因此,您获得了相应的ignoring: Permission denied

您想要更改的确实是名称键。不幸的是,根据man udev,udev没有提供这种可能性:

udev不能更改设备节点的名称,只能创建其他符号链接。

您将注意到给出的建议:创建一个符号链接!它可能正好适合你的需要,只需改变你要采取的行动:

第一个规则是SYMLINK+="USB_MIDI_Interface_A",第二个规则是SYMLINK+="USB_MIDI_Interface_B"

编辑,因为只涉及alsa设备.

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

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

简而言之,由于udev的存在,要使更改自动化,只需编写以下规则:

代码语言:javascript
复制
SUBSYSTEM!="sound", GOTO="my_usb_audio_end"
ACTION!="add", GOTO="my_usb_audio_end"

DEVPATH=="/devices/pci0000:00/0000:00:13.2/usb2/2-6/2-6.2/2-6.2:1.0/sound/card?", ATTR{id}="UA1A_A"
DEVPATH=="/devices/pci0000:00/0000:00:13.2/usb2/2-6/2-6.3/2-6.3:1.0/sound/card?", ATTR{id}="UA1A_B"

LABEL="my_usb_audio_end"

当然,您需要适应您的devpath,我无法判断字符串标签是否允许最大的nb字符,或者是否允许空格。

您还需要使用amidi -lcat /proc/asound/cards进行检查。

我刚检查了一下我的中子合成器…只是起作用了。(然而,…我只是喜欢这个名称;-P )还检查rosegarden是否在studio > manage设备对话框中使用此标识符。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/714395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档