統一遠端:藍牙:無法連線到 SDP

統一遠端:藍牙:無法連線到 SDP

我今天安裝了 Unified Remote,希望能夠將其與藍牙適配器一起使用,以透過手機控制我的電腦。但當我安裝 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 參數啟動藍牙無法解決問題。

我能做些什麼?

/編輯:我透過以 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

我結合了其他答案來使其正常工作並使其在重新啟動後持續存在。以下是讓它發揮作用的分步指南:

取消勾選「作業系統啟動時自動啟動伺服器」。統一遠端設定 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

謝謝利奧·佩德拉薩,埃薩·尼庫萊寧, 和尼克拉斯找出所有的碎片!

相關內容