汉字标准格式:最新的 Release 在 2015 年。尝试直接加到主页上,不知道哪里的样式冲突了。
22:36
最近看了几篇文章和一段视频:
三则新闻:
jsbridge://
开头的链接)。由于基于 electron,QQ 对 xdg-desktop-portal 的支持不错。09:50
把域名解析迁到 Cloudflare 之后,只更新了 meet.zhaozuohong.vip
的证书。最近接连收到 Let’s Encrypt 的几封提醒邮件,忽然想起最近几个月每天都在不断努力用 DNSPod 更改 DNS 解析记录申请更新证书的 acme.sh,于是拖了几天,终于在今天赶快把其它域名的证书都更新好了。
1Main_Domain KeyLength SAN_Domains CA Created Renew
2blog.zhaozuohong.vip "2048" no LetsEncrypt.org 2022-12-28T08:11:32Z 2023-02-25T08:11:32Z
3ci.zhaozuohong.vip "2048" no LetsEncrypt.org 2022-12-28T07:59:11Z 2023-02-25T07:59:11Z
4git.zhaozuohong.vip "2048" no LetsEncrypt.org 2022-12-28T08:14:40Z 2023-02-25T08:14:40Z
5meet.zhaozuohong.vip "2048" no LetsEncrypt.org 2022-11-26T12:51:04Z 2023-01-24T12:51:04Z
6www.zhaozuohong.vip "2048" no LetsEncrypt.org 2022-12-28T08:04:35Z 2023-02-25T08:04:35Z
7zhaozuohong.vip "2048" no LetsEncrypt.org 2022-12-28T08:12:56Z 2023-02-25T08:12:56Z
16:28
最近开始用 btrfs,感觉和做梦一样。先给移动硬盘用上了 btrfs,然后把根分区从 ext4 转换成了 btrfs,设置了 @
和 @home
两个子卷,更新 grub 配置后成功进了系统。为 libvirt 和 Waydroid 的 image 设置了 nodatacow
,接下来在线缩小了根分区的大小,加了 swap 分区,重启后一切正常。然而只考虑了 swap,忘记为 /var
和 /opt
一类目录建立子卷了。TimeShift 用 btrfs snapshot 备份,比 rsync 省了好多空间,透明压缩也非常有效。
Linux Mint 不像 openSUSE 那样保姆式地做好了一切,所以还得自己动手:下一步打算配置 btrfsmaintenance、apt-btrfs-snapshot 和 grub-btrfs。
11:40
成功从 Linux Mint 21 升级到了 21.1,非常顺滑。和上次从 20.2 升级到 20.3 相比,有了 v2rayA 的透明代理,更新飞快。新图标和主题配色很有现代感,界面上各处调整非常用心,Update Manager 中升级 flatpak 特别方便。
下一步就是把硬盘里面的文件整理出来,把系统做好备份,分区从 ext4 转换成 btrfs。想为非滚动证道,还得等两年后 22 的更新。
10:03
好久不玩死亡细胞了,只好点超级变异。
这局运气超级好。种子是 213836,走双下水道-庇护所路线,有三个挑战,庇护所有双咒箱。路上捡了个金的对称长枪,刚拿的时候还在感叹现在金武器只吃单色卷轴,对称长枪只能欺负小怪了。一看词条:
理所当然地去欺负收藏家了,打得超级爽。
21:20
简单研究了一下明日方舟的脚本。
我不想要完全自动化,而是希望手动运行脚本,能基建换班、在指定关卡刷完体力就足够了,因此 MAA 和 mower 的功能对我来说没有太大的吸引力。相反,虽然 AAH 目前只有“把某几个人放到某个房间里去”的简单功能,但由于它有精心设计的命令行接口和 Python API,很容易就能实现自己想要的功能。
AAH 目前仍不是很完善,我在使用过程中就发现了一个非常容易复现的问题,不过在反馈后马上就修复了。从开发文档和当前设计良好的命令行接口可以看出,开发者对于很多问题有相当清醒的认识。
相反,MAA 的开发团队对 Linux 极不重视。开发者表示“没想明白为什么 Linux 下需要用助手挂模拟器”,就算新的界面是基于 Electron 的,开发者也说“v2 仅仅制作 windows 版本”。Linux 下的使用体验几乎全靠社区维护。MAA 只有 WPF 界面,连命令行接口都没有提供。在 MAA 的开发团队将“跨平台”提上日程之前,MAA 在 Linux 下的体验较 Windows 下会有不小的差距。
如果 MAA 或 mower 的功能是刚需,推荐用虚拟机跑;如果和我一样只要求刷本和简单换班,那么 AAH 就足够了。
1#!/usr/bin/env python3
2import Arknights.configure_launcher
3from automator.launcher import command
4import json
5
6shifts = {
7 "控制中枢": [
8 ["诗怀雅", "清道夫", "陈"],
9 ["阿米娅", "杜宾", "红"],
10 ],
11 "发电站": [
12 ["格雷伊", "THRM-EX", "深靛"],
13 ["阿消", "布丁", "Lancet-2"],
14 ],
15 "办公室": [
16 ["斥罪"],
17 ["伊桑"],
18 ],
19 "会客室": [
20 ["远山", "伺夜"],
21 ["晓歌", "极境"],
22 ],
23 "贸易": [
24 ["孑", "银灰", "但书"],
25 ["夜刀", "慕斯", "芬"],
26 ["空爆", "古米", "月见夜"],
27 ],
28 "赤金": [
29 ["砾", "夜烟", "斑点"],
30 ["红云", "蛇屠箱", "黑角"],
31 ["清流", "香草", "杰西卡"],
32 ],
33 "狗粮": [
34 ["石棉", "铅踝", "Castle-3"],
35 ["白面鸮", "史都华德", "泡普卡"],
36 ["白雪", "红豆", "霜叶"],
37 ],
38}
39
40dormitory_extra = ["华法琳", "安比尔"]
41
42
43def shift(room, operator_list):
44 if isinstance(operator_list, list):
45 operator_list = " ".join(operator_list)
46 cmd = f"riic shift {room} {operator_list}"
47 print(cmd)
48 command(cmd)
49
50
51try:
52 with open("data.json", "r") as f:
53 data = json.load(f)
54 index2 = data["index2"]
55 index3 = data["index3"]
56except:
57 index2 = 0
58 index3 = 0
59
60new2 = (index2 + 1) % 2
61new3 = (index3 + 1) % 3
62relax2 = index2
63relax3 = (index3 + 2) % 3
64
65shift("control_center", shifts["控制中枢"][new2])
66shift("B103", shifts["发电站"][new2][0])
67shift("B203", shifts["发电站"][new2][1])
68shift("B303", shifts["发电站"][new2][2])
69shift("meeting", shifts["会客室"][new2])
70shift("office", shifts["办公室"][new2])
71shift("B101", shifts["贸易"][index3])
72shift("B102", shifts["贸易"][new3])
73shift("B201", shifts["赤金"][index3])
74shift("B202", shifts["赤金"][new3])
75shift("B301", shifts["狗粮"][index3])
76shift("B302", shifts["狗粮"][new3])
77
78relax_list = (
79 shifts["控制中枢"][relax2]
80 + shifts["发电站"][relax2]
81 + shifts["会客室"][relax2]
82 + shifts["办公室"][relax2]
83 + shifts["贸易"][relax3]
84 + shifts["赤金"][relax3]
85 + shifts["狗粮"][relax3]
86 + dormitory_extra
87)
88
89for i in range(4):
90 shift(f"dorm{i + 1}", relax_list[i * 5 : (i + 1) * 5])
91
92with open("data.json", "w") as f:
93 json.dump({"index2": new2, "index3": new3}, f)
21:21
推荐几个软件:
Pika Backup:粉红色 App,但是备份软件。和 Vorta 一样,也是 BorgBackup 的前端。
ZBar Bar Code Reader (mchehab/zbar),今天用它识别二维码,效果不错。
ZBar Bar Code Reader is an open source software suite for reading bar codes from various sources, such as video streams, image files and raw intensity sensors. It supports EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 93, Code 39, Codabar, Interleaved 2 of 5, QR Code and SQ Code.
qrencode (fukuchi/libqrencode),用来生成二维码。
Libqrencode is a fast and compact library for encoding data in a QR Code symbol, a 2D symbology that can be scanned by handy terminals such as a mobile phone with CCD. The capacity of QR Code is up to 7000 digits or 4000 characters and has high robustness.
Cage: a Wayland kiosk (Hjdskes/cage)。
Cage is a kiosk compositor for Wayland. A kiosk is a window manager (in the X11 world) or compositor (in the Wayland world) that is designed for a user experience wherein user interaction and activities outside the scope of the running application are prevented. That is, a kiosk compositor displays a single maximized application at a time and prevents the user from interacting with anything but this application.
我用 Waydroid 玩明日方舟,但是 Waydroid 只能在 Wayland 下运行,我用的 Cinnamon 桌面只支持 X11。以前窗口化运行 Weston 再启动 Waydroid,明显感到鼠标移动有很大的延迟,非常难受。全屏运行 Weston 时,全屏窗口不会经过合成器,体验就好多了。当时以为非全屏运行 Weston 时,移动鼠标的延迟是 X 下合成器的问题。
今天发现 Cage 和 Sway 也能在 X11 下运行。Sway 的默认快捷键和我设置的冲突了,所以就试试 Cage。没想到,通过窗口化运行的 Cage 跑 Waydroid,鼠标移动的延迟竟然也很低。这一现象令我十分惊讶,我这才意识到,原来心里对 X 的合成器有很深的偏见,先入为主地认为“鼠标延迟是合成器导致的”,忽略了其它非全屏运行的程序并没有这么高的鼠标延迟,也忘记了 Weston 和 Sway、Cage 等基于 wlroots 的 Wayland 合成器实现上的不同。
记录一下相关的命令:
1# 窗口化运行 Weston
2weston --width=1280 --height=720 --shell="kiosk-shell.so"
3
4# 全屏运行 Weston
5weston --width=1920 --height=1080 --fullscreen --shell="kiosk-shell.so"
6
7# 启动 Cage 时需要指定程序,且无法指定窗口尺寸
8# 所以先启动 foot,再调整 Cage 窗口的大小
9cage foot
10wmctrl -i -r $(wmctrl -l | grep foot | awk '{print $1;}') -e 0,320,180,1280,720
11
12# 设置 WAYLAND_DISPLAY 环境变量,可在 Weston 或 Cage 以外的终端中启动 Waydroid
13WAYLAND_DISPLAY=wayland-0 waydroid show-full-ui
14# 关闭 Waydroid
15waydroid session stop
全屏运行 Cage 需要借助桌面环境或窗口管理器的功能。我在 Cinnamon 的设置中,把全屏窗口功能绑定了 Alt-F12
快捷键。
SitMan,童年回忆,小时候用它背英语课文。
SitMan 在比较新的 Windows 系统和 Wine 上都能跑起来。用 Wine 时,需要用 winecfg 添加 riched20
函数库顶替。
激活信息:
用户名:学英语
注册码:8ac1000323ulgyeq5x
SitMan 需要较老版本的 RealPlayer,SitMan v2.3 和 RealPlayer 8 安装包我都上传到网盘了,点击下方链接即可下载。
16:46
不久之前,Linux 6.1 发布了。我兴冲冲地用 linux-tkg 安装了新内核,选了 BORE 调度器,一切正常。
无意间打开 OBS,这才注意到没有虚拟摄像头的按钮。但是我装了 v4l2loopback-dkms
呀,难道说 flatpak 版本的 OBS 没有这个功能?看到了 Make VirtualCam work with Flatpak #4552,原来早就支持了。
怎么回事呢?🤔
重新安装 v4l2loopback-dkms
,看到了以下输出:
1Building for 6.1.0-tkg-bore
2Building initial module for 6.1.0-tkg-bore
3Error! The /var/lib/dkms/v4l2loopback/0.12.5/6.1.0-tkg-bore/x86_64/dkms.conf for module v4l2loopback includes a BUILD_EXCLUSIVE directive which does not match this kernel/arch.
4This indicates that it should not be built.
5Skipped.
我用的发行版 Linux Mint 21 是基于 Ubuntu 22.04 LTS 的,官源中的 v4l2loopback-dkms 版本是 0.12.5。/usr/src/v4l2loopback-0.12.5/dkms.conf
的内容是这样的:
1PACKAGE_NAME="v4l2loopback"
2PACKAGE_VERSION="0.12.5"
3
4# Items below here should not have to change with each driver version
5MAKE[0]="make KERNEL_DIR=${kernel_source_dir} all"
6CLEAN="make clean"
7
8BUILT_MODULE_NAME[0]="$PACKAGE_NAME"
9DEST_MODULE_LOCATION[0]="/extra"
10
11REMAKE_INITRD="no"
12AUTOINSTALL="yes"
13
14if ! grep -q '^CONFIG_VIDEO_V4L2=[ym]$' $kernel_source_dir/.config; then
15BUILD_EXCLUSIVE_KERNEL="^$"
16fi
也就是说,用 dkms 构建 v4l2loopback 内核模块时,会先检查 CONFIG_VIDEO_V4L2
的设置。Ubuntu 自己的内核 /usr/src/linux-headers-5.15.0-56-generic/.config
中,确实有 CONFIG_VIDEO_V4L2=m
。用 linux-tkg 安装的 /usr/src/linux-headers-6.1.0-tkg-bore/.config
中呢,根本没有 CONFIG_VIDEO_V4L2
这个选项!
去 umlaeute/v4l2loopback 一搜,找到了 dkms broken for linux>=5.18 #498。原来,在 Linux 5.18 及以上版本中,这个选项改名叫 CONFIG_VIDEO_DEV
了,旧版本 v4l2loopback 的 dkms.conf
只会检查 CONFIG_VIDEO_V4L2
选项,所以在旧内核上安装没问题,在新内核上就会报错。
虽然 v4l2loopback 项目的 README.md 中有通过 dkms 安装的步骤,但是那样只能下载打了标签的版本。这个问题在目前最新 tag 0.12.7 发布之后才被修复,安装 0.12.7 照样没用,要下载最新的代码。另外,Ubuntu 官源中的 v4l2loopback-utils
版本也比较旧,缺少动态添加管理设备等功能。于是把 v4l2loopback-utils
也一并装上:
1sudo apt purge --autoremove v4l2loopback-dkms v4l2loopback-utils
2sudo git clone https://github.com/umlaeute/v4l2loopback /usr/src/v4l2loopback-git
3sudo dkms add v4l2loopback -v git
4sudo dkms build v4l2loopback -v git
5sudo dkms install v4l2loopback -v git
6cd /usr/src/v4l2loopback-git
7sudo make install-utils
8sudo make install-man # 注意:需要安装 help2man
这样,v4l2loopback-ctl
可以用了,OBS Studio 的虚拟摄像头功能也恢复正常了。
PS:v4l2loopback 目前最新版 0.12.7 还没有更新 dkms.conf
,然而不久之前,@regymm 却边用新内核,边开 OBS 的虚拟摄像头。在好奇心的驱使下,我去看了 Arch Linux 的 v4l2loopback-dkms
,发现它虽然用的是 0.12.7 版本,但是附加了 commit e7edf2f 对 dkms.conf
的修改,所以在新内核上也没有问题。
20:26