# 快速克隆
virt-clone --auto-clone --original vm-euler --name vm-euler-2
批量克隆
for i in {1..64}; do virt-clone --auto-clone --original vm-euler --name vm-euler-$i ; done &
# 快速克隆
virt-clone --auto-clone --original vm-euler --name vm-euler-2
批量克隆
for i in {1..64}; do virt-clone --auto-clone --original vm-euler --name vm-euler-$i ; done &
linux 下高分屏适配当前在 macos/windows/Linux 中的排位尚属末尾,采用整数倍缩放效果尚好(例如 100%、200%),但是若是使用非整数倍缩放(125%、175%)常常会体会到窗口模糊。
这一问题当前没有比较好的解决方案,但是可以使用字体缩放的方式绕过,效果尚可。
如果你在使用 GNOME 桌面,可以通过安装 gnome tweaks 软件来调整字体缩放率:

这样就可以在高分屏下获得一个比较好的效果,手边这台 MacBook air 中的一台采用 GNOME 的 arch linux 虚拟机,使用全分辨率的情况下,整个显示效果还算可以接受:


推荐安装使用 Tree Style Tab 插件实现侧边插件,其他插件也可自行探索。
地址栏输入
about:config —> toolkit.legacyUserProfileCustomizations.stylesheets —> true
帮助—> 更多排障信息—> 配置文件夹—> 打开文件夹—> 新建 chrome 文件夹
把配置文件 userChrome.css 放置在 chrome 目录下
内容从这里 拷贝。
最后完全关闭 Firefox 重启即可。
从 Notion 导出 md 格式的文档,默认会对文件名做一些处理,

大概是这样,会讲过长的文档名称压缩,在首行使用 md 一级标签标记文件名,再将文档截断为图示的样子。
这样的文档导入其他笔记软件是很不方便的,特别是内容多了就很不方便。
为此准备了一个 perl 的脚本来处理。
整理前文件清单如下:

整理后自动将第一个一级标题作为文件名,并自动将文件名等于首行标题的首行去掉。
以下是 Perl 源码。整理后直接运行即可:
#!/usr/bin/perl -w
use strict;
use warnings;
my $target_dir = $ARGV[0];
collate_name_with_title($target_dir);
scan_with_remove_first_line($target_dir);
sub collate_name_with_title {
my $target_dir = shift;
my $file_re = qr/^.*\s[0-9a-z]{5}\.md$/;
for my $file (glob "$target_dir/*.md") {
if ($file =~ $file_re) {
open my $fh, '<', $file or die "Can't open $file: $!";
my $line = <$fh>;
close $fh;
chomp $line;
if ($line =~ /^#\s(.*)$/) {
my $title = $1;
$title =~ s/\s//g;
$title =~ s/[|.:\/]/-/g;
print "$file: \t$title\n";
rename $file, "$target_dir/$title.md";
}
}
}
}
sub scan_with_remove_first_line {
my $target_dir = shift;
for my $file (glob "$target_dir/*.md") {
open my $fh, '<', $file or die "Can't open $file: $!";
$file =~ /$target_dir\/(.*)\.md$/;
my $file_name = $1;
my @lines = <$fh>;
close $fh;
my $title = $lines[0];
#print "$file_name: \t$title";
chomp $title if $title;
if ($title && $title =~ /^#\s(.*)$/) {
$title = $1;
if ($title eq $file_name) {
#print "file: $file\n";
#print "$file_name: \t$title\n";
print "remove first line: $file\n";
remove_first_line($file);
}
}
}
}
sub remove_first_line {
my $target_file = shift;
open my $fh, '<', $target_file or die "Can't open $target_file: $!";
my @lines = <$fh>;
close $fh;
shift @lines;
open my $fh, '>', $target_file or die "Can't open $target_file: $!";
print $fh @lines;
close $fh;
}
运行方法:
$ perl collate-md-name-export-by-notion.pl ~/Documents/MyWiki/Note
...
记得备份数据,避免误操作导致数据丢失!
偶然逛 ArchWiki 的 微信 页面,发现在 Arch 下提供了很多种运行微信的方案,在我的 ARM 版 ARCH 下搜索了一下,发现提供了一个基于 electron 直接可用的微信:
$ sudo pacman -Ss wechat
archlinuxcn/electronic-wechat-uos-bin v2.3.1.fix-2
Linux 下更好用的微信客户端. 更多功能, 更少bug. 使用Electron构建, 利用UOS请求头修复了登陆问题.
archlinuxcn/wine-wechat-setup 1.2-1
Setup and run WeChat Windows version with Wine (Chinese version)
安装 electron 版的尝试一下:
$ sudo pacman -S electronic-wechat-uos-bin
安装没有任何困难,直接安装,运行起来发现是可以正常使用的:

扫码登录,毫无障碍:

