a2dp-sink profile connect failed

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

Для начала пересобрал и обновил модуль. Ошибок стало меньше, но наушники всё так же не хотели подключаться, в логах была ошибка:

bluetoothd[xxxx]: src/service.c:btd_service_connect() a2dp-sink profile connect failed for XX:XX:XX:XX:XX:XX: Protocol not available

Проблема решилась добавлением в конфиг pulseaudio /etc/pulse/default.pa загрузки модуля module-bluez5-discover:

load-module module-bluez5-discover

Перезапускаем PulseAudio:

killall pulseaudio

Подключаем наушники, в логах не видим ошибок — всё прошло успешно. 🙂

Скрипт автоматизированной компиляции ядра Linux — теперь на GitHub

Скрипт автоматизированной компиляции ядра Linux из одноимённой записи переполз в GitHub — https://github.com/alex-clumsy/linuxkernelbuilder. Также он подвергся дополнительным изменениям, которые, как мне думается, пошли ему на пользу. И в целом, я решил немного выйти из тени и поделиться своими наработками. Вдруг кому-то будут полезны. 🙂

Установка и настройка Jitsi meet с поддержкой JWT токенов в Debian Linux

Подразумевается, что вы знаете, что такое Jitsi Meet и для чего он нужен. Ниже я приведу инструкции по установке и настройке, которые решают проблему несовместимости Lua 5.2 и Lua 5.1. На возможных проблемах с сертификатами я останавливаться не буду, если у вас вдруг что-то идёт не так — напишите в комментариях, попробуем разобраться вместе. Как правило, установка проходит без проблем, они начинаются дальше. 🙂

Итак, поехали:

wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | apt-key add -
sh -c "echo 'deb https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list"
apt-get -y update && apt-get -y install jitsi-meet certbot
apt install git cmake luarocks libssl-dev liblua5.2
wget http://packages.prosody.im/debian/pool/main/p/prosody-trunk/prosody-trunk_1nightly1273-1~buster_amd64.deb
dpkg -i prosody-trunk_1nightly1273-1~buster_amd64.deb
apt-get install jitsi-meet-tokens prosody-modules lua5.2 liblua5.2 luarocks libssl-dev
luarocks install basexx

Добавим в конец файла /etc/prosody/prosody.cfg.lua строчку:

Include "conf.d/*.cfg.lua"

Также отключим обязательное шифрование между клиентом и сервером:

c2s_require_encryption = false

Поставим модуль lua-cjson:

luarocks download lua-cjson
luarocks unpack lua-cjson-2.1.0.6-1.src.rock

В файле lua-cjson-2.1.0.6-1/lua-cjson/lua_cjson.c поменяем строку 743:

len = lua_objlen(l, -1);

на

len = lua_rawlen(l, -1);

И выполним установку модуля:

cd lua-cjson-2.1.0.6-1/lua-cjson
luarocks make

Требуемый модуль luajwtjitsi не работает в Debian с Lua 5.1, используем доработанную версию:

cd
git clone https://github.com/ASolomatin/luajwt.git
cd luajwt

Внесём изменения в файл luajwtjitsi-1.3-7.rockspec:

source = {
        url = "git://github.com/ASolomatin/luajwt/",
        tag = "replace_luacrypto"
}

dependencies = {
       "lua >= 5.2",
       "luaossl >= 20190731-0",
       "lua-cjson >= 2.1.0",
       "lbase64 >= 20120807-3"
}

После этого выполним установку модуля:

luarocks install luajwtjitsi-1.3-7.rockspec

После всех этих манипуляций перезапустим prosody:

systemctl restart prosody

Убедимся, что в /var/log/prosody/prosody.err не ошибок. Теперь у вас должна заработать аутентификация с помощью JWT токенов.

Более подробная документация про токены — https://github.com/jitsi/lib-jitsi-meet/blob/master/doc/tokens.md.

Генерация пароля в Unix/Linux

С задачей генерации пароля мы сталкиваемся довольно часто. А уж админы так и вообще иной раз по несколько паролей за день генерируют. Когда фантазия заканчивается, можно не проводить очередные рандомные удары по клавиатуре в надежде получить что-то более-менее похожее на хороший пароль, а воспользоваться готовыми решениям. Одно из таких решений — утилита makepasswd.

Если она у вас не установлена — ставим её:

apt-get install makepasswd

Пользоваться makepasswd довольно просто:

alexey@ws:~$ makepasswd 
tTD7hs3J8

По умолчанию генерируется пароль из 8 символов. Если хочется пароль подлиннее, например из 20 символов:

alexey@ws:~$ makepasswd --chars=20
jeDewHoSI3PBzYKESMHD

Нужно сгенерировать сразу 10 паролей? Не вопрос!

alexey@ws:~$ makepasswd --chars=20 --count=10
2nPjfzwmaePqvy95oWfd
WTqHSrJcx3yhYzvo9p5M
NU6mJrjYi6SvG3VKppfo
wcW8N6SpnDxCoCVGGPRv
dv3P318GoSaNGY3TifzQ
J3Nm39HBfaFRSW88FQzr
sfImruyf5Ua30bUrCKiG
3IuabxbDtQvVio6EeFP7
pCnvUCLiUo6tUiBVMEPQ
t7YxtWtI1GCC5vpa1d1w

Легко, удобно, быстро.

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

Обновление после стабилизации релиза Debian

Обновлял сейчас один старый ноутбук, на который был установлен Debian Buster ещё будучи в testing. Команда apt-get update не отрабатывала и завершала работу ошибкой:

E: Repository 'http://security.debian.org/debian-security buster/updates InRelease' changed its 'Suite' value from 'testing' to 'stable'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.
N: Repository 'http://http.us.debian.org/debian buster InRelease' changed its 'Version' value from '' to '10.0'
E: Repository 'http://http.us.debian.org/debian buster InRelease' changed its 'Suite' value from 'testing' to 'stable'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.
E: Repository 'http://http.us.debian.org/debian buster-updates InRelease' changed its 'Suite' value from 'testing-updates' to 'stable-updates'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.

Данная проблема решается очень просто:

apt-get update --allow-releaseinfo-change