为 Headless Linux 安装 Virtual Camera + Microphone

最近在研究 WebRTC,但由于本地环境不具有 Camara 和 Microphone,测试就变得不是很方便。再加上我把开发环境塞进了的 VM 中,Chrome 会阻止在非 HTTPS 页面上启动相关服务,因此考虑直接在 VM 中进行一些通话测试。

视 OS 不同,虚拟设备的实现方案会有所不同。其中 Windows 和 MacOS 是比较简单的:OBS 搞定 Camera 和视频源,VB-CABLE 搞定 Microphone,一个能选择输出设备的音乐播放器 (例如 QQ 音乐) 和音频源。

Linux 的情况则有所不同。虽然 OBS 也有 Linux 版本,但实践下来安装时会存在各种依赖问题,并不怎么好用;另外也还是需要单独的方案来实现 Virtual Microphone。因此我采用了下述方案:

  • tigervnc + x11 + xfce4 + chromium – 提供远程操作、调试环境;
  • v4l2loopback 内核模块 – 用于创建一个视频的回环设备;
  • pulseaudio module-pipe-source 模块 – 用于创建一个音频的 pipe source;
  • ffmpeg – 解码媒体文件,重编码音视频流并输出到设备。
继续阅读“为 Headless Linux 安装 Virtual Camera + Microphone”

Debian 折腾小记

由于近日武汉肺炎疫情严重,学校严禁提前返校,因此原本 2/5 左右回学校写论文的计划不得不取消,只好窝在家里看文献(划水)。看着看着眼睛就开始疼了,最开始觉得是笔电上没配置 MacType 的问题,结果配置了半天也折腾不好,想了想不如干脆直接上 Linux 得了(才不是因为 Mac 买不起)

想了想 openSUSE + KDE 用过蛮久的了,除了略有卡顿倒是没什么不好;RetHat 系碰过觉得也就那样;Ubuntu 碰都不想碰,Debian 在服务器上用的挺多的;Arch 不敢造次。考虑到国内发包都以 Ubuntu 的 deb 为主,我也不太喜欢衍生发行版,干脆试试 Debian + Gnome3。试过之后发现 Gnome3 咋用咋不爽,比如 Telegram Desktop 的那个图标莫名其妙点不下去,Application Menu 弄不到顶部去,Dock 想放到下面都要装插件……

算了,重装上 KDE!于是有了这篇记录,主要涉及以下内容:

  • 系统安装
  • KDE 简单定制
  • 显示配置与 Gamma(ThinkPad 系瞎眼屏用)
  • 应用程序音量控制
  • 蓝牙耳机及 aptX 编码器
  • vanilla texlive 与 Debian 集成
继续阅读“Debian 折腾小记”

说说 github.com/pkg/sftp 与 TCP stall

好久没写过东西了,最近一直在折腾 Golang,今天难得想起来了,就稍微写一点。

最近有个需求,要通过 SFTP 把文件传到指定服务器上,于是就用了 github.com/pkg/sftp 这么一个库。然而,这个库存是存在一些坑的,比如某个版本 sftp.File.Write 写超过 4MiB 的文件时,Kill 远程 sshd 后会导致 Close 时死锁;又比如更新代码后,Kill 了远端之后有时 ReadFrom 返回 Writer EOF,有时返回 nil;再比如模拟弱网时发生了 TCP Stall,传输就永远的卡死了,如果此时对端认为 TCP 超时,则该 TCP 将永远不会被释放。

继续阅读“说说 github.com/pkg/sftp 与 TCP stall”

libvirtd 中使用 VLAN (VMM)

现在有一个需求,想要将 libvirtd 中管理的虚拟机和以太网某一个特定的 VLAN 连接。

太长不看版:

  • 使用 NetworkManager 中的 nmtui 工具管理网桥和 VLAN (GUI中没有实现此功能)
  • 在 VMM 中添加网络设备, Network Source 选择 Specify shared devices name,然后输入网桥的名字
  • 网桥中,需要设置 “Group forward mask” 为 65528 ,否则 DHCP Discover 等广播报文无法通过网桥

继续阅读“libvirtd 中使用 VLAN (VMM)”

搬寝室

嗯,清明假期,趁着 3 月份毕业了一波同学,于是向楼长申请搬到一个环境好一点的寝室。虽然说不再那么潮湿且暗无天日了,还能用洗衣机,然而每次上楼要多爬两层,且早上会有恼人垃圾车磕垃圾,晚上早上外面人跑来跑去也蛮吵的。

继续阅读“搬寝室”

为树梅派 3 加装一块 USB 无线网卡并工作在 AP 模式

没错,这曾经是个很简单的问题。在 Debian 7 下只要修改 /etc/network/interfaces,然后配置hostapd,就可以了。不过随着 Raspbian 的更新,这种方法已经不太合适了,必须要按照 Debian 8+ 的方式进行设置了,故写篇文章记录一下。

几句话简要说明版:Debian 8 已经不推荐使用/etc/network/interfaces的方式来配置网络了,相应的功能由 dhcpcd 接管,配置文件位于 /etc/dhcpcd.conf。当 dhcpcd 检测到有无线设备,会去查找/etc/wpa_supplicant/wpa_supplicant.conf 并调用 wpa_supplicant 来连接 WLAN。

继续阅读“为树梅派 3 加装一块 USB 无线网卡并工作在 AP 模式”