Частичный ответ:
Я посмотрел патч ALC 1220, и он просто добавляет то же исправление, что и для ALC 882 (который используется целым рядом кодеков).
Но ваша проблема, похоже, в том, что связь с чипом кодека вообще не работает. Драйвер звуковой картыsnd_hda_intel
загружается, выдает одну ошибку тайм-аута, второй нет, поэтому что-тоработает, но потом не может найти кодек. Таким образом, он никогда не достигает стадии, когда патч был бы актуален.
Идеи:
1) Посмотри в биосе есть ли какие настройки звуковой карты. Возможно, изменив что-то здесь, связь с кодеком заработает.
2) В HD-Audio.txtговорится, что вы можете принудительно проверить, не работает ли BIOS:
На машине со сломанным BIOS иногда необходимо принудительно драйвер для проверки слотов кодеков, которые аппаратное обеспечение не сообщает об использовании. В таком случае включите бит 8 (0x100) опции
probe_mask
. Затем остальные 8 бит передаются как слоты кодека для проверки. безусловно. Например,probe_mask=0x103
заставит проверить слоты кодека 0 и 1 независимо от того, что сообщает аппаратное обеспечение.
Попробуйте от имени пользователя root
modprobe -r snd_hda_intel
modprobe snd_hda_intel probe_mask=0x1ff
и посмотрите, что произойдет в dmesg
.
3) Если ничего не помогает, сообщите об ошибке разработчикам ALSA и посмотрите, есть ли у них идеи.
Скорее всего, при работе под cron
соединение было закрыто до того, как удаленный сервер успел выдать свой баннер. Это потому, что openssl s_client
управляет двунаправленным соединением между своим stdio и сокетом с удаленным сервером:
При запуске под cron
первая копия немедленно завершает работу, потому что стандартный ввод подключен к / dev / null
. Это привело к немедленному завершению работы openssl
.
Вы можете смягчить это, перенаправив ввод openssl
во что-то, что блокирует навсегда, или, что еще лучше, что-то вроде sleep 1
, что устранит необходимость в timeout
.
Тем не менее, ожидание в одну секунду - особенно хрупкий способ подключиться и дождаться баннера. Это не только довольно короткий тайм-аут, но он даже не приводит к тому, что команда завершается раньше истечения тайм-аута при получении баннера. Для чего-то вроде этого вы ищете expect
.
Между прочим:
Другие, вероятно, не согласятся, но я считаю, что вы используете термин «консоль» в этом вопросе неточно. Фактически, вы получите поведение, которое вы впервые описали в любом сеансе терминала, который может быть, среди прочего,
xterm
или современные замены) в вашем графическом интерфейсе экран
окно, Я считаю, что термин «консоль» должен относиться исключительно к последнему, но все это терминальные сеансы.
Cron использует минимальный набор переменных окружения для вашей работы. И может использовать другие функции, чем вы используете в консоли.
Вы можете использовать команду which <имя программы>
, чтобы увидеть расположение timeout и openssl, когда вы используете их в консоли, а также в cron.
Вы также можете установить переменную PATH
в начале вашего скрипта.