Ключевые слова: Х-терминал, linux, LTSP, Linux Terminal Server Project, терминальный linux-сервер, бездисковая станция, ПК без жесткого диска, использование старых компьютеров, diskless workstation, thin client, asplinux, использование Linux в офисе, X-terminal
Теперь перейдем к непосредственной настройке звука на конкретных Х-терминалах. Для этого в раздел файла /opt/ltsp/i386/etc/lts.conf, который относится к нужному Х-терминалу, следует добавить параметр "SOUND = Y", а также указать тип используемого звукового демона “SOUND_DAEMON = esd”. Для интегрированных звуковых устройств, а также для звуковых карт с интерфейсом PCI достаточно указать автоматическую конфигурацию, используя параметр “SMODULE_01 = auto”. При внесения изменений в файл /opt/ltsp/i386/etc/lts.conf рекомендуется также перевести Х-терминал в текстовый режим (RUNLEVEL = 3), и посмотреть на сообщения системы поддержки звука. В моем случае при загрузке я увидел на экране следующую надпись:
...
Loading Sound Modules
Running Sound Server
- accepting connections on port 16001
aumix: error opening mixer
Типичное сообщение об ошибке свидетельствует про успешный запуск звукового сервера-демона ESD на порту TCP/IP номер 16001, и ошибке инициализации звуковой карты. Система тем самым сообщает, что ей не удалось самостоятельно определить тип звуковой карты и загрузить соответствующий модуль ядра. Неудивительно, ведь я для примера использовал ISA карту Yamaha на чипсете opl3-sa2. Но если вы, как и я - счастливый обладатель звуковой карты ISA, то не стоит расстраиваться, так как после небольшого поиска нужного звукового модуля и указания правильных его параметров вам удастся заставить работать в Х-терминале практически любую звуковую карту. Для ISA-карт обязательной является загрузка модулей: soundcore, sound, ad1848 и uart401. Последним загружается непосредственно модуль звуковой карты, в нашем случае opl3sa2. Раздел главного файла конфигурации /opt/ltsp/i386/etc/lts.conf посвященного поддержке звука на Х-терминале будет выглядеть вот так:
SOUND = Y
SOUND_DAEMON = esd
SMODULE_01 = soundcore
SMODULE_02 = sound
SMODULE_03 = ad1848
SMODULE_04 = uart401
SMODULE_05 = opl3sa2
Перегружаем Х-терминал и смотрим, что за сообщение появились на экране. К сожалению, сообщение об ошибке крайне не утешительное:
Loading Sound Modules
Loading: soundcore
Loading: sound
Loading: ad1843
ad1843/cs4248 codec driver Copyright © by Hannu Savolainen 1993-1996
Loading: uart401
Loading opl3sa2
opl3sa: io, mss_io, irq, dma, and dma2 must be set
/lib/modules/2.4.24-ltsp-1/kernel/drivers/sound/opl3sa2.o: init_module: Invalid argument
Hint: insmod error can be caused by incorrect module parameters, including invalid IO or IRQ parameters
/lib/modules/2.4.24-ltsp-1/kernel/drivers/sound/opl3sa2.o: insmod /lib/modules/2.4.24-ltsp-1/kernel/drivers/sound/opl3sa2.o failed
/lib/modules/2.4.24-ltsp-1/kernel/drivers/sound/opl3sa2.o: insmod opl3sa2 failed
ERROR! loading module: opl3sa2 failed !
Press to continue
Нажимаем клавишу “Enter” и продолжаем загрузку Х-терминала. Из сообщения об ошибке понятно, что при загрузке модуля ядра /lib/modules/2.4.24-ltsp-1/kernel/drivers/sound/opl3sa2.o возникли ошибки, которые связаны с неправильным использованием обязательных параметров модуля:io, mss_io, irq, dma и dma2. Выбор правильных параметров для модуля ядра, соответствующего звуковой карте ISA, довольно сложное занятие, так как требует хорошего знания принципов работы устройств этого типа. Для начала следует перегрузить Х-терминал и посмотреть какие параметры были присвоены звуковой карте системой BIOS и распознаны ядром Linux. Итак, на начальном экране загрузки промелькнули такие строки:
ISA/PNP device listing ...
Card No. Device No. DMA IRQ Device Name
1 0 0,1 5 OPL3-SA2 Sound Board
1 1 0,0 NA OPL3-SA2 Sound Board
1 2 0,0 NA OPL3-SA2 Sound Board
1 3 0,0 11 OPL3-SA2 Sound Board
Какую информацию можно извлечь из данного примера. Во-первых, irq=5. Во-вторых, dma=0, а dma2=1. В-третьих, нам осталось только узнать какой диапазон используется для параметров io и mss_io. Чтобы добыть эту информацию, обращаемся за помощью в глобальную сеть Интернет. Например, запрос для поисковой системы Google может выглядеть так: “linux opl3sa2 io mss_io” (см. рис. 9.11).
Рис. 9.11. Страница результатов поиска параметров модуля ядра opl3sa2
Буквально вторая ссылка в результатах поиска привела нас к нужной информации: выдержки из рабочего файла /etc/modules.conf:
alias sound-slot-0 opl3sa2
options opl3sa2 io=0x370 mss_io=0x530 mpu_io=0x330 irq=5 dma=0 dma2=1
options opl3sa2 io=0x388
Вооружившись новым знанием, добавляем обязательные параметры в соответствующий раздел файла /opt/ltsp/i386/etc/lts.conf, а также необязательный, но использующийся аргумент mpu_io:
SOUND = Y
SOUND_DAEMON = esd
SMODULE_01 = soundcore
SMODULE_02 = sound
SMODULE_03 = ad1848
SMODULE_04 = uart401
SMODULE_05 = opl3sa2 io=0x370 mss_io=0x530 mpu_io=0x330 irq=5 dma=1 dma2=0
Перегружаем Х-терминал и следим за сообщениями на экране:
Loading Sound Modules
Loading: soundcore
Loading: sound
Loading: ad1843
ad1843/cs4248 codec driver Copyright © by Hannu Savolainen 1993-1996
Loading: uart401
Loading opl3sa2 io=0x370 mss_io=0x530 mpu_io=0x330 irq=5 dma=1 dma2=0
opl3sa2: Found OPL3-SA2 (YMF711)
Running Sound Server
- accepting connections on port 16001
Похоже, что все в порядке. Запускаем наш любимый музыкальный проигрыватель (у меня это xmms) и настраиваем его на работу через звуковой демон ESounD. Нажимаем кнопку “Play” и тишина ... . Слегка только подергивается эквалайзер и время проигрывания музыкального файла отсчитывается очень медленно. Очень похоже на ошибку в параметрах звукового модуля ядра. Проверим еще раз установленные параметры: точно, ошибка в значениях dma и dma2 (их аргументы перепутаны местами). В новой редакции правильный фрагмент файла /opt/ltsp/i386/etc/lts.conf должен выглядеть вот так:
SOUND = Y
SOUND_DAEMON = esd
SMODULE_01 = soundcore
SMODULE_02 = sound
SMODULE_03 = ad1848
SMODULE_04 = uart401
SMODULE_05 = opl3sa2 io=0x370 mss_io=0x530 mpu_io=0x330 irq=5 dma=0 dma2=1
Перегружаем Х-терминал и видим, что теперь в модуль opl3sa2.o переданы новые параметры:
Loading opl3sa2 io=0x370 mss_io=0x530 mpu_io=0x330 irq=5 dma=0 dma2=1
opl3sa2: Found OPL3-SA2 (YMF711)
Running Sound Server
- accepting connections on port 16001
Да здравствует звук на Х-терминале!