我有各种蓝牙耳机,当我在 Android 和 ChromeOS 上使用这些耳机时,我可以在通话和视频聊天中获得不错的双向音频质量。
不幸的是,当我在我的 Arch Linux 笔记本电脑上使用它们时(使用 PulseAudio 13.99.2+13+g7f4d7fcf5-1、bluez 5.55-1 和 pulseaudio-modules-bt 1.4-3),我有一个选择(在pavucontrol配置面板下,或使用pactl set-card-profile):我可以使用 A2DP 和精选的编解码器(包括 SBC、AptX 和 AAC)启用高质量声音,或者我可以使用 HSP/HSF 而不是 A2DP 启用麦克风。使用 HSP/HSF 配置文件,麦克风“工作”,因为在 PulseAudio 中存在带有源和接收器的双向音频,但音质非常糟糕,以至于很难理解人们所说的话。
我的问题是:
当 Android 或 ChromeOS 在启用麦克风的情况下获得不错的音质时,实际发生了什么?是否可以在 HSP/HSF 模式下使用合适的编解码器?是否可以将麦克风与 A2DP 一起使用?或者还有其他蓝牙模式吗?
在pulseaudio-module-bt网站上,除 LDAC 之外的所有编解码器似乎都支持解码和编码,但我如何实际使用解码功能?这仅用于将我的笔记本电脑用作另一台设备的虚拟耳机,还是有办法将这些编解码器用于蓝牙耳机的麦克风?
我可以采取哪些具体步骤来让我的耳机在双向通话中音质更好?或者失败了,即使麦克风听起来很糟糕,我至少可以在不完全禁用麦克风的情况下使扬声器听起来不错吗?
更新
好吧,我不完全理解这一点,但似乎良好的音质至少需要 HFP 1.6,而 bluez 目前不支持 HFP,因为这样做需要破坏与oFono 的向后兼容性,这已成为一个有争议的问题。
在解决这个问题之前,我通过购买 Avantree DG80 蓝牙音频加密狗解决了这个问题。它看起来像 Linux 中的普通 USB 音频设备,但与我的耳机配对。音质不如 A2DP,但明显好于我从 bluez/PulseAudio 中得到的。通过在 PulseAudio 中的立体声和立体声 + 单声道输入之间切换,或者通过双击蓝牙适配器正面的开关,我还可以在 A2DP 和 HSP/HSF 模式之间切换。
我在 arch linux 上使用 openssh7.5p1 和 gnupg 2.1.21(这些是 arch 附带的默认版本)。我想gpg-agent用作 ssh 代理。我把以下内容放在我的~/.gnupg/gpg-agent.conf:
pinentry-program /usr/bin/pinentry-qt
enable-ssh-support
Run Code Online (Sandbox Code Playgroud)
Arch 自动从 systemd 启动一个 gpg-agent,所以我设置
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gnupg/S.gpg-agent.ssh"
Run Code Online (Sandbox Code Playgroud)
当我运行时ssh-add -l,它不报告任何身份并ps报告gpg-agent --supervised我所期望的过程。
不幸的是,当我运行时ssh-add,无论是什么键类型,它都不起作用。这是我如何尝试 dsa 的示例:
$ ssh-keygen -f testkey -t dsa -N ''
Generating public/private dsa key pair.
Your identification has been saved in testkey.
Your public key has been saved in testkey.pub.
$ ssh-add testkey
Could not add identity "testkey": agent refused operation
Run Code Online (Sandbox Code Playgroud)
所有其他 …
我正在编写一个应用程序,它维护一个加密数据库,其中包含非常敏感的信息,包括加密密钥和密码。应用程序对使用 memlock、阻止 ptrace、防止 coredumps 等感到偏执,但有一个命令让数据库所有者编辑数据库的内容。此命令以人类可读的 ASCII 格式将整个数据库写入一个临时文件,并让用户对其进行编辑。具体来说,它在新创建的目录中创建一个新文件/tmp/XXXXXXXX/(其中 /tmp 是理想的内存文件系统),然后在该文件上运行用户首选的编辑器。当编辑器退出时,应用程序解析文件内容并/tmp/XXXXXXXX/在最终删除目录之前粉碎文件和其他任何内容。
不幸的是,这种策略不适用于任何 vi 变体,因为编辑器最终会将文件副本写入 /var/tmp/vi.recover,即使在 vi 删除它们之后,它们也可能会保留在磁盘上。(数据包含高价值的私钥,很容易搜索整个原始分区。)我正在寻找一种通用方法来抑制这些恢复文件,或者至少将它们移动到/tmp/XXXXXXXX/.
我的理想解决方案适用于大多数 vi 变体,但我也很高兴解析EDITOR环境变量并为每个编辑器做一些不同的事情。因此,如果您有一个适用于 vim 而不适用于其他人的解决方案,那至少是一个好的开始。(我已经使用特殊情况 vim 重新打开编辑器到解析错误的确切列号,而其他 vi 变体只能打开到适当的行。)
因为这是一个分发给其他人的应用程序,我不能做的一件事就是通过编辑人们的 .exrc 或 .vimrc 文件来解决问题。在绝对紧要关头,我想我可以在执行编辑器之前更改 HOME 环境变量并创建一个临时 .vimrc 将用户的真实版本与一些恢复抑制命令合并。但是,我更喜欢命令行或注释解决方案。
我能得出的最简单的工作示例是分享我为 emacs 所做的事情,即在文件末尾附加以下注释:
# Local Variables:
# make-backup-files: nil
# auto-save-default: nil
# End:
Run Code Online (Sandbox Code Playgroud)
尽管最简单的是命令行选项,但如果某些等效注释适用于 vim 或任何其他 vi 变体,那也很棒。
更新:
在对 strace 进行了一些实验后,似乎以下命令可以为 vim 做我想要的:
vim -n -c 'set viminfo=' /tmp/XXX/secret.ini
Run Code Online (Sandbox Code Playgroud)
但是,它不适用于--cmd,这是建议的选项,但仅适用于-c。此外,我真的不明白是什么-n …
arch-linux ×1
bluetooth ×1
gpg-agent ×1
linux ×1
nvi ×1
openssh ×1
pulseaudio ×1
ssh-agent ×1
vi ×1
vim ×1