LINUX.ORG.RU

Не выходит каменный PipeWire

 , , ,


1

2

Дело происходит в Devuan (Ceres) c KDE Plasma (X11). В попытках перейти с PulseAudio на PipeWire я сломал и то и другое. Что-то так наделал, что переустановкой PulseAudio звука тоже нет. Но хочется же PipeWire! Переустановил.

Установлены:

gstreamer1.0-pipewire
libkpipewire5
libkpipewiredmabuf5
libkpipewirerecord5
libpipewire-0.3-0
libpipewire-0.3-common
libpipewire-0.3-modules
libpipewire-0.3-modules-x11
pipewire
pipewire-alsa
pipewire-audio
pipewire-bin
pipewire-jack
pipewire-pulse
pipewire-v4l2
qml-module-org-kde-pipewire
vlc-plugin-pipewire

~ $ pipewire

[E][19002.128612] mod.protocol-native | [module-protocol-:  716 init_socket_name()] server 0x6216eb1f3870: name pipewire-0 is not an absolute path and no runtime dir found. Set one of PIPEWIRE_RUNTIME_DIR, XDG_RUNTIME_DIR or USERPROFILE in the environment
[E][19002.128803] pw.conf      | [          conf.c:  573 load_module()] 0x6216eb1cb650: could not load mandatory module "libpipewire-module-protocol-native": No such file or directory
[E][19002.128990] default      | [      pipewire.c:  105 main()] failed to create context: No such file or directory
★★★★★

Почему бы не поставить нормальный дистрибутив и перестать пердолиться с проблемами, которые везде уже давно решены?

MoldAndLimeHoney
()
Ответ на: комментарий от krasnh

Спасибо, но не помогло. Раньше не обращал внимания, но в ~/.xsession-errors есть такое:

QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-dataman'
dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Это потому что нужно пользоваться вменяемыми системами инициализации (которые управляют и системными демонами, и пользовательскими), а не импотентными огрызками на баше :>

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

Не все же знают, что Devuan, это Debian отказавшийся от systemd. Даже от ЛОРовцев с 5-ти звездами, это таинство скрыто. :)

krasnh ★★★★
()
Последнее исправление: krasnh (всего исправлений: 1)
Ответ на: комментарий от eternal_sorrow

какой то васянский скрипт

Наверное. Переустановка systemctl удалила пакет systemctl-service-shim.
Но ошибка всё та же.

dataman ★★★★★
() автор топика

Какой init у системы?

QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-dataman'

Pipewire требует создания переменной XDG_RUNTIME_DIR для корректной работы.

Можно инструкцию у Void'а подсмотреть.

Dr64h ★★★
()

Не осилил двое суток без сна – пойду спать. Завтра продолжу.
Всем спасибо за попытки!

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

У меня на Gentoo с OpenRC работает.

ps aux | grep pipewire
den       3680  0.0  0.0 263624 18208 ?        Sl   08:02   0:24 /usr/bin/pipewire
den       3682  0.1  0.0 116176 29664 ?        Sl   08:02   0:48 /usr/bin/pipewire -c pipewire-pulse.conf
den      24210  0.0  0.0   6472  2304 pts/1    S+   19:12   0:00 grep --colour=auto pipewire

Скрипт gentoo-pipewire-launcher

cat /usr/bin/gentoo-pipewire-launcher 
#!/bin/sh

# PipeWire launcher script for XDG compliant desktops on OpenRC.
#
# systemd users are very _STRONGLY_ advised to use the much
# more reliable and predictable user units instead.

# WARNING: This script assumes being run inside XDG compliant session,
# which means D-Bus session instance is expected to be correctly set up
# prior to this script starting. If that is not true, things may break!

DATE_FORMAT='+%Y-%m-%dT%H:%M:%S%Z'

CONF="${XDG_CONFIG_HOME:-${HOME}/.config}/gentoo-pipewire-launcher.conf"
if [ -f "${CONF}" ]
then
    . "${CONF}"
else
    GENTOO_PIPEWIRE_LOG='/dev/null'
    GENTOO_PIPEWIRE_PULSE_LOG='/dev/null'
    GENTOO_WIREPLUMBER_LOG='/dev/null'
fi
for L in \
    "${GENTOO_PIPEWIRE_LOG}" \
    "${GENTOO_PIPEWIRE_PULSE_LOG}" \
    "${GENTOO_WIREPLUMBER_LOG}"
do
   if [ ! -e "${L}" ]
   then
       touch "${L}"
   fi
done

restart () {
    echo "Terminating PipeWire processes ..."
    pkill -u "${USER}" -x pipewire\|wireplumber 1>/dev/null 2>&1

    # pidwait was renamed to pwait w/ procps-4 (bug #914030)
    if command -v pidwait > /dev/null ; then
        pidwait -u "${USER}" -x pipewire\|wireplumber
    elif command -v pwait > /dev/null ; then
        pwait -u "${USER}" -x pipewire\|wireplumber
    fi

    echo "PipeWire terminated."
}

