Одно и то же имя устройства для идентичных звуковых карт USB после каждой перезагрузки

ПРИМЕЧАНИЕ.:это отредактированный ответ, чтобы сделать решение как можно более общим. Посмотрите историю редактирования, чтобы узнать, что было сделано изначально, и посмотрите комментарии к проблемам с предыдущим ответом.

Ключевым моментом здесь является использование группировки с помощью ()и -rдля расширенных регулярных выражений. Группировка паттернов с помощью ()позволит вам ссылаться на них в зависимости от их положения в нотации через \NUMBER. В частности, вот что я придумал:

sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g' 

Это читается так:

  • соответствует нулю или более символам, равным нулю
  • сгруппировать вместе один или несколько любых не-нулевых символов, следующих за
  • затем найдите косую черту, за которой следует ноль или более нулевых символов
  • и сгруппируйте вместе один или несколько ненулевых -символов, следующих за

На практике это работает с переменным числом нулей:

$ echo "at 12:27 AM on 11/08/2017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'                                                                         
at 12:27 AM on 11/8/2017
$ echo "at 12:27 AM on 00000011/000008/00002017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'                                                           
at 12:27 AM on 11/8/00002017
$ echo "at 12:27 AM on 011/08/00002017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'                                                                    
at 12:27 AM on 11/8/00002017
$ echo "at 12:27 AM on 000000011/0000008/00002017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'                                                         
at 12:27 AM on 11/8/00002017

Обратите внимание, что это достаточно хорошо справляется со своей работой по сохранению всего, что приходит в части года, если это требуется. Если мы хотим избавиться и от этого -, мы также можем добавить третью группу.

$ echo "at 12:27 AM on 005/0025/0002017" | sed -r 's/0*([^0]+)\/0*([^0]+)\/0*([^0]+)/\1\/\2\/\3/g'                                                    
at 12:27 AM on 5/25/2017

Это также довольно хорошо работает с другими символами (, которые не требуются, но их приятно иметь):

$ echo "at 12:27 AM on 0November/00Fifth/2017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'                                                             
at 12:27 AM on November/Fifth/2017
1
01.08.2019, 15:26
2 ответа

из предоставленной информации udevadm вы сможете временно переименовать 2 идентификатора устройства с помощью:

echo 'CODEC_A' | sudo tee /devices/pci0000:00/0000:00:1a.1/usb3/3-1/3-1:1.0/sound/card1/id 

echo 'CODEC_B' | sudo tee /devices/pci0000:00/0000:00:1a.1/usb3/3-2/3-2:1.0/sound/card0/id

новые псевдонимы идентификаторов должны отображаться в

cat /proc/asound/cards

в правилах udev замените 'card0' или 'card1' на 'card?' поэтому идентификатор карты, назначенный udev, игнорирует индексный номер карты и основан только на USB-подключении

DEVPATH=="/devices/pci0000:00/0000:00:1a.1/usb3/3-1/3-1:1.0/sound/card?", ATTR{id}="CODEC_A"

DEVPATH=="/devices/pci0000:00/0000:00:1a.1/usb3/3-2/3-2:1.0/sound/card?", ATTR{id}="CODEC_B"

больше информации об этом наhttps://alsa.opensrc.org/Udev

2
27.01.2020, 23:41

Мой ответ на

Правила Удева для кажущихся неразличимыми устройств

может оказаться полезным. Пришлось 4 одинаковые камеры прибить...

0
27.01.2020, 23:41

Теги

Похожие вопросы