Jackd: Измеряем задержку аудио сигнала в цепочке обработки

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

Но что на самом деле означает эта задержка? Это лишь время, которое будет затрачено на обработку сигнала после поступления его в роутер (в моем случае в роли роутера выступает jackd).

А как измерить полную задержку вместе со временем на обработку и перевод сигнала в аналог?

jack_iodelay — утилита генерирует тестовый сигнал, который можно направить в роутере куда угодно, потом вернуть на вход этой же утилиты и посмотреть в консоли что получится.

Для измерения нам потребуется небольшой патч чтобы соединить один из входов интерфейса с выходом.

После этого запускаем утилиту, коммутируем нужный вход и выход в роутере и смотрим на результат в консоли.

Общая задержка составляет в среднем 820 фреймов. Чтобы узнать задержку в миллисекундах делим это число на частоту семплирования. (96кГц). Это 8,5мс.

Поле extra loopback latency содержит лаг, который был вызван ЦАП’ом и АЦП.

Задержка зависит и от настроек джека. От количества семплов и периодов на буфер

Для текущего теста 2 периода на буфер и 128 сэмплов. Итого 384. И ~430 фреймов — это задержка на железе. В сумме и получается ~820.

Можно пользоваться опциям -I и -O. Они отдельно позволяют посмотреть задержку по входу и выходу сигнала.

Linux: Настраиваем МФУ pantum

Есть такие новые китайские принтеры (относительноо новые) Pantum. В них и wifi, и поддержка linux из коробки. Достал я и себе такое чудо платы лутом делать и шаблоны для фоторезиста печатать.

Настроить wifi в принтере (если он есть) без смартфона не получится — лезем туда и делаем все по инструкции (она с картинками).

Теперь надо поставить драйвера и настроить сканирование и печать по wifi. Если у вас убунту или дебиан, то драйвера скачиваются и устанавливаются в виде пакета. Если федора, то придется немного покомпилировать.

Продолжить чтение «Linux: Настраиваем МФУ pantum»

Ошибка юнита systemd-modules-load.service

2020-04-28-22:47:01_select

Ошибка юнита systemd-modules-load.service

Видели такое при старте системы и не можете понять в чем причина?

А приина в secureboot. Один из модулей ядра у вас не имеет цифровой подписи.

Чаще всего это происходит с модулями, которые собираются через akmod. Среди них virtualbox и nvidia (вроде amd тоже, но у меня нет возможности проверить). В последних релизах федоры что-то сломали и модули больше не подписываются при сборке.

where: suplibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTALLED (-1908) - The support driver is not installed. On linux, open returned ENOENT.

И что делать? Можно отключить secureboot?

Можно, но не нужно. Будете страдать от сообщения о несекурной загрузке.

  1. Создаем собственный ключ для подписи модулей и каталог, в котором это будет жить.
# mkdir /root/module-signing
# cd /root/module-signing
# openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=YOUR_NAME/"
# chmod 600 MOK.priv
  1. Регистрируем ключ в системе при помощи mokutils. Нам потребуется задать простой одноразовый пароль, который у нас спросят при перезагрузке.
# mokutil --import /root/module-signing/MOK.der
input password:
input password again:
  1. Перезагружаемся. Выбираем Enroll MOK. После выбираем единственный ключ и вводим пароль из шага выше.
  2. Пишем скрипт для подписания модулей. Помимо виртуалбокса туда можно добавить нужные вам записи.
#!/bin/bash

for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do
  echo "Signing $modfile"
  /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 \
                                /root/module-signing/MOK.priv \
                                /root/module-signing/MOK.der "$modfile"
done
  1. После обновления ядра\модуля\компонента запускаем скрипт выше, а потом перезагружаем модули.
# ./root/module-signing/sign-vbox-modules
Signing /lib/modules/5.6.6-200.fc31.x86_64/extra/VirtualBox/vboxdrv.ko
Signing /lib/modules/5.6.6-200.fc31.x86_64/extra/VirtualBox/vboxnetadp.ko
Signing /lib/modules/5.6.6-200.fc31.x86_64/extra/VirtualBox/vboxnetflt.ko
# systemctl restart systemd-modules-load.service

Источник

Python: Чем плох datetime.replace?

часыПоговорим сегодня про даты и часовые пояса. А именно о том, почему не стоит использовать datetime.replace совместно с таймзонами из pytz если вы не уверены (вообще не стоит).