if [ "${#}" -gt 0 ]
then
    if [ "${1}" = 'restart' ]
    then
	restart
    else
        echo "Unrecognised argument." >&2
        echo "Usage: gentoo-pipewire-launcher [restart]" >&2
	exit 1
    fi
fi

if pgrep -u "${USER}" -x pipewire\|wireplumber 1>/dev/null 2>&1
then
    echo "PipeWire already running, exiting." >&2
    echo "(Use 'gentoo-pipewire-launcher restart' to restart PipeWire and WirePlumber.)" >&2
    exit 1
fi

# The core daemon which by itself does probably nothing.
echo "[$(/bin/date ${DATE_FORMAT})] Starting PipeWire." 1>>"${GENTOO_PIPEWIRE_LOG}"
/usr/bin/pipewire 1>>"${GENTOO_PIPEWIRE_LOG}" 2>&1 &

# The so called pipewire-pulse daemon used for PulseAudio compatibility.
# Commenting this out will stop the PA proxying daemon from starting,
# however ALSA (with pipewire-alsa), JACK (with jack-sdk) and PW API using
# clients will still have access to audio and may end up clashing with
# non-PW apps over HW control (most notably, /usr/bin/pulseaudio daemon).
echo "[$(/bin/date ${DATE_FORMAT})] Starting PipeWire-Pulse." 1>>"${GENTOO_PIPEWIRE_PULSE_LOG}"
/usr/bin/pipewire -c pipewire-pulse.conf 1>>"${GENTOO_PIPEWIRE_PULSE_LOG}" 2>&1 &

# Hack for bug #822498
sleep 1

# Finally a session manager is required for PipeWire to do anything.
echo "[$(/bin/date ${DATE_FORMAT})] Starting WirePlumber." 1>>"${GENTOO_WIREPLUMBER_LOG}"
exec /usr/bin/wireplumber 1>>"${GENTOO_WIREPLUMBER_LOG}" 2>&1

И инструкция по настройке: https://wiki.gentoo.org/wiki/PipeWire

LongLiveUbuntu ★★★★★
()

пайпвари нужен еще и менеджер сессий, сейчас дефолт - wireplumber.

как собирать ее в дистре без systemd, можно посмотреть например в alpine: https://git.alpinelinux.org/aports/tree/community/pipewire/APKBUILD

XDG_RUNTIME_DIR можно создать хоть руками, лично я применяю для этого pam_rundir

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

Можно вручную создать.

В случае с bash, вроде как-то так:

# mkdir /run/user/$(id -u)
# chmod 700 /run/user/$(id -u)
$ echo "export XDG_RUNTIME_DIR=/run/user/$(id -u)" >> ~/.bashrc
$ source ~/.bashrc

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

Devuan an pipewire

первый пост по ссылке

Да уж. Наглядная демонстрация убогости дедовских недоинитов

hateWin ★☆
()

Поставь wireplumber. Или pipewire-media-session. Без понятия что на небираном дедулике лучше фунциклирует. У меня - второй

hargard ★★
()

@t184256 такой @t184256, на своей волне. ) Помнится, кто-то в шутку сказал поставить его в админы, типа вот началась бы жизнь у ЛОРовцев - шаг вправо шаг влево …, прыжок на месте… :)

krasnh ★★★★
()

В Void с XFCE так:

1) установить
pipewire
wireplumber
wireplumber-elogind # ?

2) 
mkdir -p /etc/pipewire/pipewire.conf.d
ln -s /usr/share/examples/wireplumber/10-wireplumber.conf /etc/pipewire/pipewire.conf.d/
ln -s /usr/share/examples/pipewire/20-pipewire-pulse.conf /etc/pipewire/pipewire.conf.d/
ln -s /usr/share/applications/pipewire.desktop /etc/xdg/autostart/

3)
выход, вход или перезагрузиться
XDG_RUNTIME_DIR не настраивал
Должно подойти для Devuan Daedalus c pipewire >= 1.0

superuser ★★★★☆
()
Последнее исправление: superuser (всего исправлений: 1)

добавь в профиль оболочки, заработало?

export XDG_RUNTIME_DIR="/tmp/$(id -u)-xdg_runtime_dir"
[ -d "${XDG_RUNTIME_DIR}" ] || (
        mkdir -p "${XDG_RUNTIME_DIR}"
        chmod 0700 "${XDG_RUNTIME_DIR}"
)
HomerSexual
()
Последнее исправление: HomerSexual (всего исправлений: 1)
Ответ на: комментарий от superuser

с войдвики

PipeWire also requires the XDG_RUNTIME_DIR environment variable to be defined in your environment to work properly.

никаких ссылок не делал, все и так работает

HomerSexual
()
Последнее исправление: HomerSexual (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.