把 Linux 桌面变成蓝牙音频中枢:一次意外实用的硬件整合

最近在一台 Linux 桌面电脑上安装了一块 Wi-Fi / 蓝牙一体的外置硬件。它带有外置天线,相比电脑原本内置的无线模块,信号强度、稳定性和覆盖范围都有明显提升。安装完成后,系统能够正常识别新的 Wi-Fi 和蓝牙控制器,并且可以把新的无线模块设置为默认设备使用。 一开始,这次改造的目的其实很简单:让无线网络和蓝牙连接更加稳定。尤其是蓝牙部分,原本的内置蓝牙版本较旧,连接距离和稳定性都比较有限。换成新的外置蓝牙设备之后,键盘、鼠标、手写板、耳机等设备的连接状态都有改善,桌面上的线缆也进一步减少。 但真正有意思的,是后来发现的一种使用方式:可以把 Linux 桌面电脑变成一个“蓝牙音频接收器”。 一台电脑,也可以像蓝牙音箱一样工作 在手机与电脑完成蓝牙配对之后,手机会把这台 Linux 电脑识别为一个蓝牙音频设备。也就是说,在手机上播放音乐,声音可以直接从电脑输出。 这个结构本身很简单: 手机播放音乐→ 通过蓝牙发送到 Linux 电脑→ 电脑作为音频输出设备播放声音 这样一来,电脑就不只是电脑了,它也变成了一台大型蓝牙音箱。 更有意思的是,这台用于播放音乐的手机并不是主力手机,而是一台专门用来播放音乐的备用设备。它没有承担日常通信任务,不接收电话,也不会受到短信和即时消息通知干扰。手机可以放在一边充电,专门负责播放音乐;电脑则负责实际出声。 这种分工非常舒服。手机只做音乐源,电脑只做声音出口,中间没有复杂操作,也不会被通知打断。 音量控制也变得更自然 在这个结构里,手机端的音量可以直接调到最大,然后最终音量交给电脑系统统一控制。 这有几个好处。 第一,电脑本身的音量调节更方便。桌面环境、键盘快捷键、系统音量面板都可以直接控制最终音量。 第二,音乐播放设备和声音输出设备被清楚分开。手机负责播放内容,电脑负责输出声音。手机不用频繁拿起来调整音量,只要放在那里稳定播放即可。 第三,如果电脑本身连接的是音质较好的扬声器,或者是一体机内置的高素质扬声器,那么手机端会员音质、高码率音源、客户端播放质量等差异,也更容易被听出来。 这也是这套结构的一个实际价值:电脑上不一定需要安装某个音乐软件的客户端。只要手机端已经可以播放高音质会员内容,电脑就可以作为音频出口来使用。对于某些 Linux 桌面环境来说,这反而比折腾网页版、客户端兼容性、音质限制更简单。 键盘快捷键可以反向控制手机 另一个让人意外的地方是,电脑键盘上的多媒体快捷键也可以控制手机播放。 例如: 上一曲下一曲暂停继续播放 这些操作原本是在电脑上控制本地播放器的。但在蓝牙音频连接建立后,电脑的媒体控制可以通过蓝牙协议反向传给手机。于是,虽然音乐实际是在手机上播放,但人坐在电脑前,用键盘就可以直接控制手机里的音乐。 这让整个体验变得很完整。 手机不需要放在手边,也不需要每次解锁屏幕。坐在电脑前工作、阅读、整理文件时,只要按键盘上的媒体键,就可以完成常用播放控制。 这时电脑就不只是一个被动扬声器,而是一个带控制能力的音频中枢。 甚至可以继续转发到蓝牙耳机 这个结构还可以继续扩展。 手机连接电脑,把声音传给电脑;电脑再连接一副蓝牙耳机,把声音输出到耳机。 也就是说,理论上可以形成这样的链路: 手机→ 蓝牙传给电脑→ 电脑再传给蓝牙耳机 这个链路看起来有点绕。正常情况下,手机直接连接蓝牙耳机就可以了,没有必要多经过电脑一层。 …

在 Linux/KDE 中把 Thunderbird 封装成托盘应用

Thunderbird 是 Linux 桌面上常用的邮件客户端。默认情况下,它启动后通常显示在任务栏中;如果关闭窗口,程序也会直接退出。对于希望长期后台收邮件、但又不想让 Thunderbird 一直占用任务栏空间的用户来说,把它封装成一个“可最小化到托盘”的应用会更符合日常使用习惯。 本文记录一种相对干净的做法:不修改 Thunderbird 本体,不改 profile,不覆盖系统自带启动器,只额外创建一个通过 KDocker 启动 Thunderbird 的 desktop 文件。 基本思路 目标不是改造 Thunderbird 本身,而是在外层加一层启动方式: 这样做的好处是: 确认 Thunderbird 的二进制路径 首先确认 Thunderbird 的实际可执行文件路径: 如果返回: 说明 Thunderbird 是系统原生安装,后续可以直接使用这个路径。 这一步很重要,因为 .desktop 文件里的 Exec= 最好写清楚实际启动的程序,而不是完全依赖环境变量搜索。 不指定 Thunderbird profile Thunderbird 的 profile 通常位于用户目录下,由 Thunderbird 自己管理。虽然可以查看 profiles.ini,但这里不建议手动指定 profile。 原因是:如果系统里有多个 profile,或者 Thunderbird …

在 KDE/X11 下把浏览器扩展封装成一个独立托盘应用

有些应用没有正式的 Linux 原生客户端,但提供了浏览器扩展版,或者可以通过 Chromium 系浏览器运行。直接在浏览器里使用当然可以,但体验上总觉得不够独立:它会混在普通浏览器标签页里,也不方便固定到任务栏,更不像一个真正的桌面应用。 这次尝试的目标是:把一个浏览器扩展版的即时通讯工具封装成一个独立的桌面应用。点击图标后,它以单独窗口打开,有自己的图标、自己的浏览器 profile、自己的桌面入口,并且可以最小化到 KDE 系统托盘中。最终效果接近一个原生聊天软件。 一、目标 目标不是安装一个真正的原生 Linux 客户端,而是通过以下方式实现类似体验: 最终希望达到的行为是: 这样它就不会和普通浏览器混在一起,也不会占用日常浏览器 profile。 二、基本架构 整体架构可以分为四部分: 逻辑链条是: 这里的重点是:浏览器程序本体仍然使用系统已经安装好的浏览器,真正独立的是 profile 数据目录和启动方式。 三、项目目录命名 为了长期维护,目录名不建议直接使用过于通用的名字,比如: 这些名字可能和官方应用、浏览器自身 profile、第三方客户端产生混淆。 更合适的是使用一个本地项目式名称,例如: 这个名字不绑定具体浏览器,也不绑定具体技术实现。以后即使从 Brave 换成 Chromium,或者从某个扩展换成另一个 Web App,目录名也不需要改。 目录结构大致如下: 四、启动脚本 核心启动脚本是 launch.sh。 示例: 这里有几个关键点。 –user-data-dir 用来指定独立 profile。这样这个应用不会和普通浏览器共享登录状态、扩展、缓存、历史记录。 –app 用来让浏览器以接近独立应用窗口的方式打开页面,而不是普通浏览器窗口。 –class=ChatApp 用来帮助 KDE / KWin 识别窗口身份。否则这个窗口可能会被归类到普通浏览器下面,任务栏图标也会和普通浏览器叠在一起。 …

KDocker:把普通 Linux 应用收进系统托盘的小工具

在 Linux 桌面环境里,有些应用本身支持“最小化到系统托盘”,比如聊天软件、下载工具、密码管理器、音乐播放器等。但也有很多应用没有这个功能:窗口一最小化,就仍然占在任务栏里;关掉窗口,又可能直接退出程序。KDocker 解决的就是这个问题:它可以把大多数普通应用窗口“停靠”到系统托盘里,让它们像托盘程序一样隐藏、恢复和常驻。 KDocker 的官方描述很直接:它可以把多数应用停靠到系统托盘中,启动 KDocker 后用鼠标选择一个窗口,这个窗口就会被 dock 到托盘里。 它不是 Docker,也不是容器工具 KDocker 这个名字容易让人误会。这里的 “Docker” 不是容器领域的 Docker,而是 “dock” 的意思,也就是把窗口停靠到某个地方。 它的作用不是运行容器,不是管理镜像,也不是服务器工具。它是一个桌面小工具,面向的是 Linux 图形界面用户,尤其适合 KDE Plasma、Xfce、LXDE、Cinnamon 这类有系统托盘区域的桌面环境。 KDocker 能解决什么问题 KDocker 最典型的用途,是让一些需要长期开着、但又不希望占用任务栏空间的应用变得更安静。 比如邮件客户端、聊天软件、浏览器封装的 Web App、同步工具、音乐播放器、RSS 阅读器、笔记软件等。有些应用本身没有托盘功能,或者托盘功能在某些桌面环境下表现不好,这时 KDocker 就可以作为一个外部补丁。 它的思路很简单:不改应用本身,不改应用配置,只是从窗口管理层面把这个窗口收起来,并在系统托盘里放一个图标。需要时点托盘图标恢复窗口,不需要时让它安静待着。 基本使用方式 最简单的方式是直接运行: 然后鼠标指针会进入选择窗口的状态,点击想要收进托盘的应用窗口即可。 也可以直接指定程序启动,例如: 或者指定一个自定义图标: -i 参数用于指定托盘图标路径;Ubuntu manpage 中也列出了其他常见选项,例如 -f 表示 dock 当前获得焦点的窗口,-t 表示从任务栏移除该窗口,-l …

