在 COVID 锁定初期和多人在家工作时,很明显需要让其他人知道我何时正在开会或使用实时网络摄像头。 所以很自然地,我花了一年的时间才终于做点什么。 现在我在这里分享我一路上学到的东西。 你也可以让你自己的“请勿打扰”标志在你的门外自动亮起,告诉人们不要在洗衣日穿着半身衣服走进来。
起初我很惊讶 Zoom 没有内置这种功能。但我可能会再次使用 Teams、Meet、Hangouts、WebEx、Bluejeans 或任何数量的未来视频协作应用程序。 仅将系统范围的手表用于活动的网络摄像头或麦克风是否有意义? 就像生活中的大多数问题一样,Linux 内核可以帮助解决这个问题。 一个简单的检查 uvcvideo 模块将显示是否正在使用视频设备。 在不使用事件的情况下,剩下的就是轮询它以进行更改。 我选择为此构建一个任务栏图标。 我通常会用我信任的 C++ 来做这件事。 但是我决定跳出我通常的舒适区并使用 Python,以防有人想将它移植到其他平台。 我还想更新我的小蟒蛇,面对我内心的空白恶魔。 我想出了以下大约 90 行实用且简单但不安全的 Python:
https://github.com/jboero/livewebcam/blob/main/livewebcam
除了图标位之外,守护线程每 1 秒执行一次以下基本检查,调用更改后的脚本:
def run(self): while True: val=subprocess.check_output(['lsmod | grep '^uvcvideo' | awk '{print $3}''], shell=True, text=True).strip() if val != self.status: self.status = val if val == '0': val=subprocess.check_output(['~/bin/webcam_deactivated.sh']) else: val=subprocess.check_output(['~/bin/webcam_activated.sh']) time.sleep(1)
无需执行模块解析,只需使用硬编码的 shell 命令即可完成工作。 现在,当至少一个网络摄像头激活或停用时,将使用您选择放入 ~/bin/ 的任何脚本。 我最近对内核维护人员进行了一次关于由 uvcvideo 触发的 usb_core 中的错误的尝试。 我不会再进一步尝试为 uvcvideo 提供事件补丁。 此外,这为 Mac 或 Windows 用户提供了移植他们自己的简单检查的空间。
现在我的 KDE 系统托盘中有一个快乐的图标,我可以实现打开和关闭的脚本。 这就是事情变得复杂的地方。 起初,我打算在我的门上贴一个磁性蓝牙 LED 徽章,以便在我打电话时闪烁“LIVE”。 这些东西在互联网上无处不在,基本上一个带有 LED 屏幕、蓝牙和电池的嵌入式 ARM Cortex-M0 的成本约为 10 美元。 它们基本上是一个完整的 Raspberry Pi Pico 套件,但焊接在板上。
不幸的是,这些徽章使用一个固定的固件,要么监听蓝牙传输,要么显示你的信息——它不能同时做这件事,这很愚蠢。 许多人发布了反馈,他们应该做得更多。 果然有人已经修好了 定制固件. 不幸的是,固件适用于较旧的 USB 变体,我不打算为此拆焊或购买 ISP 编程器来闪存 eeprom。 这将是一个非常有趣的项目,并且将是一个很好的 Rpi 替代方案,但我现在想要的只是我门外的遥控灯。 我查看了包括 WiFi 在内的所有内容 智能灯泡 更换我的嵌入式灯泡, BTLE 蜡烛 这是一个有趣的选择。 在此过程中,我学到了很多关于低功耗蓝牙的知识,包括内核更新如何因蓝牙堆栈崩溃而浪费 4 个小时的周末。 BTLE 真的很有趣,并且在阅读之后变得更有意义。 果然有Python可以设置显示 您的 LED 徽章上的信息 整个房间,但一旦设置,蓝牙将停止监听,等待您更改或关闭它。 该死。 我想我应该只使用 USB,它实际上有一个标准命令来控制端口的电源。 让我们看看这是否已经存在。
看起来有一些选择,即使它们并不理想。 然后我突然发现了。 15 英镑的霓虹灯“ON AIR”,它就像它们一样愚蠢——只使用来自 USB 电源的 5v。 完美的。

控制 USB 电源的命令是 uhubctl 这是在 Fedora 回购。 不幸的是,大多数 USB 集线器不支持此命令。 事实上很少有人支持 回到20年前 这看起来很傻。 集线器会很高兴地报告电源已断开,即使没有断开连接。 我认为构建此功能只需多花几美分,但我不是 USB 集线器制造商。 因此,我需要采购一个二手的。 最后我找到了美国的BYTECC BT-UH340。 这就是我完成它所需要的。 添加udev规则让wheel组控制USB电源,我现在可以执行一个简单的 uhubctl -a 关闭 -l 1-1 -p 1 关闭任何东西。

现在有了一条备用的 USB 延长线,我终于有了一个完整的解决方案。 我的门外有一个“ON AIR”标志,只要我的任何网络摄像头在使用,它就会自动亮起。 我希望看到 Mac 端口或拉取请求的改进。 我相信一切都会变得更好。 更进一步,我很想磨练我的物联网技能并整理出那些闪烁的蓝牙徽章。 如果有人想复制这个,请成为我的客人,随时欢迎提出建议。