【发布时间】:2021-06-06 11:59:25
【问题描述】:
我尝试在使用蓝牙 btmgmt 实用程序连接期间使用单独的 ssp 模式。基本思路是扫描当前设备 OUI 并选择 ssp 开/关模式。但是当我将它们放入 .service 文件时,我无法从 btmgmt con 或 btmgmt info 命令中得到任何答案。我的系统是 Arch Linux arm 32 位,bluez 堆栈版本是 5.55-1。我试过了
[Unit]
Description=check Bluetooth address
[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c '/usr/bin/btmgmt info >> /usr/local/lib/mac 2>&1'
没有任何成功:它只是在输出文件中没有放任何东西。加法之类的一些技巧
User=root
Group=root
或将 ExecStart 替换为
ExecStart=/bin/bash -c 'echo -e "$(btmgmt con)" >> /usr/local/lib/mac 2>&1
什么也没做。我尝试通过将 btmgmt 内容放在不同的 bash 脚本中而不是直接从服务文件中启动它们来进行更改,即
ExecStart=/usr/local/lib/test1
无济于事。我完全糊涂了,因为:
-
这似乎不是一般的 btmgmt 问题,因为我可以从服务文件设置 ssp 模式 以非常简单的方式,只需使用
ExecStart=btmgmt 关闭
或
ExecStart=btmgmt off
即使没有完整路径。
-
似乎也不是重定向命令错误,因为如果我添加
ExecStartPre=/usr/bin/bash -c '/usr/bin/fdisk -l > /usr/local/lib/mac 2>&1'
它确实可以正常工作,并且我在文件中看到了 fdisk 信息(我使用 fdisk 是因为它需要与 btmgmt 相同的提升权限)。 此外,btmgmt info 的工作方式相同,即在输出文件中不显示任何内容。这让我觉得 btmgmt 的输出有问题。我谈论输出是因为输入参数在 btmgmt ssp on/of 命令中工作正常,并且 journalctl 和 systemct 在 btmgmt con/info 案例中没有显示任何错误,所以看起来喜欢输出成功生成,然后发送到外太空的某个地方,但我不确定。 提前感谢您的任何帮助
【问题讨论】:
-
是的,我试过
StandardOutput=file:/usr/local/lib/mac并没有帮助我,我只是忘了提及。 -
此外,我认为这根本不是重定向问题,因为我做了一些额外的检查并发现命令输出 btmgmt --help btmgmt --version重定向成功,btmgmt help 也是如此。但是包括 btmgmt 版本 在内的任何其他命令都不会产生任何输出(可能?)所以它看起来真的像 btmgmt 本身内部搞砸了。
-
我可以想象
btmgmt从未打算以这种方式使用。更好的方法可能是有一个直接与套接字对话的脚本,详见文档git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/…
标签: bluez