[sisyphus] доступ к alsa из-под разных пользователей

Sergey Vlasov =?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Сб Ноя 12 21:01:16 MSK 2005


On Sat, Nov 12, 2005 at 06:57:39PM +0200, Artem wrote:
> Продолжая терзать slmodemd ,  стал добавлять в него софтовый вывод звука 
> (тот, который должен выводиться через отсутствующий у меня, и наверное, 
> у многих владельцев ноутбуков модемный динамик). Вот уже и модем начал 
> голос подавать (в виде прерывистого и более высокчастотного писка пока, 
> но это уже вопросы конверсии различных частот оцифровки и синхронизация 
> размеров буферов - решаются с помощью того же alsa api).
> Т.к. slmodemd работает из-под root (под обычным user вроде тоже 
> работает, но выдает ошибки при старте - жалуется на memory allocation и 
> еще на что-то), то после старта из-под рута, он открывает звуковое 
> устройство alsa default - и после этого все программы (хmms, aplay) 
> из-под простых пользователей начинают ругаться на то, что нет доступа к 
> звуковому устройству (хотя у меня настроен dmix). Стартую slmodemd 
> из-под простого пользователя и в под тем же пользователем пробую xmms - 
> звуки от модема и от xmms нормально микшируются.
> 
> Подозревая, что это какие-то особенности sisyphus, отсылаю письмо  сюда.

Нет, всё хуже - это особенности dmix.  Нужно задавать ему параметры:

  ipc_key INT		# Unique ipc key
  ipc_perm INT		# ipc permissions (default 0600)
  ipc_gid INT		# ipc gid (default -1 = disable)
  ipc_key_add_uid BOOL  # Add current uid to ipc_key

dmix использует SysV IPC (разделяемую память и семафоры, причём ему
нужно два сегмента разделяемой памяти - в одном управляющая
информация, в другом буфер для звуковых данных).  Первый процесс,
использующий dmix, выполняет fork(), и получившийся новый процесс
становится сервером; остальные процессы получают от сервера дескриптор
реального звукового устройства (для этого используется unix socket в
/tmp, имя сокета передаётся через сегмент разделяемой памяти).

Кстати, параметр ipc_gid, необходимый для раздачи доступа к dmix,
появился совсем недавно - в libalsa-1.0.9 его нет, нужна ещё
официально не вышедшая 1.0.10.

> P.P.S.  Это только у меня в XMMS при выводе через dmix не работает 
> "пауза"? Воспроизведение останавливается, но продолжить потом нельзя - 
> нужно сначала композицию включать кнопкой play. При указании вывода 
> напрямую в hw:0.0 - все работает.

Что-то там сломано - возможно, что и в самом dmix.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/sisyphus/attachments/20051112/4e1017dc/attachment-0003.bin>


Подробная информация о списке рассылки Sisyphus