如何通过蓝牙连接 LG C2 电视和 Ubuntu(音频)?

如何通过蓝牙连接 LG C2 电视和 Ubuntu(音频)?

我尝试将我的 Ubuntu 23.10 与 LG C2 电视连接起来,然后将声音从 LG 输出到 Ubuntu;同样的方法也可以在我的 iPhone 上正常使用,然后 iPhone 会通过我连接的 Ubuntu 扬声器播放一些音乐。我使用bluetoothctl

devices Paired
Device 20:28:BC:81:F8:D9 [LG] webOS TV OLED55C22LB
connect 20:28:BC:81:F8:D9
Attempting to connect to 20:28:BC:81:F8:D9
[CHG] Device 20:28:BC:81:F8:D9 Connected: yes
Connection successful
[CHG] Device 20:28:BC:81:F8:D9 ServicesResolved: yes

但我在 LG 的“蓝牙设备”菜单中看不到我的 Ubuntu 作为扬声器。
我应该怎么做才能解决这个问题?

实际上,为了让 iPhone 输出音频到蓝牙,我必须首先指定蓝牙连接的目标(即计算机)是一个扬声器。

附言:我使用 pipewire、pipewire-pulse 和 wireplumber,效果很好。

info 20:28:BC:81:F8:D9
Device 20:28:BC:81:F8:D9 (public)
        Name: LG TV[[LG] webOS TV OLED55C22LB
        Alias: LG TV[[LG] webOS TV OLED55C22LB
        Class: 0x0008243c (533564)
        Icon: audio-card
        Paired: yes
        Bonded: yes
        Trusted: yes
        Blocked: no
        Connected: yes
        LegacyPairing: no
        UUID: Audio Source              (0000110a-0000-1000-8000-00805f9b34fb)
        UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: LG Electronics            (0000feb9-0000-1000-8000-00805f9b34fb)
        Modalias: bluetooth:v0046p1200d1436
        ManufacturerData Key: 0x00c4 (196)
        ManufacturerData Value:
  02 34 15 13 17 fd 80                             .4.....

答案1

我们可以手动设置设备类别:

  1. 将以下内容粘贴到/etc/systemd/system/bluetooth-class-askubuntu-1504191-1004020.service

    [Unit]
    Description=Set Bluetooth device class to be a speaker
    After=bluetooth.service
    
    [Service]
    # bluetooth.service reports ready before it sets the wrong class, so wait.
    ExecStartPre=/bin/sleep 5
    ExecStart=/bin/hciconfig hci0 class 0x240414
    Type=oneshot
    
    [Install]
    WantedBy=bluetooth.service
    
  2. sudo systemctl enable --now bluetooth-class-askubuntu-1504191-1004020.service

要是我们检查新的设备类别,我们将看到这意味着它的服务类别是渲染和音频,它的主要设备类别是音频/视频,它的次要服务类别是扬声器。我从我的 Logitech 蓝牙扬声器中提取了这些数字,因此您的计算机会假装是相同的。

正常设置是0x7C010C,这意味着其服务类别为渲染、捕获、对象传输、音频和电话,其主要设备类别为计算机,其次要服务类别为笔记本电脑。您的 LG 电视将跳过计算机类的设备,仅显示扬声器类的设备:

实际上,大多数蓝牙客户端会分两个步骤扫描周围环境:首先,它们会查找周围的所有蓝牙设备,然后找出它们的“类别”。您可以在 Linux 上使用 hcitool scan 命令执行此操作。然后,它们使用 SDP 检查给定类别中的设备是否提供它们想要的服务类型。

这意味着如果主机上运行着特定的服务,比如“PAN”或“OBEX Obect Push”等,则需要正确设置 hcid.conf 的“class”参数:一般来说,寻找“网络接入点”等服务的设备只会在其主要服务类别中包含“网络”的设备上扫描此服务。

设置不起作用Class = 0x240414/etc/bluetooth/main.conf因为它没有设置所有位。设备在关注的程度上有所不同。Android 根本不关心,电视可能需要正确设置部分或全部位。当我编辑该文件时,只有主要/次要部分得到了0x0414尊重,这仅仅是在我禁用了 bluetooth.service 命令行参数中的所有配置文件(它们也会将自己的位添加到类中)之后。bluetoothd不支持设置服务类0x24,因为它struct mgmt_cp_set_dev_class不包含该变量。

相关内容