i3status alsa микшер

Похоже, проблема на самом деле связана с тем, как скрипт configure для пятой версии 5.0 создает и запускает conftest для библиотеки urlmatch.

Во-первых, ошибка

checking for url_init in -lurlmatch... no
configure: error: liburlmatch not found

несколько вводит в заблуждение: если мы посмотрим на config.log, мы увидим, что conftest на самом деле не собирается из-за неопределенной ссылки на . ]uncompressfunction:

configure:5511: checking for url_init in -lurlmatch
configure:5546: g++ -o conftest -g -O2 -pthread  -isystem /usr/include/cairo -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /usr/include/pixman-1 -isystem /usr/include/freetype2 -isystem /usr/include/libpng12 -isystem /usr/include/freetype2 -isystem /usr/include/cairo -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /usr/include/pixman-1 -isystem /usr/include/freetype2 -isystem /usr/include/libpng12 -fvisibility-inlines-hidden  -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT   -lz conftest.cpp -lurlmatch    -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 >&5
//usr/local/lib/liburlmatch.a(opti_init.o): In function `initbin':
opti_init.c:(.text+0xd6): undefined reference to `uncompress'
collect2: error: ld returned 1 exit status
configure:5552: $? = 1

Это потому, что uncompressнаходится в libz— которая компонуется доliburlmatch:

. . .   -lz conftest.cpp -lurlmatch -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 >&5

не удается соблюдать необходимый порядок ссылок1для двух библиотек. Мы можем проследить это дальше до файла configure.ac, из которого должен был быть сгенерирован скрипт configure:

# Checks for libraries.
OLD_LDFLAGS=[$LDFLAGS]
LDFLAGS=["$LDFLAGS -lz"]
AC_CHECK_LIB([urlmatch], [url_init], [], AC_MSG_ERROR([liburlmatch not found]))
LDFLAGS=[$OLD_LDFLAGS]

т.е. вместо добавления в список LIBS , -lzдобавляется в LDFLAGS(который чаще используется для указания дополнительных библиотечных путейперед LIBS).

Быстрый и грязный обходной путь — позвонить по номеру ./configureс явным аргументом LIBS:

./configure "LIBS=-lz"

Это приводит к тому, что дополнительный -lzпомещается в командную строку g++после библиотека urlmatch(во главе другой LIBS):

. . . -lz conftest.cpp -lurlmatch -lz -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 >&5

Более постоянным решением может быть изменение файла configure.acчтобы добавить -lzв LIBSвместо LDFLAGS, а затем повторно сгенерировать configureс помощью autoconf(или autoreconfпри необходимости).


Ссылки:

  1. Почему порядок опции '-l' в gcc имеет значение?

1
24.05.2016, 02:25
1 ответ

Вы можете попробовать

device = "sysdefault"

Объяснение

Любое значение для устройства , которое не является по умолчанию или не соответствует не начинать с Pulse сообщает i3status не использовать PulseAudio и вернуться к alsa . Затем значение напрямую передается в alsa в качестве идентификатора устройства, поэтому просто установка его на alsa или что-то подобное не сработает.До того, как i3status поддерживал PulseAudio , вы могли просто установить его на по умолчанию , чтобы alsa использовал устройство по умолчанию. default по-прежнему является допустимым именем для устройства alsa . Но i3status теперь пытается автоматически определить PulseAudio и использовать его вместо alsa , когда устройство настроено на по умолчанию (или не установлено) ).

Используя sysdefault , вы можете обойти автоматизм в i3status , по-прежнему используя допустимое общее имя устройства для alsa .

Устранение неполадок

Если использование systemdefault по какой-либо причине не работает, возможно, вам придется использовать конкретное имя устройства. Если у вас только одна звуковая карта, hw: 0 должно работать.

device = "hw:0"

Но на современном настольном компьютере «звуковых карт» может быть больше, чем можно было бы ожидать. Помимо «настоящих» встроенных или выделенных звуковых карт, существуют видеокарты (звук для HDMI), веб-камеры, USB-гарнитуры, адаптеры Bluetooth и т. Д.

Вы можете получить список карт в вашей системе из файл / proc / asound / cards . Например:

 0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xfa120000 irq 41
 1 [Nvidia         ]: HDA-Intel - HDA Nvidia
                      HDA Nvidia at 0xd3000000 irq 16

Затем к ним можно получить доступ с именами устройств hw: N в i3status.conf , где N - это номер в первом столбце. .

Если вам нужна дополнительная информация, чтобы решить, какой номер устройства является правильным, вы можете использовать amixer -c N info ( amixer можно найти в alsa -utils package):

% amixer -c 0 info
Card hw:0 'PCH'/'HDA Intel PCH at 0xfa120000 irq 41'
  Mixer name    : 'Realtek ALC262'
  Components    : 'HDA:10ec0262,103c1587,00100202'
  Controls      : 41
  Simple ctrls  : 20

С amixer -c N вы получаете полный список всех элементов управления микшером и их настроек для карты N . С помощью amixer -c N sget CONTROL вы можете получить определенное значение. Таким образом, вы можете использовать amixer -c N sget Master ,чтобы убедиться, что вывод i3status соответствует фактическим значениям в alsa .

5
27.01.2020, 23:19

Теги

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