Moving this to ports,
On Sun, Apr 26 2020, Stuart Henderson <[email protected]> wrote: > On 2020/04/26 14:29, Moises Simon wrote: >> Hi, >> >> after the mixerctl/sndioctl change in -current >> sndioctl doesn't work if mpd is playing music. >> >> Other music players like cmus work fine >> >> OpenBSD 6.7-beta (GENERIC.MP) #153: Fri Apr 24 07:15:21 MDT 2020 >> Information for inst:mpd-0.21.21 >> >> sirius$ sndioctl -v >> input[0].level=0.49 >> input[1].level=0.49 >> input[0].mute=0 >> input[1].mute=0 >> output[0].level=0.71 >> output[1].level=0.71 >> output[0].mute=0 >> output[1].mute=0 >> app/mpd0.level=1 >> sirius$ mpc play >> Héroes del Silencio - La chispa adecuada >> [playing] #18/62 3:51/5:01 (76%) >> volume:100% repeat: on random: on single: off consume: on >> sirius$ sndioctl -v >> default: can't open control device > > sndioctl first tries to connect to sndiod using ~/.sndio/cookie, > which I think in this case probably fails because mpd (running as a > different uid) has already connected to sndiod using its own cookie. > > When that fails it falls back to trying to connect to the kernel > interface (i.e. via the device node in /dev) which is no longer > permitted, triggering the "can't open control device" error. > > I'm not an mpd user but I think the fix for this situation is that mpd > needs a copy of your ~/.sndio/cookie so that both you and mpd can both > control the device. How to get there, I'm not sure, because the uid > running mpd has its home directory set as /var/empty, maybe that needs > changing to a real directory. That is something we discussed with chrisz@. One concern I had was that changing the home directory in the PLIST won't affect upgrades and more generally machines where the _mpd is present in master.passwd. And forcefully changing the home dir with usermod -d isn't nice to people who have already dealt with this problem. This is something we could document in a README, along with the special setup needed to share sndiod access. Diff below. > Or it _might_ be possible to workaround > by having mpd talk to sndiod over a TCP socket instead (like > https://undeadly.org/cgi?action=article;sid=20180410063454 but using > 127.0.0.1 instead of an external address). I'm afraid (not sure) that this won't address the cookie issue. So building up on the discussion with Christopher, here's a diff that changes _mpd's home dir to /var/spool/mpd and documents a bit what people need to do. Feedback and improvements welcome. No idea if I should leave @sample /var/spool/mpd in the PLIST, portcheck also warns about VARBASE... (Unrelated, drop the tremor FLAVOR from DESCR while here.) Index: Makefile =================================================================== RCS file: /cvs/ports/audio/mpd/Makefile,v retrieving revision 1.128 diff -u -p -r1.128 Makefile --- Makefile 20 Mar 2020 17:52:30 -0000 1.128 +++ Makefile 26 Apr 2020 18:08:32 -0000 @@ -3,6 +3,7 @@ BROKEN-hppa = no atomic ops COMMENT = Music Player Daemon VER = 0.21.21 +REVISION = 0 DISTNAME = mpd-${VER} EXTRACT_SUFX = .tar.xz CATEGORIES = audio Index: pkg/DESCR =================================================================== RCS file: /cvs/ports/audio/mpd/pkg/DESCR,v retrieving revision 1.5 diff -u -p -r1.5 DESCR --- pkg/DESCR 16 Apr 2012 09:50:17 -0000 1.5 +++ pkg/DESCR 26 Apr 2020 18:08:32 -0000 @@ -3,9 +3,3 @@ Ogg, FLAC, AAC, Mod and WAV files) and m designed for integrating a computer into a stereo system that provides control for music playback over a local network. It also makes a great desktop music player and has several frontend options. - -Flavors - -tremor: Use the tremor integer-only Vorbis decoder. This disables - the use of the FLAC codec within Ogg containers and the - network streaming functionality. Index: pkg/PLIST =================================================================== RCS file: /cvs/ports/audio/mpd/pkg/PLIST,v retrieving revision 1.13 diff -u -p -r1.13 PLIST --- pkg/PLIST 15 Aug 2019 05:44:37 -0000 1.13 +++ pkg/PLIST 26 Apr 2020 18:08:32 -0000 @@ -1,7 +1,7 @@ @comment $OpenBSD: PLIST,v 1.13 2019/08/15 05:44:37 landry Exp $ @pkgpath audio/mpd,tremor @newgroup _mpd:560 -@newuser _mpd:560:560:daemon:Music Player Daemon:/var/empty:/sbin/nologin +@newuser _mpd:560:560:daemon:Music Player Daemon:/var/spool/mpd:/sbin/nologin @extraunexec rm -rf /var/log/mpd/* @extraunexec find /var/spool/mpd \! -name playlists -mindepth 1 -exec rm -rf "{}" \; @rcscript ${RCDIR}/mpd @@ -13,6 +13,7 @@ share/doc/mpd/AUTHORS share/doc/mpd/COPYING share/doc/mpd/NEWS share/doc/mpd/README.md +share/doc/pkg-readmes/${PKGSTEM} share/examples/mpd/ share/examples/mpd/mpd.conf @sample ${SYSCONFDIR}/mpd.conf Index: pkg/README =================================================================== RCS file: pkg/README diff -N pkg/README --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ pkg/README 26 Apr 2020 18:08:32 -0000 @@ -0,0 +1,17 @@ +$OpenBSD: README.template,v 1.7 2019/05/09 17:45:05 ajacoutot Exp $ + ++------------------------------------------------------------------------------- +| Running ${PKGSTEM} on OpenBSD ++------------------------------------------------------------------------------- + +sndiod(8) concurrent access by mpd(1) and other users +===================================================== + +sndiod(8) only allows access from a single user/hostname at a time, +unless a cookie is provided. See AUTHENTICATION in sndio(7) for +more details. If you want to share sndiod(8) access with mpd(1) running +as the default _mpd user, you may copy an existing cookie in +/var/spool/mpd/.sndio/cookie. + +If you previously had mpd installed on your system, make sure the home +directory of the _mpd user is actually /var/spool/mpd. -- jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE
