将 bluez btmgmt 的输出从 systemd 服务重定向到文件

问题描述 投票:0回答:3

我尝试在使用蓝牙 btmgmt 实用程序连接期间拥有单独的 ssp 模式。基本思想是扫描当前设备 OUI 并选择 ssp 开/关模式。但是当我将 btmgmt conbtmgmt info 命令放入 .service 文件时,我无法从它们中得到任何答案。我的系统是Arch Linux arm 32位,bluez stack版本是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

无济于事。我完全困惑了,因为:

  1. 这似乎不是一般的 btmgmt 问题,因为我可以从服务文件设置 ssp 模式 以非常简单的方式,只需使用

    ExecStart=btmgmt 关闭

ExecStart=btmgmt off

即使没有完整路径。

  1. 它似乎也没有重定向命令错误,因为如果我添加

    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 命令中工作正常,并且 journalctlsystemct 在 btmgmt con/info 情况下没有显示任何错误,所以它似乎喜欢成功生成输出,然后发送到某个地方外太空,但我不完全确定。 感谢您提前提供帮助

bluez
3个回答
2
投票

好吧,我声明:

btmgmt
非常适合以任何方式用于输出,但他们尝试制作无数种输出变体,这些变体指向准确的结果应该是:bug被埋藏在bt_shell_printf深处的某个地方 结构数据。我还没有准备好运行所有令人厌恶的记录代码(我的意思是完全没有注释或或多或少令人满意的人),所以我最终得到了一个小版本的实用程序,在输出中降级为简单的
fprintf
,只留下我需要的命令:con、ssp、power并简化,直到仅打印当前设置info。一切工作正常,我可以使用那种
btmgmt
不仅可以使用
systemd
,而且甚至可以使用
udev
规则(当然是间接的)


2
投票

我知道这是一个老问题,但我也遇到了同样的问题,并在经过数小时的尝试后设法解决了它。

我不知道为什么这对

btmgmt
来说如此困难,但解决方法如下:

[Unit]
After=bluetooth.service
Description=Bluetooth service

[Service]
ExecStart=<your-process>
Group=root
StandardInput=tty
TTYPath=/dev/tty2
TTYReset=yes
TTYVHangup=yes
Type=simple
User=root

基本上,通过占用 TTY,

btmgmt
会认为它正在交互式终端中运行,并会照常输出。

希望这可以拯救我所经历的地狱!


0
投票

使用

script
也可能是伪造 TTY 的有效选项。

© www.soinside.com 2019 - 2024. All rights reserved.