PipeWire در Gentoo — سرور صدا و تصویر مدرن
آموزش کامل PipeWire در Gentoo: نصب و WirePlumber، فعالسازی بهجای PulseAudio، اجرای user service، پشتیبانی از بلوتوث و Wayland، pavucontrol و رفع خطاهای رایج.
PipeWire سرور مدرن صدا و تصویر در لینوکس است که جایگزین PulseAudio و JACK شده است. این پروژه با فراهمکردن API یکپارچه، هم صدا (low-latency و pro-audio) و هم اشتراکگذاری صفحه (screen capture در Wayland) را مدیریت میکند. در Gentoo، PipeWire بههمراه WirePlumber (مدیر نشست) به استاندارد دسکتاپ تبدیل شده و در GNOME و KDE بهطور پیشفرض استفاده میشود.
PipeWire چیست؟
PipeWire daemon سبکی است که سه کار اصلی انجام میدهد:
- مدیریت جریان صوتی بین برنامهها و سختافزار (بهجای PulseAudio)
- مدیریت اتصالات حرفهای با تأخیر پایین (بهجای JACK)
- مدیریت video capture و screen sharing در Wayland (بهجای pulseaudio-alsa و راهکارهای ناقص دیگر)
WirePlumber مدیر نشست (session manager) PipeWire است که تصمیم میگیرد کدام خروجی به کدام ورودی وصل شود، دستگاههای بلوتوث را مدیریت میکند و رویدادهای سختافزاری را بهروز نگه میدارد. PipeWire بدون session manager عملاً کاربردی ندارد.
نصب
# نصب PipeWire و WirePlumber
emerge --ask media-video/pipewire media-video/wireplumber
# خروجی:
# [ebuild N ] media-video/pipewire-1.2.7 USE="... bluetooth ffmpeg ..."
# [ebuild N ] media-video/wireplumber-0.5.3
# ابزارهای کاربردی
emerge --ask media-sound/pavucontrol # کنترل حجم GUI
emerge --ask media-sound/pulseaudio-utils # pactl/pacmd (compatibility)USE flags مهم
| USE flag | کاربرد |
|---|---|
bluetooth | پشتیبانی از صوت بلوتوث (A2DP/HFP) — پیشنهادی |
ffmpeg | رمزگذاری/رمزگشایی رسانهای برای screen capture |
X | سازگاری با X11 (x11-bell) |
dbus | ارتباط با نشست دسکتاپ |
gstreamer | پلاگینهای GStreamer |
jack | سازگاری با JACK (libjack replacement) |
v4l | پشتیبانی از دستگاههای ویدیویی |
sound-server | فعالکردن نقش سرور صوتی (PulseAudio replacement) |
برای فعالکردن نقش کامل سرور صوتی، مطمئن شوید sound-server و bluetooth در /etc/portage/package.use فعال هستند:
# /etc/portage/package.use/pipewire
media-video/pipewire sound-server bluetooth ffmpeg X dbus
media-video/wireplumber bluetoothسپس بازسازی:
emerge --ask --changed-use --deep @worldجایگزینی PulseAudio
PipeWire با نصب sound-server، کتابخانههای PulseAudio را بهصورت shim فراهم میکند. بسته قدیمی media-sound/pulseaudio باید حذف شود تا تداخل پیش نیاید.
اجرای سرویس (user service)
PipeWire سرویس سیستمی نیست؛ بهجای آن، بهصورت کاربر (per-user) اجرا میشود. در سیستمهای systemd از user units و در OpenRC با elogind کار میکند:
# فعالسازی بهعنوان user service در systemd
systemctl --user enable pipewire wireplumber pipewire-pulse
# Created symlink /home/ali/.config/systemd/user/default.target.wants/pipewire.service → ...
# Created symlink /home/ali/.config/systemd/user/default.target.wants/wireplumber.service → ...
# شروع سرویس
systemctl --user start pipewire wireplumber pipewire-pulse
# بررسی وضعیت
systemctl --user status pipewire
# Active: active (running)
systemctl --user status wireplumber
# Active: active (running)ورود دوباره
سرویسهای user فقط پس از ورود کاربر اجرا میشوند. اگر از طریق SSH وارد شدهاید، ممکن است XDG_RUNTIME_DIR تنظیم نباشد. برای ورود کامل از طریق display manager (مانند GDM) وارد شوید یا loginctl enable-linger ali را بزنید تا سرویس user حتی بدون نشست هم اجرا بماند.
در OpenRC با elogind، PipeWire معمولاً توسط اسکریپت نشست دسکتاپ (مثلاً startx یا display manager) راهاندازی میشود. مطمئن شوید sys-auth/elogind نصب است.
حذف PulseAudio
اگر قبلاً PulseAudio نصب بوده، باید آن را حذف کنید تا PipeWire بهطور کامل جایگزین شود:
# حذف PulseAudio
emerge --ask --depclean pulseaudio
# خروجی:
# Calculating dependencies... done!
# media-sound/pulseaudio-17.0-r1 pulled by:
# @world
# Packages removed: 1
# بازسازی وابستگیها
emerge --ask --depclean
emerge @preserved-rebuildپس از حذف، pavucontrol همچنان کار میکند زیرا PipeWire از طریق shim pipewire-pulse با API PulseAudio سازگار است.
# بررسی shim
pactl info
# Server String: /run/user/1000/pulse/native
# Library Protocol Version: 35
# Server Protocol Version: 35
# Server Name: PulseAudio (on PipeWire 1.2.7)
# Default Sample Specification: float32le ch=2 48000Hzپیکربندی و کنترل
ابزار اصلی کنترل، pavucontrol (رابط گرافیکی) و wpctl (خط فرمان WirePlumber) است:
# لیست دستگاهها و sinkهای صوتی
wpctl status
# خروجی:
# Audio
# Devices:
# 44. alsa_card.pci-0000_00_1b.0
# 45. alsa_card.usb-Focusrite_Scarlett_Solo
# Sinks:
# * 46. alsa_output.pci-0000_00_1b.0.analog-stereo
# Sources:
# * 47. alsa_input.usb-Focusrite_Scarlett_Solo
# تنظیم sink پیشفرض
wpctl set-default 46
# تغییر حجم (درصد)
wpctl set-volume 46 0.8
wpctl set-volume 46 5%+ # افزایش ۵ درصدی
wpctl set-volume 46 5%- # کاهش ۵ درصدی
# mute/unmute
wpctl set-mute 46 toggleبلوتوث و Wayland screen sharing
PipeWire بهطور خودکار صدای بلوتوث را مدیریت میکند. وقتی هدفون بلوتوث را در Bluetooth متصل میکنید، PipeWire بهطور خودکار sink بلوتوث میسازد و (با کمک WirePlumber) پروفایل A2DP یا HSP/HFP را انتخاب میکند.
برای اشتراکگذاری صفحه در Wayland، برنامههایی مانند OBS Studio، Discord یا Teams از API xdg-desktop-portal استفاده میکنند که در پسزمینه به PipeWire متصل میشود. بستههای لازم بسته به دسکتاپ:
# برای GNOME
emerge --ask gui-libs/xdg-desktop-portal-gnome
# برای KDE
emerge --ask kde-plasma/xdg-desktop-portal-kde
# برای wlroots-based (Hyprland, Sway)
emerge --ask gui-libs/xdg-desktop-portal-wlrتست خروجی صدا
برای تست سریع صدا، از speaker-test استفاده کنید:
speaker-test -c2 -twav
# خروجی: صدای "Front Left" و "Front Right" بهترتیب در هر گوشخطاهای رایج
۱. هیچ صدایی نمیآید
No audio output, but PipeWire appears to be runningراهحل:
# بررسی اجرای PipeWire
pgrep -a pipewire
pgrep -a wireplumber
# هر دو باید خروجی داشته باشند
# بررسی عضویت کاربر در گروهها
groups
# باید شامل audio و video باشد
# افزودن در صورت نیاز
gpasswd -a ali audio
gpasswd -a ali video
# سپس خروج و ورود مجدد
# بررسی sink پیشفرض
wpctl status | grep -A2 Sinks
# خطی که ستاره (*) دارد، sink پیشفرض است
# تست صدا
speaker-test -c2 -twav۲. pavucontrol خطای Connection failed میدهد
Connection to PulseAudio failed. Retry.دلیل: shim pipewire-pulse اجرا نمیشود. راهحل:
systemctl --user status pipewire-pulse
# اگر failed بود:
systemctl --user start pipewire-pulse
systemctl --user enable pipewire-pulse
# بررسی socket
ls -la /run/user/$(id -u)/pulse/
# باید native و cli در آن باشد۳. صدا کرکند و بریده میشود (stuttering)
دلیل: تأخیر (latency) تنظیم نیست یا بافر کوچک است. راهحل:
# افزایش quantum (اندازه بافر) برای برنامه
PULSE_LATENCY_MSEC=60 firefox
# یا در پیکربندی PipeWire
# /etc/pipewire/pipewire.conf.d/10-latency.conf
# context.properties = {
# default.clock.min-quantum = 1024
# default.clock.max-quantum = 2048
# }
systemctl --user restart pipewire wireplumberتداخل با ALSA
اگر media-sound/pulseaudio را کاملاً حذف نکردهاید، ممکن است برنامهها همچنان به PulseAudio قدیمی متصل شوند. با pactl info بررسی کنید که Server Name حتماً PulseAudio (on PipeWire ...) باشد.
خلاصه و مرحله بعد
PipeWire در Gentoo با media-video/pipewire و media-video/wireplumber نصب میشود، بهصورت user service اجرا میشود و PulseAudio و JACK را یکجا جایگزین میکند. مهمترین قدمها: حذف PulseAudio قدیمی، فعالکردن sound-server و bluetooth در USE flags، و راهاندازی user service با systemctl --user.
برای اتصال هدفون بلوتوث به آموزش Bluetooth و برای screen sharing در Wayland به آموزش Wayland مراجعه کنید. اگر در دسکتاپ GNOME هستید، آموزش GNOME PipeWire را بهصورت یکپارچه پوشش میدهد.
این صفحه در تاریخ ۱ تیر ۱۴۰۵ بهروزرسانی شده است.