Package init

This commit is contained in:
overweight 2019-09-30 11:14:19 -04:00
commit d02c96ea35
7 changed files with 457 additions and 0 deletions

View File

@ -0,0 +1,181 @@
From de705a0eeaa27a8ac1abdc2625e639340323595a Mon Sep 17 00:00:00 2001
From: Tanu Kaskinen <tanuk@iki.fi>
Date: Tue, 6 Mar 2018 15:09:06 +0200
Subject: [PATCH 08/77] set exit_idle_time to 0 when we detect a session
As the comments explain, this fixes relogin problems on some systems
that remove our sockets on logout without terminating the daemon.
---
man/pulse-daemon.conf.5.xml.in | 15 ++++++++++++---
man/pulseaudio.1.xml.in | 17 +++++++++++++++--
src/modules/module-console-kit.c | 13 +++++++++++++
src/modules/module-systemd-login.c | 14 ++++++++++++++
src/modules/x11/module-x11-xsmp.c | 13 +++++++++++++
src/pulsecore/core.c | 10 ++++++++++
src/pulsecore/core.h | 2 ++
7 files changed, 79 insertions(+), 5 deletions(-)
diff --git a/man/pulse-daemon.conf.5.xml.in b/man/pulse-daemon.conf.5.xml.in
index f0550f3b..f49fa9b0 100644
--- a/man/pulse-daemon.conf.5.xml.in
+++ b/man/pulse-daemon.conf.5.xml.in
@@ -292,9 +292,18 @@ License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
<option>
<p><opt>exit-idle-time=</opt> Terminate the daemon after the
last client quit and this time in seconds passed. Use a negative value to
- disable this feature. Defaults to 20. The
- <opt>--exit-idle-time</opt> command line option takes
- precedence.</p>
+ disable this feature. Defaults to 20. The <opt>--exit-idle-time</opt>
+ command line option takes precedence.</p>
+
+ <p>When PulseAudio runs in the per-user mode and detects a login
+ session, then any positive value will be reset to 0 so that PulseAudio
+ will terminate immediately on logout. A positive value therefore has
+ effect only in environments where there's no support for login session
+ tracking. A negative value can still be used to disable any automatic
+ exit.</p>
+
+ <p>When PulseAudio runs in the system mode, automatic exit is always
+ disabled, so this option does nothing.</p>
</option>
<option>
diff --git a/man/pulseaudio.1.xml.in b/man/pulseaudio.1.xml.in
index f732b8ae..824eddb4 100644
--- a/man/pulseaudio.1.xml.in
+++ b/man/pulseaudio.1.xml.in
@@ -189,8 +189,21 @@ License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
<option>
<p><opt>--exit-idle-time</opt><arg>=SECS</arg></p>
- <optdesc><p>Terminate the daemon when idle and the specified
- number of seconds passed.</p></optdesc>
+ <optdesc>
+ <p>Terminate the daemon after the last client quit and this time in
+ seconds passed. Use a negative value to disable this feature. Defaults
+ to 20.</p>
+
+ <p>When PulseAudio runs in the per-user mode and detects a login
+ session, then any positive value will be reset to 0 so that PulseAudio
+ will terminate immediately on logout. A positive value therefore has
+ effect only in environments where there's no support for login session
+ tracking. A negative value can still be used to disable any automatic
+ exit.</p>
+
+ <p>When PulseAudio runs in the system mode, automatic exit is always
+ disabled, so this option does nothing.</p>
+ </optdesc>
</option>
<option>
diff --git a/src/modules/module-console-kit.c b/src/modules/module-console-kit.c
index c7938849..c8fe2ed2 100644
--- a/src/modules/module-console-kit.c
+++ b/src/modules/module-console-kit.c
@@ -118,6 +118,19 @@ static void add_session(struct userdata *u, const char *id) {
pa_log_debug("Added new session %s", id);
+ /* Positive exit_idle_time is only useful when we have no session tracking
+ * capability, so we can set it to 0 now that we have detected a session.
+ * The benefit of setting exit_idle_time to 0 is that pulseaudio will exit
+ * immediately when the session ends. That in turn is useful, because some
+ * systems (those that use pam_systemd but don't use systemd for managing
+ * pulseaudio) clean $XDG_RUNTIME_DIR on logout, but fail to terminate all
+ * services that depend on the files in $XDG_RUNTIME_DIR. The directory
+ * contains our sockets, and if the sockets are removed without terminating
+ * pulseaudio, a quick relogin will likely cause trouble, because a new
+ * instance will be spawned while the old instance is still running. */
+ if (u->core->exit_idle_time > 0)
+ pa_core_set_exit_idle_time(u->core, 0);
+
fail:
if (m)
diff --git a/src/modules/module-systemd-login.c b/src/modules/module-systemd-login.c
index 87981592..51401575 100644
--- a/src/modules/module-systemd-login.c
+++ b/src/modules/module-systemd-login.c
@@ -84,6 +84,20 @@ static int add_session(struct userdata *u, const char *id) {
pa_hashmap_put(u->sessions, session->id, session);
pa_log_debug("Added new session %s", id);
+
+ /* Positive exit_idle_time is only useful when we have no session tracking
+ * capability, so we can set it to 0 now that we have detected a session.
+ * The benefit of setting exit_idle_time to 0 is that pulseaudio will exit
+ * immediately when the session ends. That in turn is useful, because some
+ * systems (those that use pam_systemd but don't use systemd for managing
+ * pulseaudio) clean $XDG_RUNTIME_DIR on logout, but fail to terminate all
+ * services that depend on the files in $XDG_RUNTIME_DIR. The directory
+ * contains our sockets, and if the sockets are removed without terminating
+ * pulseaudio, a quick relogin will likely cause trouble, because a new
+ * instance will be spawned while the old instance is still running. */
+ if (u->core->exit_idle_time > 0)
+ pa_core_set_exit_idle_time(u->core, 0);
+
return 0;
}
diff --git a/src/modules/x11/module-x11-xsmp.c b/src/modules/x11/module-x11-xsmp.c
index 0238e516..6f801237 100644
--- a/src/modules/x11/module-x11-xsmp.c
+++ b/src/modules/x11/module-x11-xsmp.c
@@ -206,6 +206,19 @@ int pa__init(pa_module*m) {
if (!u->client)
goto fail;
+ /* Positive exit_idle_time is only useful when we have no session tracking
+ * capability, so we can set it to 0 now that we have detected a session.
+ * The benefit of setting exit_idle_time to 0 is that pulseaudio will exit
+ * immediately when the session ends. That in turn is useful, because some
+ * systems (those that use pam_systemd but don't use systemd for managing
+ * pulseaudio) clean $XDG_RUNTIME_DIR on logout, but fail to terminate all
+ * services that depend on the files in $XDG_RUNTIME_DIR. The directory
+ * contains our sockets, and if the sockets are removed without terminating
+ * pulseaudio, a quick relogin will likely cause trouble, because a new
+ * instance will be spawned while the old instance is still running. */
+ if (u->core->exit_idle_time > 0)
+ pa_core_set_exit_idle_time(u->core, 0);
+
pa_modargs_free(ma);
return 0;
diff --git a/src/pulsecore/core.c b/src/pulsecore/core.c
index 79abbc04..da42a13e 100644
--- a/src/pulsecore/core.c
+++ b/src/pulsecore/core.c
@@ -426,6 +426,16 @@ void pa_core_update_default_source(pa_core *core) {
pa_hook_fire(&core->hooks[PA_CORE_HOOK_DEFAULT_SOURCE_CHANGED], core->default_source);
}
+void pa_core_set_exit_idle_time(pa_core *core, int time) {
+ pa_assert(core);
+
+ if (time == core->exit_idle_time)
+ return;
+
+ pa_log_info("exit_idle_time: %i -> %i", core->exit_idle_time, time);
+ core->exit_idle_time = time;
+}
+
static void exit_callback(pa_mainloop_api *m, pa_time_event *e, const struct timeval *t, void *userdata) {
pa_core *c = userdata;
pa_assert(c->exit_event == e);
diff --git a/src/pulsecore/core.h b/src/pulsecore/core.h
index 213964ce..38622f61 100644
--- a/src/pulsecore/core.h
+++ b/src/pulsecore/core.h
@@ -258,6 +258,8 @@ void pa_core_set_configured_default_source(pa_core *core, const char *source);
void pa_core_update_default_sink(pa_core *core);
void pa_core_update_default_source(pa_core *core);
+void pa_core_set_exit_idle_time(pa_core *core, int time);
+
/* Check whether no one is connected to this core */
void pa_core_check_idle(pa_core *c);
--
2.17.1

10
default.pa-for-gdm Normal file
View File

@ -0,0 +1,10 @@
load-module module-device-restore
load-module module-card-restore
load-module module-udev-detect
load-module module-native-protocol-unix
load-module module-default-device-restore
load-module module-rescue-streams
load-module module-always-sink
load-module module-intended-roles
load-module module-suspend-on-idle
load-module module-position-event-sounds

BIN
pulseaudio-12.2.tar.xz Normal file

Binary file not shown.

View File

@ -0,0 +1 @@
809668ffc296043779c984f53461c2b3987a45b7a25eb2f0a1d11d9f23ba4055 pulseaudio-12.2.tar.xz

View File

@ -0,0 +1,48 @@
diff -up pulseaudio-8.99.2/man/pulse-daemon.conf.5.xml.in.disable_flat_volumes pulseaudio-8.99.2/man/pulse-daemon.conf.5.xml.in
--- pulseaudio-8.99.2/man/pulse-daemon.conf.5.xml.in.disable_flat_volumes 2016-05-26 23:21:17.000000000 -0500
+++ pulseaudio-8.99.2/man/pulse-daemon.conf.5.xml.in 2016-05-31 10:01:55.679976730 -0500
@@ -220,7 +220,7 @@ License along with PulseAudio; if not, s
<p><opt>flat-volumes=</opt> Enable 'flat' volumes, i.e. where
possible let the sink volume equal the maximum of the volumes of
the inputs connected to it. Takes a boolean argument, defaults
- to <opt>yes</opt>.</p>
+ to <opt>no</opt>.</p>
</option>
</section>
diff -up pulseaudio-8.99.2/src/daemon/daemon-conf.c.disable_flat_volumes pulseaudio-8.99.2/src/daemon/daemon-conf.c
--- pulseaudio-8.99.2/src/daemon/daemon-conf.c.disable_flat_volumes 2016-05-26 23:21:17.000000000 -0500
+++ pulseaudio-8.99.2/src/daemon/daemon-conf.c 2016-05-31 10:01:55.680976735 -0500
@@ -68,7 +68,7 @@ static const pa_daemon_conf default_conf
.realtime_priority = 5, /* Half of JACK's default rtprio */
.disallow_module_loading = false,
.disallow_exit = false,
- .flat_volumes = true,
+ .flat_volumes = false,
.exit_idle_time = 20,
.scache_idle_time = 20,
.script_commands = NULL,
diff -up pulseaudio-8.99.2/src/daemon/daemon.conf.in.disable_flat_volumes pulseaudio-8.99.2/src/daemon/daemon.conf.in
--- pulseaudio-8.99.2/src/daemon/daemon.conf.in.disable_flat_volumes 2016-05-31 10:01:55.680976735 -0500
+++ pulseaudio-8.99.2/src/daemon/daemon.conf.in 2016-05-31 10:02:28.048133267 -0500
@@ -57,7 +57,7 @@ ifelse(@HAVE_DBUS@, 1, [dnl
; enable-lfe-remixing = no
; lfe-crossover-freq = 0
-; flat-volumes = yes
+; flat-volumes = no
ifelse(@HAVE_SYS_RESOURCE_H@, 1, [dnl
; rlimit-fsize = -1
diff -up pulseaudio-8.99.2/src/pulsecore/core.c.disable_flat_volumes pulseaudio-8.99.2/src/pulsecore/core.c
--- pulseaudio-8.99.2/src/pulsecore/core.c.disable_flat_volumes 2016-05-26 23:21:17.000000000 -0500
+++ pulseaudio-8.99.2/src/pulsecore/core.c 2016-05-31 10:01:55.681976740 -0500
@@ -135,7 +135,7 @@ pa_core* pa_core_new(pa_mainloop_api *m,
c->exit_idle_time = -1;
c->scache_idle_time = 20;
- c->flat_volumes = true;
+ c->flat_volumes = false;
c->disallow_module_loading = false;
c->disallow_exit = false;
c->running_as_daemon = false;

View File

@ -0,0 +1,13 @@
diff -up pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in.autostart pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in
--- pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in.autostart 2015-02-12 08:10:35.000000000 -0600
+++ pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in 2015-06-22 11:24:13.561614127 -0500
@@ -17,6 +17,9 @@
set -e
+# probe to test if autospawn works, else resort to starting manually
+@PACTL_BINARY@ info > /dev/null 2>&1 || @PA_BINARY@ --start "$@"
+
if [ x"$DISPLAY" != x ] ; then
@PACTL_BINARY@ load-module module-x11-publish "display=$DISPLAY" > /dev/null

204
pulseaudio.spec Normal file
View File

@ -0,0 +1,204 @@
%undefine _strict_symbol_defs_build
%global multilib_archs x86_64 %{ix86}
%global bash_completionsdir %(pkg-config --variable=completionsdir bash-completion 2>/dev/null || echo '/etc/bash_completion.d')
Name: pulseaudio
Summary: Improved Linux Sound Server
Version: 12.2
Release: 2
License: LGPLv2+
URL: https://www.freedesktop.org/wiki/Software/PulseAudio
Source0: https://freedesktop.org/software/pulseaudio/releases/pulseaudio-%{version}.tar.xz
Source1: https://freedesktop.org/software/pulseaudio/releases/pulseaudio-%{version}.tar.xz.sha256
Source5: default.pa-for-gdm
Patch201: pulseaudio-autostart.patch
Patch202: pulseaudio-9.0-disable_flat_volumes.patch
#From: Tanu Kaskinen <tanuk@iki.fi>
Patch8: 0008-set-exit_idle_time-to-0-when-we-detect-a-session.patch
BuildRequires: automake libtool gcc-c++ bash-completion
BuildRequires: m4 libtool-ltdl-devel intltool pkgconfig doxygen xmltoman libsndfile-devel
BuildRequires: alsa-lib-devel glib2-devel gtk2-devel GConf2-devel avahi-devel check-devel
BuildRequires: libatomic_ops-static libatomic_ops-devel bluez-libs-devel sbc-devel libXt-devel
BuildRequires: xorg-x11-proto-devel libXtst-devel libXi-devel libSM-devel libX11-devel
BuildRequires: libICE-devel xcb-util-devel openssl-devel orc-devel libtdb-devel speexdsp-devel
BuildRequires: libasyncns-devel systemd-devel systemd dbus-devel libcap-devel fftw-devel
BuildRequires: webrtc-audio-processing-devel
Obsoletes: padevchooser < 1.0
Provides: %{name}-module-x11 %{name}-module-bluetooth %{name}-libs %{name}-libs-glib2 %{name}-utils %{name}-esound-compat %{name}-module-zeroconf %{name}-module-gconf %{name}-module-gsettings
Obsoletes: %{name}-module-x11 %{name}-module-bluetooth %{name}-libs %{name}-libs-glib2 %{name}-utils %{name}-esound-compat %{name}-module-zeroconf %{name}-module-gconf %{name}-module-gsettings
Requires(pre): shadow-utils
Requires: rtkit bluez >= 5.0
%description
PulseAudio is a sound server for Linux and other Unix like operating
systems. It is intended to be an improved drop-in replacement for the
Enlightened Sound Daemon (ESOUND).
%package qpaeq
Summary: Pulseaudio equalizer interface
Requires: %{name} = %{version}-%{release}
Requires: python2-qt5 dbus-python
%description qpaeq
qpaeq is a equalizer interface for pulseaudio's equalizer sinks.
%package devel
Summary: Headers and libraries for PulseAudio client development
License: LGPLv2+
Requires: %{name} = %{version}-%{release}
Provides: %{name}-libs-devel
Obsoletes: %{name}-libs-devel
%description devel
Headers and libraries for developing applications that can communicate with
a PulseAudio sound server.
%package gdm-hooks
Summary: PulseAudio GDM integration
License: LGPLv2+
Requires: gdm >= 1:2.22.0
Requires(pre): gdm
%description gdm-hooks
This package contains GDM integration hooks for the PulseAudio sound server.
%package_help
%prep
%autosetup -n %{name}-%{version} -p1
sed -i.no_consolekit -e \
's/^load-module module-console-kit/#load-module module-console-kit/' \
src/daemon/default.pa.in
NOCONFIGURE=1 ./bootstrap.sh
%build
%configure \
--disable-silent-rules --disable-rpath --with-system-user=pulse \
--with-system-group=pulse --with-access-group=pulse-access \
--disable-oss-output --disable-jack --disable-lirc \
--disable-bluez4 --enable-bluez5 --enable-gconf \
--enable-gsettings --enable-webrtc-aec --enable-tests
%make_build V=1
make doxygen
%install
%make_install
%ifarch %{multilib_archs}
pushd %{buildroot}%{_bindir}
%if "%{_libdir}" == "/usr/lib"
ln -s padsp padsp-32
%else
cp -a padsp padsp-32
sed -i -e "s|%{_libdir}/pulseaudio/libpulsedsp.so|/usr/lib/pulseaudio/libpulsedsp.so|g" padsp-32
%endif
popd
%endif
mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib/udev/rules.d
mv -fv $RPM_BUILD_ROOT/lib/udev/rules.d/90-pulseaudio.rules $RPM_BUILD_ROOT%{_prefix}/lib/udev/rules.d
install -p -m644 -D %{SOURCE5} $RPM_BUILD_ROOT%{_localstatedir}/lib/gdm/.pulse/default.pa
%delete_la
%check
%make_build check || TESTS_ERROR=$?
if [ "${TESTS_ERROR}" != "" ]; then
cat src/test-suite.log
exit $TESTS_ERROR
fi
%pre
getent group pulse-access >/dev/null || groupadd -r pulse-access
getent group pulse-rt >/dev/null || groupadd -r pulse-rt
getent group pulse >/dev/null || groupadd -f -g 171 -r pulse
if ! getent passwd pulse >/dev/null ; then
if ! getent passwd 171 >/dev/null ; then
useradd -r -u 171 -g pulse -d %{_localstatedir}/run/pulse -s /sbin/nologin -c "PulseAudio System Daemon" pulse
else
useradd -r -g pulse -d %{_localstatedir}/run/pulse -s /sbin/nologin -c "PulseAudio System Daemon" pulse
fi
fi
exit 0
%posttrans
(grep '^load-module module-cork-music-on-phone$' %{_sysconfdir}/pulse/default.pa > /dev/null && \
sed -i.rpmsave -e 's|^load-module module-cork-music-on-phone$|load-module module-role-cork|' \
%{_sysconfdir}/pulse/default.pa
) ||:
%ldconfig_scriptlets
%files
%defattr(-,root,root)
%license LICENSE GPL LGPL
%config(noreplace) %{_sysconfdir}/pulse/daemon.conf
%config(noreplace) %{_sysconfdir}/pulse/*.pa
%config(noreplace) %{_sysconfdir}/pulse/client.conf
%{_sysconfdir}/dbus-1/system.d/pulseaudio-system.conf
%{_sysconfdir}/xdg/autostart/pulseaudio.desktop
%{bash_completionsdir}/*
%{_userunitdir}/pulseaudio.*
%{_bindir}/esdcompat
%{_bindir}/pulseaudio
%{_bindir}/start-pulseaudio-x11
%{_bindir}/pacat
%{_bindir}/pacmd
%{_bindir}/pactl
%{_bindir}/paplay
%{_bindir}/parec
%{_bindir}/pamon
%{_bindir}/parecord
%{_bindir}/pax11publish
%{_bindir}/padsp
%{_bindir}/pasuspender
%ifarch %{multilib_archs}
%{_bindir}/padsp-32
%endif
%{_libdir}/*.so.*
%{_libdir}/pulseaudio/*.so
%{_libdir}/pulse-%{version}/modules/*.so
%exclude %{_libdir}/pulse-%{version}/modules/module-equalizer-sink.so
%exclude %{_libdir}/pulse-%{version}/modules/module-detect.so
%{_prefix}/lib/udev/rules.d/90-pulseaudio.rules
%{_libexecdir}/pulse/*-helper
%{_datadir}/locale/*
%{_datadir}/pulseaudio/alsa-mixer/*/
%{_datadir}/zsh/site-functions/_pulseaudio
%{_datadir}/GConf/gsettings/pulseaudio.convert
%files qpaeq
%defattr(-,root,root)
%{_bindir}/qpaeq
%{_libdir}/pulse-%{version}/modules/module-equalizer-sink.so
%files devel
%defattr(-,root,root)
%{_includedir}/pulse/
%{_libdir}/*.so
%{_libdir}/pkgconfig/*.pc
%{_datadir}/vala/vapi/*
%{_libdir}/cmake/PulseAudio/
%files gdm-hooks
%attr(0600,gdm,gdm) %{_localstatedir}/lib/gdm/.pulse/default.pa
%files help
%defattr(-,root,root)
%doc README doxygen/html
%{_mandir}/man*/*
%{_datadir}/glib-2.0/schemas/org.freedesktop.pulseaudio.gschema.xml
%changelog
* Mon Sep 16 2019 openEuler Buildteam <buildteam@openeuler.org> - 12.2-2
- Package init