zhbaor's Moments

让我们组建一支乐队,一起来超越我们的偶像吧!

Dec 12th
2022

最近把大部分桌面程序(一共 28 个)都改用 flatpak 安装了,/var/lib/flatpak/ 只占了 11G 的存储空间。

程序列表Ardour、Audacity、韦诺之战、Calibre、GNOME Clocks、CopyQ、DBeaver、Easy Effects、Fcitx5、Fedora Media Writer、FileZilla、Flatseal、FSearch、GIMP、GoldenDict、Helvum、Joplin、Kdenlive、Krita、MarkText、GNOME Metronome、MuseScore、OBS Studio、OnlyOffice、SchildiChat、Steam、Telegram、Vorta、腾讯会议

遇到两个问题:

  1. 字体渲染:flatpak/flatpak #3947 中提到了一些相关信息;
  2. 一些程序的窗口中显示的光标主题不对。

好在这两个问题都有解决方法。在 Flatseal 中修改所有程序的设置,在 Filesystem 的 Other files 下添加 /usr/share/icons:ro 和 xdg-config/fontconfig:ro,在 Environment Variables 下添加 XCURSOR_THEME=Bibata-Modern-Classic。(名称可以在光标主题所在文件夹下的 cursor.theme 中找到)

21:51


Dec 9th
2022

红警 2 会改变显示器的分辨率,导致开始游戏慢人一步,在多显示器上还有 bug,也没法调整 upscale 的算法。自从用了 wine-tkg 的 proton-fs-hack 补丁,体验就好了很多。进入游戏时不再调整显示器的分辨率,还可以选整数缩放或 FSR。

然而,最近这个功能失效了。问了作者,原来上游的补丁和新版 wine 有冲突,维护成本太高,于是暂时禁用了这个选项。预计等 wine 8.0 发布之后,上游再更新,才能用。