简单看了一下,应该是基于网页版的,目前是可以正常使用。
如果这个方案不行,还可以尝试一下 wine 版的。
总之,在 Linux 下使用微信,应该是不成问题了。
最近在探索 m1 MacBook 下运行 linux 虚拟机的可能性,计划未来在 linux 虚拟机下完成所有开发工作,parallels desktop 天然提供了 debian/ubuntu/fedora 等 linux 发行版支持,但是在我个人使用场景中还是多少有些问题。
几天在浏览 archWiki 时发现社区提供了一个直接可用的 parallels Deskto 虚拟机模版,可以用来快速配置 linux 开发环境,比较省时省力,在这里介绍几个关键步骤。
在这里下载 Arch Linux Parallels Desktop 虚拟机模版。
下载完毕后解压,使用 Parallels 打开即可。
在 对应的 README 文件中可以看到默认的用户名和密码。
如果一切顺利,启动虚拟机,即可看到一个配置好的 arch linux。
# 根据需要配置镜像后进行
# 建议配置 ustc arch arm 镜像后继续
pacman -Syyu # 升级系统中全部包
pacman -S sudo vim xf86-video-vesa
# 创建非 root 账号
useradd -m -G wheel -s /bin/bash myusername
passwd myusername
# 最后记得赋予新用户 sudo 权限
# 安装 kde plasma 桌面
pacman -S plasma-meta konsole dolphin
# plasma-meta 元软件包、konsole 终端模拟器和 dolphin 文件管理器
pacman -S plasma-wayland-session xdg-desktop-portal
sudo pacman -S packagekit-qt5 packagekit appstream-qt appstream # 确保 Discover(软件中心)可用,需重启
systemctl enable sddm
systemctl start sddm # 直接启动显示管理器
# 安装中文字体
sudo pacman -S adobe-source-han-serif-cn-fonts wqy-zenhei # 安装几个开源中文字体。一般装上文泉驿就能解决大多 wine 应用中文方块的问题
sudo pacman -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra # 安装谷歌开源字体及表情
sudo pacman -S kdeconnect # 安装 KDE Connect,可以用智能手机控制 KDE
实测默认无法通过 Parallels 菜单栏的安装 Parallels Tools 来安装辅助工具,需要手动挂载安装。
前往 /Applications/Parallels Desktop.app/Contents/Resources/Tools 文件夹,找到 prl-tools-lin-arm.iso 文件,手动挂载到虚拟机中,运行安装即可。

以上描述了几个需要特别注意的点,之后按照需要配置系统即可:

搭载 Apple Sillicon 芯片的 MacBook 目前软件生态还有待完善,虚拟化方面,我尝试了 UTM、VMware Fusion 和 Parallels Desktop 三种虚拟化桌面软件,以及 Debian/Fedora/Ubuntu 等系统。
体验下来 Parallels Desktop 比较省时省力,系统方面貌似 Arch 和 Debian 下 aarch64 的软件生态相对完善,如果有时间建议都尝试一下选择适合自己的。
体验下来我个人更倾向 Arch Linux,KDE 支持比较好,软件生态也相对更好。不管选择什么,记得日常配置多打快照,避免哪一天滚挂了。
相比于 macOS,linux 下的 aarch64 软件生态相对更好些,特别是开源软件和终端下常用的软件,未来我是打算将所有开发和终端操作全部放在 linux 虚拟机中使用了。
PicGo 是一款很好用的图床辅助软件,一直在使用。
最新下载最新版的 picGo arm64 版安装,提示已损坏,执行以下命令解决:
sudo xattr -d com.apple.quarantine "/Applications/PicGo.app"
参考
copilot.el 是一个非官方实现的 Github Copilot 插件,实测在 x86/arm64 、macos/debian 下均可使用,下面介绍最关键的几个配置步骤。
e, editorconfig 插件以上是对您环境最基础的要求,确认无误后继续下一步。
官方可以直接引用 github 链接作为插件,但考虑到网络环境问题,在这里使用手动克隆代码库来引用。
运行以下命令将 copilot.el 克隆到 emacs 配置文件夹:
$ cd ~/.emacs.d
$ git clone https://github.com/zerolfx/copilot.el.git
克隆完毕后,在 emacs 配置中将 copilot.el 载入,并配置一些必要的内容:
比如将以下内容写入 ~/.emacs.d/init.el
;;copilot
(add-to-list 'load-path
(expand-file-name (concat user-emacs-directory "copilot.el")))
(require 'copilot)
;; copilot automatically provide completions
(add-hook 'prog-mode-hook 'copilot-mode)
; complete by copilot first, then auto-complete
(defun my-tab ()
(interactive)
(or (copilot-accept-completion)
(ac-expand nil)))
(with-eval-after-load 'auto-complete
; disable inline preview
(setq ac-disable-inline t)
; show menu if have only one candidate
(setq ac-candidate-menu-min 0))
(define-key copilot-completion-map (kbd "
<tab>") 'copilot-accept-completion)
(define-key copilot-completion-map (kbd "TAB") 'copilot-accept-completion)
以上配置均来自代码库最基础的配置,可以实现最直观的功能。
配置完毕后即可开始使用,首先需要登陆:
# 登陆
M-x copilot-login
如果一切顺利,完成授权,就可以开始使用了。
重启 Emacs,尝试一下吧:

# 从模版批量派生,100 虚拟机仅需2 min
for i in {001..128}; do qm clone 336 11$i --name stl-ceph-bare-node$i --pool stl-ceph-cluster2; done
# 使用 cloud-init 批量配置 ip,需在模版提前装好 cloud-init 软件包并添加设备
for i in {1..128}; do num=`echo $i | awk '{printf("%03d",$0)}'`; qm set 10${num} --ipconfig1 ip=10.24.88.$i/24,gw=10.24.88.254; done
# 批量断开网络接口
for i in {002..128}; do qm set 10$i --net0 virtio,link_down=1; done
# 批量开机
for i in {001..128}; do qm start 10$i; done
# 批量销毁
for i in {001..111}; do qm destroy 10$i; done vmdk 转为 qcow2qemu-img convert -O qcow2 test.vmdk test.qcow2
注:-O 是大写的字母 O
qm importdisk 命令导入$ qm importdisk
<vmid> <images-name> <storage pool> --format=<disk-fs>
# vmid:vm的id 例如102
# images-name:磁盘镜像的名字
# storage poll: 存储磁盘镜像的位置,一般写存储的名称,如pve01data
# disk-fs: 磁盘镜像格式 raw/vmdk/qcow2