بلوتوث در Gentoo — BlueZ، bluetoothctl و اتصال دستگاهها
آموزش کامل بلوتوث در Gentoo: نصب BlueZ و Blueman، پیکربندی کرنل، راهاندازی سرویس، اتصال دستگاه با bluetoothctl و رفع خطاهای رایج صدا و جفتشدن.
بلوتوث در Gentoo توسط پشته BlueZ پشتیبانی میشود؛ مجموعهای از daemon، کتابخانه و ابزارهای خط فرمان که هم برای دسکتاپ و هم برای سرور کار میکند. در این مستند با نصب BlueZ، پیکربندی کرنل، راهاندازی سرویس و اتصال دستگاهها (هدفون، موس، کیبورد) با bluetoothctl آشنا میشویم. برای رابط گرافیکی هم Blueman را معرفی میکنیم.
پیشنیازها: پیکربندی کرنل
برای کار بلوتوث، کرنل باید از پروتکلهای BT، HCI و پروفایلهای RFCOMM/HIDP پشتیبانی کند. اگر از Distribution Kernel استفاده میکنید، بیشتر اینها فعالاند. در Manual Kernel باید این گزینهها را در make menuconfig فعال کنید:
Networking support --->
<*> Bluetooth subsystem support --->
<*> RFCOMM protocol support
<*> BNEP protocol support
<*> HIDP protocol support
Bluetooth device drivers --->
<*> HCI USB driver
<*> HCI UART driver
<*> HCI BCM203x USB driver
<*> HCI BPA10x USB driverدر کرنلهای مدرن، درایور USB بهصورت ماژول btusb ساخته میشود. بررسی کنید:
lsmod | grep bluetooth
# خروجی:
# bluetooth 614400 12 btrtl,btmtk,btintel,btbcm,bnep,btusb
# ecdh_generic 16384 1 bluetooth
# crc16 16384 2 bluetooth,ext4
# مشاهده دستگاه HCI
hciconfig -a
# خروجی:
# hci0: Type: Primary Bus: USB
# BD Address: 00:1A:7D:DA:71:13 ACL MTU: 310:10 SCO MTU: 64:8
# UP RUNNING PSCAN ISCAN
# RX bytes:1498 acl:0 sco:0 events:43 errors:0
# TX bytes:945 acl:0 sco:0 commands:43 errors:0اگر hciconfig خروجی نداد
دستور hciconfig از بسته net-wireless/bluez-hcidump میآید. در نسخههای جدید BlueZ پیشنهاد میشود از bluetoothctl و hcitool استفاده کنید. اگر دستگاه HCI نمایش داده نمیشود، بررسی کنید که ماژول btusb بارگذاری شده و دستگاه USB شناسایی شده است: lsusb | grep -i bluetooth.
نصب BlueZ
بسته اصلی net-wireless/bluez است. برای مدیریت گرافیکی، net-wireless/blueman را اضافه کنید:
# نصب BlueZ
emerge --ask net-wireless/bluez
# خروجی:
# [ebuild N ] net-wireless/bluez-5.79 USE="... -test"
# نصب رابط گرافیکی Blueman (اختیاری)
emerge --ask net-wireless/blueman
# [ebuild N ] net-wireless/blueman-2.4.4
# ابزارهای کمکی (اختیاری)
emerge --ask net-wireless/bluez-toolsبرای پخش صدا از طریق هدفون بلوتوث، به PipeWire نیاز دارید که بهصورت خودکار پروفایلهای A2DP و HSP/HFP را مدیریت میکند.
فعالسازی سرویس
در OpenRC:
# افزودن به runlevel پیشفرض
rc-update add bluetooth default
# خروجی:
# * service bluetooth added to runlevel default
# شروع سرویس
rc-service bluetooth start
# * Starting bluetooth ...
# بررسی وضعیت
rc-service bluetooth status
# * status: startedدر systemd:
systemctl enable bluetooth
# Created symlink /etc/systemd/system/bluetooth.target.wants/bluetooth.service → ...
systemctl start bluetooth
systemctl status bluetooth
# Active: active (running)ماژول btusb و rfkill
اگر دستگاه شناسایی نمیشود، مطمئن شوید ماژول btusb بارگذاری شده است: modprobe btusb. همچنین برخی لپتاپها بلوتوث را با rfkill خاموش میکنند — بررسی کنید: rfkill list و در صورت نیاز rfkill unblock bluetooth.
اتصال دستگاه با bluetoothctl
bluetoothctl ابزار تعاملی خط فرمان است که برای جفتشدن و اتصال دستگاهها استفاده میشود:
bluetoothctl
# [bluetooth]#در محیط تعاملی، این دنباله را اجرا کنید:
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# agent on
Agent registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:1A:7D:DA:71:13 Discovering: yes
[NEW] Device AA:BB:CC:DD:EE:FF WH-1000XM5
[NEW] Device 11:22:33:44:55:66 MX Master 3S
[bluetooth]# pair AA:BB:CC:DD:EE:FF
Attempting to pair with AA:BB:CC:DD:EE:FF
[CHG] Device AA:BB:CC:DD:EE:FF Connected: yes
Request confirmation
[agent] Confirm passkey 123456 (yes/no): yes
[CHG] Device AA:BB:CC:DD:EE:FF Paired: yes
[bluetooth]# trust AA:BB:CC:DD:EE:FF
[CHG] Device AA:BB:CC:DD:EE:FF Trusted: yes
Changing AA:BB:CC:DD:EE:FF trust succeeded
[bluetooth]# connect AA:BB:CC:DD:EE:FF
Attempting to connect to AA:BB:CC:DD:EE:FF
[CHG] Device AA:BB:CC:DD:EE:FF Connected: yes
Connection successful
[bluetooth]# quit| دستور | کاربرد |
|---|---|
power on | روشنکردن آداپتور |
agent on | فعالکردن agent احراز هویت |
scan on | شروع جستجوی دستگاهها |
pair ADDR | جفتشدن با دستگاه |
trust ADDR | اعتماد به دستگاه (اتصال خودکار بعدی) |
connect ADDR | اتصال به دستگاه جفتشده |
disconnect ADDR | قطع اتصال |
remove ADDR | حذف دستگاه از لیست جفتشدهها |
info ADDR | نمایش اطلاعات دستگاه |
devices | لیست دستگاههای جفتشده |
دستگاهی که از حافظه پاک شده است
اگر دستگاه قبلاً جفت شده اما حالا وصل نمیشود، ابتدا آن را remove کنید و دوباره pair کنید. دستگاهها گاهی پس از تغییر آداپتور یا فلش کردن سیستم، نیاز به جفتشدن دوباره دارند.
مدیریت با Blueman (رابط گرافیکی)
اگر blueman نصب شده باشد، یک آیکون بلوتوث در سیستمترای دسکتاپ (GNOME، KDE، XFCE) ظاهر میشود. با کلیک روی آن میتوانید دستگاهها را جستجو، جفت و وصل کنید. Blueman در پسزمینه از همان bluetoothctl و BlueZ API استفاده میکند.
# اجرای applet بلوتوث (اگر خودکار شروع نشد)
blueman-applet &
# اجرای مدیر دستگاهها
blueman-managerصدا از طریق بلوتوث
پخش صدا از طریق هدفون یا اسپیکر بلوتوث بهطور خودکار توسط PipeWire انجام میشود؛ نیازی به نصب بستهٔ جداگانه نیست. پس از اتصال هدفون، در pavucontrol یا تنظیمات صوتی دسکتاپ، دستگاه بلوتوث بهعنوان خروجی جدید ظاهر میشود.
پروفایل A2DP در برابر HSP/HFP
A2DP کیفیت بالاتر اما یکطرفه (فقط پخش) دارد. HSP/HFP کیفیت پایینتر اما دوطرفه (میکروفون) دارد. برای موسیقی از A2DP و برای تماس از HFP استفاده کنید. PipeWire بهطور خودکار بر اساس نیاز برنامه پروفایل را تغییر میدهد.
خطاهای رایج
۱. دستگاه جفت شده اما صدایی نمیآید
Device connected, but no audio outputدلیل: PipeWire در حال اجرا نیست یا کاربر در گروههای لازم نیست. راهحل:
# بررسی اجرای PipeWire
pgrep -a pipewire
# باید خروجی داشته باشد
# بررسی عضویت در گروهها
groups
# باید شامل audio و video باشد
# افزودن کاربر به گروهها (در صورت نیاز)
gpasswd -a ali audio
gpasswd -a ali video
# سپس خروج و ورود مجدد
# بررسی دستگاه خروجی
wpctl status # لیست sinkهای صوتی۲. خطای No default controller available
[bluetooth]# power on
No default controller availableدلیل: آداپتور بلوتوث شناسایی نشده یا خاموش است. راهحل:
# بررسی دستگاه USB
lsusb | grep -i bluetooth
# Bus 001 Device 004: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle
# بارگذاری ماژول
modprobe btusb
# بررسی rfkill
rfkill list bluetooth
# 1: hci0: Bluetooth
# Soft blocked: yes
rfkill unblock bluetooth
# بررسی dmesg
dmesg | grep -i bluetooth
# [ 12.345] bluetooth: hci0: RTL: examining hci_ver=08 hci_rev=000b lmp_ver=08۳. جفتشدن شکست میخورد (همراه با passkey)
Pairing failed: org.bluez.Error.AuthenticationFailedدلیل: دستگاه قبلاً در سیستم دیگری جفت شده یا PIN اشتباه است. راهحل:
# ابتدا دستگاه را از حافظه قبلی پاک کنید
bluetoothctl
[bluetooth]# remove AA:BB:CC:DD:EE:FF
# ریست آداپتور
[bluetooth]# power off
[bluetooth]# power on
# دوباره جفت کنید
[bluetooth]# scan on
[bluetooth]# pair AA:BB:CC:DD:EE:FFخلاصه و مرحله بعد
بلوتوث در Gentoo با BlueZ بهسادگی راه میافتد: نصب net-wireless/bluez، فعالکردن سرویس bluetooth و سپس اتصال دستگاهها با bluetoothctl یا Blueman. برای صدا از طریق بلوتوث، PipeWire مسئولیت مدیریت پروفایلها را بر عهده دارد.
برای پیکربندی صدای سیستمی به آموزش PipeWire و برای دسکتاپهای مدرن به آموزش GNOME یا آموزش KDE مراجعه کنید. اگر دسکتاپ شما Wayland است، آموزش Wayland را هم ببینید.
این صفحه در تاریخ ۱ تیر ۱۴۰۵ بهروزرسانی شده است.