于是看看其它工具。Xpra 的 run_scaled 也就图一乐(它用 Xvfb,没有硬件加速),真打游戏还得看 gamescope。用 flatpak 安装(com.valvesoftware.Steam.Utility.gamescope)似乎需要 Bottles。我还没有做好用 Bottles 的准备,而且希望能用 wine-tkg,Bottles 不支持,所以先不考虑它。直接安装的话,gamescope 在 Ubuntu 下不太好装:软件源里没有,编译也非常困难(#514),而且最新版的依赖要求已经不能靠 Ubuntu 的软件源满足了。找了一圈,发现 ppa:ar-lex/gamescope 上有比较新的 gamescope,一试,能用,不错:在桌面环境下运行、在 tty 里单独运行,都没有问题。

那就试试用 gamescope 跑红警。加上 gamescope --fullscreen -h 720 -w 1280 -n 一试,完美运行,除了——

Ctrl 和 CapsLock。我习惯把 Ctrl 和 CapsLock 交换一下。一般情况下,按 Ctrl-Q、Ctrl-R、Ctrl-F 之类的组合快捷键时,要么扭手,要么把整个手掌移到左边,有些人甚至用掌根按 Ctrl。但是交换之后就不需要大幅度动手,非常舒服。在死亡细胞里,我甚至还用 Ctrl 键进行交互,比如用 W A S D 移动的时候,小指正好落在 CapsLock 上,可以边走边开门、捡东西,特别方便。

我交换这两个键,是在 Cinnamon 的键盘选项里设置的。不用 gamescope 时一切正常,然而到了 gamescope 里就没用了。搜索一番,发现可以设置 XKB_DEFAULT_* 环境变量,来改变 gamescope 的键盘布局。我兴奋地加上了 XKB_DEFAULT_OPTIONS="ctrl:swapcaps" 环境变量,在 gamescope 中打开红警 2,在局域网联机的界面尝试改名,果然有用。然而一进游戏却发现……怎么还是不行?游戏设置里,带 Ctrl 的快捷键里,相应位置竟然都变成了 CapsLock。无语。

心灰意冷之际,发现了这个项目:samvel1024/kbct,是用 Rust 写的一个新工具。它的工作原理是这样的:

KBCT is operating on a low enough level to be independent from the window manager or the desktop environment. It is achieved by the following steps:

Since KBCT should be run as root, it has enough privileges to read and grab the output of a keyboard or another input device (e.g the output of /dev/input/event2). Which means that it becomes readable only for KBCT and that the display manager is no longer able to read from that device.

Then KBCT creates another virtual uinputdevice (e.g. /dev/input/event6), and sends customized key events to that device. The new mapped keyboard or device is successfully read by the window manager, which as a result reads customized key events.

因此,运行 KBCT 后,设置对于 tty、X、wayland 都会同时生效,不用分别设置。于是 clone 源码,下载编译安装一条龙。去 Cinnamon 设置里关掉交换 Ctrl 和 CapsLock 的设置,sudo modprobe uinput 加载内核模块,sudo kbct list-devices 列出设备,写好配置文件,运行,在桌面和 gamescope 里都没问题。

不过有个小问题是:睡眠会导致 KBCT 报错退出 (在修了) 。于是写了个 systemd service 文件,让它自动重启。终于算是解决了。瑕不掩瑜,强烈推荐!

附上配置文件(保存到 /etc/kbct/config.yml):

1- keyboards: ["AT Translated Set 2 keyboard"]
2
3  keymap:
4    leftctrl: capslock
5    capslock: leftctrl

还有 systemd service 文件:

 1[Unit]
 2Description=KBCT key mapper
 3
 4[Service]
 5User=root
 6WorkingDirectory=/usr/local/bin
 7ExecStart=kbct remap --config /etc/kbct/config.yml
 8Restart=always
 9
10[Install]
11WantedBy=multi-user.target

最后是关于长按键盘重复输入的问题。Cinnamon 可以在键盘设置中调整长按重复输入的触发时间和重复速度,但是开启 KBCT 后,设置却没有生效。在 X11 下可以通过 xset 命令查看或更改相关的设置。在 Cinnamon 的键盘设置中调好之后,使用 xset q 查看设置:

 1Keyboard Control:
 2  auto repeat:  on    key click percent:  0    LED mask:  00000000
 3  XKB indicators:
 4    00: Caps Lock:   off    01: Num Lock:    off    02: Scroll Lock: off
 5    03: Compose:     off    04: Kana:        off    05: Sleep:       off
 6    06: Suspend:     off    07: Mute:        off    08: Misc:        off
 7    09: Mail:        off    10: Charging:    off    11: Shift Lock:  off
 8    12: Group 2:     off    13: Mouse Keys:  off
 9  auto repeat delay:  266    repeat rate:  37
10  auto repeating keys:  00ffffffdffffbbf
11                        fadfffefffefffff
12                        9fffffffffffffff
13                        fff7ffffffffffff
14  bell percent:  50    bell pitch:  400    bell duration:  100
15Pointer Control:
16  acceleration:  2/1    threshold:  4
17Screen Saver:
18  prefer blanking:  yes    allow exposures:  yes
19  timeout:  0    cycle:  0
20Colors:
21  default colormap:  0x20    BlackPixel:  0x0    WhitePixel:  0xffffff
22Font Path:
23  /usr/share/fonts/X11/misc,/usr/share/fonts/X11/Type1,built-ins
24DPMS (Energy Star):
25  Standby: 0    Suspend: 0    Off: 0
26  DPMS is Enabled
27  Monitor is On

可以看到长按触发连续输入的时间是 266,重复速率是 37。接下来建立并修改 /etc/X11/xorg.conf.d/99-kbct-repeat.conf,填入相应的参数:

1Section "InputClass"
2        Identifier "System Keyboard"
3        MatchIsKeyboard "on"
4        Option "AutoRepeat" "266 27"
5EndSection

这样重启 KBCT 就不会影响长按重复输入的设置了。

PS:在写这篇文章时,这个主题不支持 blockquote,显示 code blocks 也有很大的问题。在我的完善下,功能越来越全,用起来越来越舒服了。

19:52


Dec 7th
2022

在 @KLP 的推荐下,试了 Dexed。

图片里是用 MuseScore 控制 Dexed。

Responsive image

11:04


Nov 26th
2022

了解到这个把 Fcitx5 输入法移植到 Android 上的项目。开始以为会很粗糙,抱着试试看的心态下载安装。出乎意料的是,界面已经比较精致了。目前很多地方的默认设置不太合理,需要精细调整后才顺手;个别地方仍然有 bug。加了 Matrix 群反馈问题,开发者非常热情友善。

感觉可以研究一下电脑和手机的词库同步了。

Responsive image

18:46


Nov 22nd
2022

在当前这个不太成熟的时机,配置了 obs-studio 通过 amf 编码视频。说时机不成熟,是因为 obs-ffmpeg: Make AMF encoder work on Linux #7206 马上就要合并了,现在的一些步骤到时候就没有必要了。

目前还有很多令我感到困惑的问题,比如:amf 和 vaapi 真的有区别吗?amdgpu-pro 的内核模块能不能用在 linux-tkg 的内核上,或者装 amf 的时候不带 dkms?如果到最后发现 amf 的效果和 vaapi 一样,甚至不如 vaapi,那可真是白折腾了;因为安装 amf 而不能用 linux-tkg,有些得不偿失。无论如何,简单记录一下大致的步骤:

  1. 安装 amdgpu-pro 驱动:这种事情算是 Ubuntu 这类“商业发行版”的“优势区间”。先从 https://www.amd.com/en/support/linux-drivers 下载驱动。目前最新的是 22.20 版本。

  2. 下载的 deb 包安装之后,有了 amdgpu-install 命令。用 amdgpu-install --usecase=amf 命令安装。不过这样会带上 amdgpu-dkms 这个包。虽然驱动下载页面没写,但是 22.20 和上个版本一样,需要 Ubuntu 源里的 5.15.0-52 内核,-53 是不行的。隔壁 AUR 里的 amf-amdgpu-pro 没有 dkms,不过用 amdgpu-install 能不能不带 dkms,我还没试过。

  3. 接下来把 https://github.com/GPUOpen-LibrariesAndSDKs/AMF 中 amf/public/include/* 复制到 /usr/include/AMF 下,为编译 ffmpeg 准备头文件。

  4. 参照 https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu,编译 ffmpeg。我把源码放到了 ~/Downloads/ffmpeg/ 下,配置一步的命令是:

    PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="/home/zhao/Downloads/ffmpeg/lib/pkgconfig" ./configure --prefix="/home/zhao/Downloads/ffmpeg" --pkg-config-flags="--static" --extra-cflags="-I/home/zhao/Downloads/ffmpeg/include" --extra-ldflags="-L/home/zhao/Downloads/ffmpeg/lib" --extra-libs="-lpthread -lm" --ld="g++" --bindir="$HOME/bin" --enable-gpl --enable-gnutls --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree --enable-amf

    ffmpeg 会安装到 ~/bin/ 下。

  5. obs-studio 的 28 版本自带对 amf 的支持,但是在 linux 下想用,要等 PR 合并。我尝试直接用该 PR 的源码进行编译,但是没有成功。27 系列可以通过 stream-fx 插件支持 amf,但是我试验一番,也没有成功。(题外话:27 与 28 的构建方式有所不同,不过 Ubuntu jammy 的源里还有 27 版本。)

  6. 正在山穷水尽之时,在 AUR 上看到了 obs-studio-amf 这个包,把它附带的文件中的 7206.patch 应用到 28.1.2 版本的源码上,就能成功编译。cmake -S . -B build -G Ninja -DENABLE_AJA=0 -DENABLE_BROWSER=OFF -DENABLE_WEBSOCKET=OFF -DENABLE_NEW_MPEGTS_OUTPUT=OFF -DENABLE_JACK=ON && cmake --build build && sudo cmake --install build,把 obs-studio 安装到 /usr/local/ 下。这样 obs-studio 就能成功用上 amf 编码视频了!

11:46


Nov 12th
2022

嫖 vlab 的机器部署了 Amiya-Bot,顺便混了个群管。尽管有各种问题,但毕竟是业余项目,总归瑕不掩瑜。

明日方舟这次“叙拉古人”活动,IS 关能代理,IS-EX 关的普通和突袭难度,借助战也都过了,比上次长夜临光复刻的体验好多了。

09:14


Nov 6th
2022

无意间发现,笔记本默认的 scaling driver 已经变成了 amd-pstate,正常使用功耗降到了 6W 左右——以往都是 7W~8W。电池的 conservation_mode 设置,重启后也可以保留了。电池容量下降到了 92%,才用不到两年,掉得有点快。

功耗下降与容量减小,两者大致相抵,续航时间还是 10 小时左右。

Responsive image

21:58


Oct 30th
2022

不满于 VSCode 的启动速度,再度回归 Vim/NeoVim。看到 Reddit 上有人推荐 AstroNvim,便决定尝试一番。

AstroNvim 的文档里列出了用到的组件、默认快捷键和一些常见配置,对新手非常友好。用 mason 一键安装 LSP Server、Linter、Formatter,又装了两个插件,写了点 Python、Vue,体验不错。

配置文件在 ~/.config/nvim/lua/user/ 下,已经用 git 同步到自建的 Gitea 了。记录一下用 :LspInstall 安装的 LSP server:

  • Bash: bashls
  • C: clangd
  • XML: lemminx
  • Lua: sumneko_lua
  • Markdown: marksman
  • Python: pyright,用 black 格式化
  • Vue: volar
  • 格式化:prettierd

11:09


Oct 28th
2022

新台灯!

Responsive image

18:09


Oct 25th
2022

尝试配置触摸板三指拖动,用 libinput-gestures 和 libinput-three-finger-drag,体验不错。

17:06