Предполагая, что timeout(1)
доступен, команда shell
timeout 5s whateverthatcommandis; sleep 99
должна убить программу через пять секунд (предполагая, что программа хорошо себя ведет...), а затем sleep
на любое количество xx секунд. Затем эти команды могут быть завернуты в какой-нибудь цикл по мере необходимости; при условии наличия seq
(на BSD вместо этого можно использовать jot
) типичный цикл может выглядеть так:
for n in `seq 1 1000`; do timeout 5s whateverthatcommandis; sleep 99; done
Цикл shell, кстати, может быть несколько более разборчивым в ZSH:
repeat 1000 { timeout 5s whateverthatcommandis; sleep 99 }
Добавьте всех пользователей, которые должны иметь возможность воспроизведения, в импульсный -доступ группу
# adduser problemofficer pulse-access
Создайте /etc/systemd/system/pulseaudio.service со следующим содержимым:
[Service]
Type=simple
PIDFile=/var/run/pulse/pid
ExecStart=/usr/bin/pulseaudio --daemonize=yes --system=yes --disallow-module-loading=yes --disallow-exit=yes
[Install]
WantedBy=multi-user.target
Включите эту новую службу systemd, чтобы она запускалась при загрузке:# systemctl enable pulseaudio
Имейте в виду, что эта конфигурация
Перезагрузка
Причина, по которой звук отключается, заключается в том, что Pulseaudio запускается при каждом входе в систему с правами этого пользователя, а система¹ не позволяет другим пользователям прослушивать аудио других пользователей.
Чтобы решить эту проблему, Pulseaudio необходимо запустить с привилегиями root, чтобы он работал как общесистемный демон, доступный только для всех пользователей. Все будут подключаться к этому экземпляру и смогут воспроизводить и слушать все, что воспроизводят или записывают другие пользователи.
Pulseaudio на самом деле не будет работать от имени пользователя root все время, а эти привилегии и предполагают пользователя pulse .
Изman pulseaudio
User pulse, group pulse: if PulseAudio is running as a system daemon (see --system above) and is started as root the daemon will drop privileges and become a normal user process using this user and group. If PulseAudio is running as a user daemon this user and group has no meaning.
Обратите внимание, что «пользовательский демон» — это не то же самое, что «системный демон». Первый — это то, как Pulseaudio работал раньше, второй — как он будет работать, если будут применены изменения.
Чтобы иметь возможность подключиться к системной службе Pulseaudio, вы должны быть членом группы доступа pulse -.
Снова изman pulseaudio
Group pulse-access: if PulseAudio is running as a system daemon (see --system above) access is granted to members of this group when they connect via AF_UNIX sockets. If PulseAudio is running as a user daemon this group has no meaning.
В качестве быстрого обходного пути можно было бы просто убить все экземпляры «пользовательского демона» Pulseaudio, а затем запустить /usr/bin/pulseaudio --system=yes
. Это запустит Pulseaudio без превращения в демона и более небезопасным способом, но может быть полезно для быстрого доказательства -проверки концепции -.
Чтобы сделать это постоянным и чтобы демон Pulseaudio запускался автоматически при запуске, его необходимо добавить в качестве службы systemd. Для этого предназначен файл /etc/systemd/system/pulseaudio.service .
Pulseaudio не запустит пользовательский демон², если он уже нашел системный демон, поэтому это решение работает.
Официальная документация Pulseaudio не рекомендует использовать Pulseaudio в качестве системного демона . Некоторые из упомянутых проблем:
...one especially problematic thing from security point of view is module loading. Anyone who has access can load and unload modules. Module loading can be disabled, but then bluetooth and alsa hotplug functionality doesn't work...
(Это означает, что при подключении -наушников звук не переключается автоматически с динамиков на наушники. Обратное также верно, когда вы снимаете наушники. Оба должны быть сделаны вручную.)
...much higher memory usage and CPU load in system mode...
(Лично я изменений в нагрузке не заметил.)
...all users that have access to the server can sniff into each others audio streams, listen to their mikes, and so on...
...you also lose a lot of further functionality, like the bridging to jack...
И, возможно, другие вещи, которых я не понимаю и поэтому не считаю заслуживающими включения сюда.
Примечание к ответу карпи:Ни один из шагов, описанных в его ответе, не был необходим для этого решения.
man pulseaudio
¹ Если кто-то может объяснить это подробно, я был бы очень благодарен.
² Успение [требуется ссылка]
Изhttps://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/213149:
Это пульсаудио "функция".
Редактировать/etc/default/pulseaudio
Изменить PULSEAUDIO_SYSTEM_START=0
кPULSEAUDIO_SYSTEM_START=1
Таким образом, pulseaudio запускается в системном режиме.
Из файла /etc/default/pulseaudio
:
# Start the PulseAudio sound server in system mode.
# (enables the pulseaudio init script)
# System mode is not the recommended way to run PulseAudio as it has some
# limitations (such as no shared memory access) and could potentially allow
# users to disconnect or redirect each others audio streams. The
# recommend way to run PulseAudio is as a per-session daemon. For GNOME
# sessions you can install pulseaudio-esound-compat and GNOME will
# automatically start PulseAudio on login (if ESD is enabled in
# System->Preferences->Sound). For other sessions, you can simply start
# PulseAudio with "pulseaudio --daemonize".
# 0 = don't start, 1 = start
Самый простой способ применить ваше изменение — запустить pulseaudio с параметром --daemonize
и перезапустить систему.
Другой вариант — полностью удалить pulseaudio и использовать вместо него alsa, лично мой предпочтительный вариант...
Я использую Arch Linux с systemd, и у меня была точно такая же проблема. Моя цель состояла в том, чтобы просто переключиться на другого пользователя (с помощью Ctrl -Alt -Fx или с помощью диспетчера отображения )и сохранить мой звук включенным.
Наконец-то я заработал, не играя с системным режимом (опасным, неподдерживаемым )или PolicyKit (ничего об этом не знаю ).
Шаги:
usermod -aG audio $USER
loginctl enable-linger $USER
Если это сработает, вы можете опционально поделиться PA этого пользователя с другими пользователями в сети, добавив что-нибудь в ~/.config/pulse/default.pa
, например:
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/24
Для "клиентских пользователей" просто добавьте к~/.config/pulse/client.conf
:
default-server = 127.0.0.1