Конечно все с оговорками. Иногда так надо. Но все равно не стоит так делать.

Продолжить чтение «Python: Чем плох datetime.replace?»

Linux: Обрабатываем RAW-изображения

resize_resultМы не будем говорить о том, как правильно\неправильно обрабатывать raw’ки. Мы поговорим об инструментах (конечно же консольных), которые можно применять для конвертирования, склейки и других операций.

Фото на превью — это то, что удалось вытащить из raw (конечно же оно пожатое в джипег и отресайзено для публикации).

Продолжить чтение «Linux: Обрабатываем RAW-изображения»

Linux: Избавляемся от файловых ассоциаций WINE

При работе с wine постоянно наблюдается появление новых файловых ассоциаций, которые только мешают.
Ожин из способов удалить эти ассоциации —
то удалить соответствующие mime-типы (есть другой способ — просто отучить wine их создавать, но там возникает проблема с тем, то он перестает создавать ярлыки приложений).

$ rm -f ~/.local/share/applications/mimeinfo.cache
$ rm -f ~/.local/share/mime/packages/x-wine*
$ rm -f ~/.local/share/mime/application/x-wine-extension-*
$ update-desktop-database ~/.local/share/applications

OpenWRT: Настройка после установки

openwrt Небольшой скетч про послеустановочную настройку OpenWRT.

Настройка флешки как overlayfs

Большинство роутеров имеют у себя usb-порт куда можно воткнуть флешку и использовать ее для swap-файла (вдруг что) и для overlayfs. https://wiki.openwrt.org/ru/doc/howto/extroot

Настройка dropbear

/etc/config/dropbear

config dropbear
     option PasswordAuth 'on'
     option RootPasswordAuth 'on'
     option Port         '22'
     # option BannerFile   '/etc/banner'
     option Interface 'lan'

Выставляем ssh только в lan-интерфейс

https://wiki.openwrt.org/doc/howto/secure.access

Добавление пользователя

# opkg update
# opkg install shadow-usermod shadow-useradd shadow-groupadd
# mkdir /home
# useradd -m -s /bin/ash penguin
# passwd penguin
# opkg update
# opkg install sudo
# groupadd --system sudo
# usermod -a -G sudo penguin
# visudo

Добавляем строки, которые позволяют группе sudo использовать sudo

%sudo ALL=(ALL) ALL

Настройка dropbear для запрета доступа root

На локальной машине

$ ssh-copy-id 

На сервере в конфиге dropbear

     option PasswordAuth 'off'
     option RootPasswordAuth 'off'

Предварительно убеждаемся что ключи работают. Иначе останетесь без доступа.

Изменение размера vmdk-диска

Диски vmdk не поддерживают простое изменение размера. Нужно сначала конверировать в vdi, изменять размер и конвертировать обратно.

Опция размера передается в мегабайтах

$ VBoxManage clonehd "source.vmdk" "cloned.vdi" --format vdi
$ VBoxManage modifyhd "cloned.vdi" --resize 51200
$ VBoxManage clonehd "cloned.vdi" "resized.vmdk" --format vmdk

Linux: XScreenSaver не гасит подсветку монитора

xscreensaver-settings-1Начиная с какого-то обновления системы у меня перестал выключаться монитор. Xscreensaver настроен в режим «только пустой экран» и на вкладке энергосбережения выставлен флажок «быстрое отключение питания в режиме пустого экрана».

Никакими комбинациями опций нельзя было заставить его гаснуть нормально.

xscreensaver-settings-2.png

Вдобавок к этому я использую xss-lock чтобы при открытии крышки не было момента когда выдно содержимое экрана. Подробнее можно почитать в похожем багрепорте для gnome-screensaver (проблема имеет одни и те же корни у всех вариаций скринсейверов).

Проблема выглядит так:

  • если активировать блокировку через консоль
    xscreensaver-command -lock

    то все работает как надо и экран гаснет;

  • если активировать блокировку через хоткеи lxde, то после активации на долю секунды виден рабочий стол и после этого черный экран с активной подсветкой.

Конечно же надо читать логи.

Прибиваем активного хранителя и стартуем verbose-mode.

$ killall xscreensaver
$ xscreensaver -no-splash -v

После этого можно пытаться заблокировать экран из консоли и с клавиатуры. Смотрим.

