我今天安装了 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
服务使其运行起来。
创建一个名为以下内容的配置文件
/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
设置文件的权限:
sudo chmod a+x /etc/systemd/system/urserver.service
重新加载
systemd
守护进程:sudo systemctl daemon-reload
启动实际服务:
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