统一远程:蓝牙:无法连接到 SDP

统一远程:蓝牙:无法连接到 SDP

我今天安装了 Unified Remote,希望可以将其与蓝牙适配器配合使用,从而通过手机控制 PC。但是,当我安装 Unified Remote 并加载 Web 界面时,出现了以下错误:

蓝牙:无法连接到 SDP

谷歌对这个错误没有任何帮助,所以这是我唯一的机会之一。

一些输出:

noneatme@noneatme-desktop:/etc/bluetooth$ sudo sdptool browse local
Failed to connect to SDP server on FF:FF:FF:00:00:00: Connection refused

Ubuntu 16.04

noneatme@noneatme-desktop:/etc/bluetooth$ uname -a
Linux noneatme-desktop 4.4.0-22-generic #40-Ubuntu SMP Thu May 12 22:03:46 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

noneatme@noneatme-desktop:/etc/bluetooth$ /usr/lib/bluetooth/bluetoothd -C
D-Bus setup failed: Connection ":1.129" is not allowed to own the service "org.bluez" due to security policies in the configuration file
(it works with sudo)

使用 --compat 参数启动 Bluetoothd 无法解决问题。

我能做些什么?

/编辑:我通过以 sudo 身份启动统一远程服务器解决了此问题。这真的是我唯一的选择吗?

答案1

您需要在兼容模式下运行蓝牙守护程序以提供已弃用的命令行界面。您正在运行 Bluez5,并且需要一些 Bluez4 功能。您可以通过编辑此文件来执行此操作

/etc/systemd/system/dbus-org.bluez.service 并改变这一行

ExecStart=/usr/lib/bluetooth/bluetoothd 对此

ExecStart=/usr/lib/bluetooth/bluetoothd --compat

然后像这样重新启动蓝牙

sudo systemctl daemon-reload
sudo systemctl restart bluetooth

你还必须更改权限/var/run/sdp

sudo chmod 777 /var/run/sdp

最后重启统一远程服务器

答案2

另一个解决方案:

编辑/etc/systemd/system/dbus-org.bluez.service:

ExecStart=/usr/lib/bluetooth/bluetoothd --compat
ExecStartPost=/bin/chmod 777 /var/run/sdp

因为 /var/run/sdp 的权限似乎在每次重启时都会重置。

答案3

我设法通过创建一项新systemd服务使其运行起来。

  1. 创建一个名为以下内​​容的配置文件/etc/systemd/system/urserver.service

    [Unit]
    Description=Unified Remote Server
    After=syslog.target network.target
    
    [Service]
    Environment="HOME=/opt/urserver"
    Type=forking
    PIDFile=/opt/urserver/.urserver/urserver.pid
    ExecStartPre=/bin/chmod 777 /var/run/sdp
    ExecStart=/opt/urserver/urserver-start --no-manager --no-notify
    ExecStop=/opt/urserver/urserver-stop
    
    RemainAfterExit=no
    Restart=on-failure
    RestartSec=5s
    
    [Install]
    WantedBy=default.target
    
  2. 设置文件的权限:

    sudo chmod a+x /etc/systemd/system/urserver.service
    
  3. 重新加载systemd守护进程:

    sudo systemctl daemon-reload
    
  4. 启动实际服务:

    sudo systemctl start urserver
    

您应该从统一远程设置(Web 界面)禁用“操作系统启动时自动启动服务器。”,因为systemd它将自动启动服务。systemd如果由于某种原因崩溃,还将重新启动服务。

编辑:环境和 PIDFile,感谢 Niklas

答案4

我结合了其他答案来让它工作,并让它在重启后继续存在。以下是让它工作的分步指南:

取消选中 Unified Remote 设置 GUI 中的“操作系统启动时自动启动服务器。”框。

停止服务器。你可以这样做:

    user@machine:~$ sudo killall urserver

接下来是利奥·佩德拉萨说编辑 /etc/systemd/system/dbus-org.bluez.service 并更改此行

    ExecStart=/usr/lib/bluetooth/bluetoothd 

对此

    ExecStart=/usr/lib/bluetooth/bluetoothd --compat

然后按照埃萨·尼库莱宁尼克拉斯建议并创建一个新的 systemd 服务,如下所示:

创建一个名为 /etc/systemd/system/urserver.service 的配置文件,其内容如下:

    [Unit]
    Description=Unified Remote Server
    After=syslog.target network.target

    [Service]
    Environment="HOME=/opt/urserver"
    Type=forking
    PIDFile=/opt/urserver/.urserver/urserver.pid
    ExecStartPre=/bin/chmod 777 /var/run/sdp
    ExecStart=/opt/urserver/urserver-start --no-manager --no-notify
    ExecStop=/opt/urserver/urserver-stop

    RemainAfterExit=no
    Restart=on-failure
    RestartSec=5s

    [Install]
    WantedBy=default.target

重新加载 systemd 守护进程:

    user@machine:~$ sudo systemctl daemon-reload

像这样重新启动蓝牙:

    user@machine:~$ sudo systemctl restart bluetooth

启动新服务:

    user@machine:~$ sudo systemctl start urserver

启用新服务以便它在启动时运行:

    user@machine:~$ sudo systemctl enable urserver

谢谢利奥·佩德拉萨埃萨·尼库莱宁, 和尼克拉斯弄清楚所有的碎片!

相关内容