Блокировка с консоли

xscreensaver: 20:03:18: LOCK ClientMessage received; activating and locking.
xscreensaver: 20:03:19: 0: locked mode switching.
xscreensaver: 20:03:19: user is idle (ClientMessage)
xscreensaver: 20:03:19: blanking screen at Fri May  3 20:03:19 2019.
xscreensaver: 20:03:19: mouse is on screen 1 of 2
xscreensaver: 20:03:19: 1: grabbing keyboard on 0x16a... GrabSuccess.
xscreensaver: 20:03:19: 1: grabbing mouse on 0x16a... GrabSuccess.
xscreensaver: 20:03:19: LOCK ClientMessage received while already locked.
xscreensaver: 20:03:33: user is active (keyboard activity)
xscreensaver: 20:03:33: pam_start ("xscreensaver", "penguin", ...) ==> 0 (Succes
s)
...

Блокировка с хоткея

xscreensaver: 20:01:46: LOCK ClientMessage received; activating and locking.
xscreensaver: 20:01:46: 0: locked mode switching.
xscreensaver: 20:01:46: user is idle (ClientMessage)
xscreensaver: 20:01:46: blanking screen at Fri May  3 20:01:46 2019.
xscreensaver: 20:01:46: mouse is on screen 1 of 2
xscreensaver: 20:01:46: 1: grabbing keyboard on 0x16a... GrabSuccess.
xscreensaver: 20:01:46: 1: grabbing mouse on 0x16a... GrabSuccess.
xscreensaver: 20:01:48: DPMSForceLevel(dpy, DPMSModeOff) did not change monitor power state.
xscreensaver: 20:01:48: LOCK ClientMessage received while already locked.
xscreensaver: 20:02:05: user is active (keyboard activity)
xscreensaver: 20:02:05: pam_start ("xscreensaver", "penguin", ...) ==> 0 (Success)
...

Ага. Во втором случае у нас почему-то не смог выключиться монитор.

В интернетах ответа я не нашел, но предполагается, что хоткей передается дальше в активированный скринсейвер.

Поэтому я просто модифицировал команду, которую вызываю с клавиатуры добавив sleep 0.1. Это помогло. Вероятно значение слипа вам придется выбрать самостоятельно. На одной из машин этот фикс у меня сработал только при задержке в 0.5.

lxde-hotkey.png

Mikrotik: multicast в wireless-сетях

Mikrotik-RB951G-2HnDКратко: если у вас роутер mikrotik и вы хотите использовать udp-multicast в беспроводной сети, то надо включить опцию multicast helper в настройках интерфейса. Если этого не сделать, то пакеты будут теряться. А дальше мы посмотрим как можно диагностировать подобную ситуацию.

Обновил я свой роутер до mikrotik (оказалась очень удобная штука). В моей локальной сети для всяких разных iot был настроен zeroconfig по собственному мануалу. И тут что-то пошло не так.

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

Мы можем эту итуацию наблюдать на скриншоте wireshark ниже.wireshark.pngРассмотрим на примере хоста diskstation.local.

На нем я смотрел в tcpdump и видел, что ответ есть.

# tcpdump port mdns
...
18:04:29.405838 IP6 fe80::e3de:bf6f:105e:ad4d.mdns > ff02::fb.mdns: 0 [2q] A (QM)? diskstation.local. AAAA (QM)? diskstation.local. (41)
18:04:29.405885 IP 192.168.88.252.mdns > 224.0.0.251.mdns: 0 [2q] A (QM)? diskstation.local. AAAA (QM)? diskstation.local. (41)
18:04:29.406152 IP6 fe80::211:32ff:fe80:3eb5.mdns > ff02::fb.mdns: 0*- [0q] 1/0/0 (Cache flush) AAAA fe80::211:32ff:fe80:3eb5 (57)
18:04:29.406388 IP diskstation.lan.mdns > 224.0.0.251.mdns: 0*- [0q] 2/0/0 (Cache flush) AAAA fe80::211:32ff:fe80:3eb5, (Cache flush) A 192.168.88.250 (73)

Интернеты не смотгли дать вразумительного ответа почему так происходит. Была лишь одна зацепка — это разбор проблем с вещанием iptv. И именно там я встретил заметку о том, что гоже было бы включить multicast helper в настройках интерфейса wifi (предварительно нажать advanced settings).

wifi-config.png