手机交通卡、地区版本与“金锄头种地”的问题

现代手机越来越像一个“万能入口”:银行卡、身份证明、会员卡、门禁卡、交通卡,都可以被整合进同一台设备。乍看之下,一部手机如果能同时支持日本 Suica/ICOCA、香港 Octopus、台湾悠游卡、韩国 T-money、中国大陆交通卡,似乎是一种很理想的状态。 但仔细拆开以后会发现,这件事远比“有没有 NFC”复杂得多。更重要的是,从现实生活成本来看,为了追求手机支持所有地区交通卡而纠结地区版本、NFC 芯片、安全元件和钱包服务,很多时候反而是把一个简单问题复杂化。 一、有 NFC,不等于能刷当地交通卡 很多人容易把问题理解成:“这台手机有 NFC,所以应该能用交通卡。”但交通卡不是普通 NFC 标签。交通卡涉及余额、密钥、离线扣费、闸机快速认证和交通公司结算系统。手机要模拟一张交通卡,通常不只需要 NFC 天线,还需要安全元件、交通卡 applet、钱包服务和当地交通系统认证。 例如香港 Octopus 的 Samsung Pay 版本,官方说明它是存放在指定手机的 secure element 中,并通过 NFC 与 Octopus 读卡器进行交易;相关 FAQ 也要求 Smart Octopus in Samsung Pay 使用 Embedded Secure Element。 台湾 Samsung Wallet 悠游卡也有类似要求,三星台湾官方说明里明确提到 NFC 预设方式需要选择“嵌入式安全元件”。 所以,手机交通卡真正依赖的是一整套结构: 这就是为什么“有 NFC”不等于“能用 Suica、Octopus …

日本常见支付方式简介:现金、国际品牌卡、交通系IC、电子货币与扫码支付

日本的日常支付方式种类较多。除了现金以外,常见的无现金支付方式包括信用卡、デビットカード、プリペイドカード、交通系IC、QUICPay、iD、楽天Edy、nanaco、WAON、PayPay、楽天ペイ等。 这些方式在使用体验上都属于“キャッシュレス決済”,但背后的结算结构并不相同。理解日本支付方式时,可以从“卡片类型”“支付网络”“结算方式”“使用场景”几个角度来看。 现金 现金仍然是日本常见的支付方式之一。虽然便利店、超市、连锁餐饮、药妆店等场所大多支持无现金支付,但部分小店、个人经营店铺、地方设施、老式自动售货机等场景仍可能需要现金。 现金的特点是即时结算,不依赖手机、电池、网络、银行系统或读卡终端,适合作为基础备用支付方式。 国际品牌卡:信用卡、デビットカード、プリペイドカード 日本常见的国际品牌包括: 这些品牌本身不是“信用卡”这个概念,而是支付网络。信用卡、デビットカード、プリペイドカード都可能带有这些国际品牌标识。 信用卡 信用卡是日本常见的无现金支付方式。消费时,金额先进入信用卡账单,之后在指定还款日从银行账户扣款。 信用卡常用于线下购物、网上购物、手机费、订阅服务、公共费用、酒店预订、机票购买等场景。 デビットカード デビットカード通常与银行账户直接连接。消费时,金额会从银行账户中即时扣除。 デビットカード可以像信用卡一样带有 Visa、Mastercard、JCB 等国际品牌标识,也可以在线下店铺和网上购物中使用。不过它的资金结算方式和信用卡不同:信用卡是先记账后扣款,デビットカード则是消费时即时扣款。 プリペイドカード プリペイドカード是预付型卡片。使用前需要先充值,消费时从已充值余额中扣除。 有些プリペイドカード也带有 Visa、Mastercard、JCB 等国际品牌标识,因此可以在支持这些品牌的店铺或网站使用。 国际品牌卡的使用方式:插卡、刷卡、触碰支付 国际品牌卡可以有不同的使用方式。 常见方式包括: 其中触碰支付包括: 这些不是独立于信用卡、デビットカード之外的新类别,而是国际品牌卡的一种使用方式。 同一张卡可能是信用卡,也可能是デビットカード或プリペイドカード;它可以通过实体卡插卡支付,也可以通过手机钱包或实体卡触碰支付。 QUICPay 和 iD QUICPay 和 iD 是日本常见的本地感应式支付方式。 QUICPay 主要与 JCB 系统关系较深,iD 则与 NTTドコモ系服务关系较深。不过在实际使用中,它们可以绑定不同发行公司的信用卡、デビットカード或プリペイドカード。 QUICPay 和 iD 的特点是使用时不需要插卡,只需要用手机、实体卡或支持的设备靠近读卡器即可。 它们看起来像“电子货币”,但不能简单等同于预付型电子钱包。因为根据绑定卡片的不同,结算方式可能是: 因此,QUICPay 和 iD 更适合理解为日本本地常见的非接触支付网络。 交通系IC卡 …