LINUX.ORG.RU

Проигрывание звука под альтернативным пользователем

 


0

1

Как настроить систему на проигрывание звука процессом под пользователем, отличным от залогиненого в dm?

$ sudo -u test play /var/tmp/test.wav 
play FAIL sox: Sorry, there is no default audio device configured

Linux Mint 22

Сильно зависит от того, что используется для вывода звука - alsa, pipewire, pulseaudio. Через alsa смогут играть все пользователи, которые в группе audio. С остальными вариантами сложнее, тут нужна конкретика, какая задача, что для чего и как надо.

James_Holden ★★★★
()
sudo -u user2 bash -c "export XDG_RUNTIME_DIR="/run/user/\$UID"; export DBUS_SESSION_BUS_ADDRESS="unix:path=\${XDG_RUNTIME_DIR}/bus"; systemd-run --user -r bash -c 'export $(dbus-launch); aplay /usr/share/sounds/speech-dispatcher/test.wav'"
x905 ★★★★★
()
Последнее исправление: x905 (всего исправлений: 4)
  1. Если у тебя альса настроена в ~/.asoundrc, то логично, что другому пользователю этот конфиг не будет видно.

  2. Как сказали выше, у пользователя должны быть права.

Bfgeshka ★★★★★
()
Ответ на: комментарий от James_Holden

Задача простая — Сборка, ориентированная на безопасность.

Отдельный пользователь на каждый сервис — такой подход используется в systemd. Одна программа — один пользователь. Такой подход используется в Android.

Хотелось бы изолировать отдельные программы от остальной системы. В первую очередь, конечно, браузер. Таким образом даже потенциальный взлом браузера не привел бы к утечке.

Я в курсе существования AppArmor и SELinux. Но в них не разбираюсь. Кроме того, если все же наложить потом дополнительно правила AppArmor. То лучше было бы наложить их уже на базовую систему безопасности. Просто ИМХО. Вобщем-то я считаю его здесь пока излишним…

GUI замечательно запускается в иксах после xhost + si:localuser:test. Но звука нет. Неприятно.

Logo2004
() автор топика
Ответ на: комментарий от James_Holden

Через alsa смогут играть все пользователи, которые в группе audio

Вроде помогло, спасибо. Хотя вчера не работало. Возможно, понадобилось поставить и снести pulseaudio…

Интересно конечно имеет ли теперь это пользователь доступ к микрофону… Впрочем, у меня VirtualBox. Подходит.

Logo2004
() автор топика

Действительно странно. Linux Mint 22, 22.1.

$ sudo -u user aplay /var/tmp/test.wav
aplay: main:834: ошибка открытия аудио-устройства: Нет такого файла или каталога

Даже если user в группе audio.

Но после установки и удаления pulseaudio проблема исчезает.

sudo apt install pulseaudio
sudo apt purge pulseaudio
Logo2004
() автор топика
Ответ на: комментарий от Logo2004

ЕМНИП если юзера добавить в группу, изменения не сразу применяются, а после перезапуска процесса, и, возможно, сессии.

goingUp ★★★★★
()
Последнее исправление: goingUp (всего исправлений: 1)
Ответ на: комментарий от James_Holden
$ ls -l ~/.asoundrc /etc/asound.conf
ls: невозможно получить доступ к '/home/user/.asoundrc': Нет такого файла или каталога
ls: невозможно получить доступ к '/etc/asound.conf': Нет такого файла или каталога
$ find / -name '*asoundrc*'
/usr/share/doc/libasound2t64/examples/asoundrc.txt

Ладно, работает, и то хорошо…

Logo2004
() автор топика
Ответ на: комментарий от James_Holden

Похоже, рано я радовался, внезапно звук опять перестал работать. «ошибка открытия устройства: Устройство или ресурс занято». При том, что вроде бы ничего не трогал. Только создал пользователя torbrowser, запустил браузер, да перегрузился пару раз.

Хер его знает, что с этим делать…

Logo2004
() автор топика
Ответ на: комментарий от Logo2004

ALSA (ядерные драйверы звуковых адаптеров) не позволяет одновременное использование аудио устройств. Одно аудио устройство может открыть только один процесс. Остальные процессы при попытке открыть устройство получат ошибку EBUSY.

Для совместного использования одного аудио устройства из нескольких процессов нужен звуковой сервер. Сервер открывает звуковое устройство, принимает соединения от программ звуковых клиентов, микширует аудиопотоки от клиентов и пишет в аудиоустройство (для вывода звука), читает аудиопоток от устройства и дублирует его клиентам (для ввода звука).

В линуксе аудио серверов много: pulseaudio, pipewire, jack. Но они все запускаются как часть пользовательской сессии. Чтобы был возможен мультисит — у каждой пользовательской сессии своя звуковуха. Если тебе надо расшарить одну звуковуху на нескольких пользователей, надо разобраться, как запустить звуковой сервер вне пользовательской сессии (видимо, как системный сервис).

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

ALSA (ядерные драйверы звуковых адаптеров) не позволяет одновременное использование аудио устройств. Одно аудио устройство может открыть только один процесс. Остальные процессы при попытке открыть устройство получат ошибку EBUSY.

На воид и дженту это не так. На альсе на дефолтной конфигурации без проблем выводится звук из нескольких приложений одновременно.

u5er ★★
()
Ответ на: комментарий от James_Holden

И в самом деле, установлен pipewire. Однако.

$ sudo apt purge pipewire
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово         
Будут установлены следующие дополнительные пакеты:
  pulseaudio
Предлагаемые пакеты:
  pavumeter paprefs
Следующие пакеты будут УДАЛЕНЫ:
  gstreamer1.0-pipewire* pipewire* pipewire-pulse* wireplumber*
Следующие НОВЫЕ пакеты будут установлены:
  pulseaudio
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 4 пакетов, и 72 пакетов не обновлено.
Необходимо скачать 884 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 3 596 kB.
Хотите продолжить? [Д/н]
Logo2004
() автор топика
Ответ на: комментарий от Logo2004

Я лично весьма не очень отношусь к deb дистрибутивам, именно по причине таких художеств.

Тут поднимали как-то эту проблему - как удалить pulseaudio и pipewire одновременно в дебе, но я уже не помню к чему там пришли, потому что не использую deb дистрибутивы.

Можно попробовать установить pulseaudio, и настроить его так чтобы само оно не запускалось. Вроде, как-то это можно, должно гуглиться.

James_Holden ★★★★
()