Parallels m1 安装 arch 虚拟机并配置 KDE 和辅助程序

最近在探索 m1 MacBook 下运行 linux 虚拟机的可能性,计划未来在 linux 虚拟机下完成所有开发工作,parallels desktop 天然提供了 debian/ubuntu/fedora 等 linux 发行版支持,但是在我个人使用场景中还是多少有些问题。

几天在浏览 archWiki 时发现社区提供了一个直接可用的 parallels Deskto 虚拟机模版,可以用来快速配置 linux 开发环境,比较省时省力,在这里介绍几个关键步骤。

获取 arch linux 虚拟机模版

在这里下载 Arch Linux Parallels Desktop 虚拟机模版。

下载完毕后解压,使用 Parallels 打开即可。

在 对应的 README 文件中可以看到默认的用户名和密码。

如果一切顺利,启动虚拟机,即可看到一个配置好的 arch linux。

安装 KDE 桌面

# 根据需要配置镜像后进行
# 建议配置 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 Tools

实测默认无法通过 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 虚拟机中使用了。

参考文献

arm64 版 picgo 提示已损坏解决办法

PicGo 是一款很好用的图床辅助软件,一直在使用。

最新下载最新版的 picGo arm64 版安装,提示已损坏,执行以下命令解决:

sudo xattr -d com.apple.quarantine "/Applications/PicGo.app"

参考

Emacs 集成 Github Copilot

copilot.el 是一个非官方实现的 Github Copilot 插件,实测在 x86/arm64 、macos/debian 下均可使用,下面介绍最关键的几个配置步骤。

准备

  • Emacs >= 27
  • 安装 node.js
  • emacs 安装好 e, editorconfig 插件

以上是对您环境最基础的要求,确认无误后继续下一步。

配置 copilot.el

官方可以直接引用 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,尝试一下吧:

参考文献

PVE 批量创建、配置虚拟机 IP、网卡、启停及销毁

# 从模版批量派生,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

PVE 虚拟机导入 vmdk 磁盘

  1. 先把磁盘镜像上传到 pve 服务器中,若空间不足可挂载本地存储;
  2. 把 vmdk 转为 qcow2
qemu-img convert -O qcow2 test.vmdk test.qcow2

注:-O 是大写的字母 O

  1. 使用 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

参考文献

每次离开的时候才会特别想家

今年出人预料的能回家了,匆匆去,匆匆回,真的离开了家乡,才开始想家。

2021 年春节,咨询街道被告知回去就隔离 14 天; 2022 年春节,咨询街道被告知回去就隔离 7+7。 2023 年春节,终于迎来全面解封。

抒情,大概就是将内心的那种复杂的感觉表述出来吧。

初一那天,在外面开了 3 间房才勉强住下。

这些多年不见的请朋好友呀,又太多的话想要说,两年没回家,这里也发生了很大的变化,从人到事都是如此。

在家的这几天,忙忙碌碌,小房子里快要呆不下了。虽忙碌,但却非常的充盈,每天用不完的力气。不断的打扫房间、收拾碗筷,迎接新的客人。

每天都吃的很饱,亲戚们都好热情。

去走亲戚,也是不断的有惊喜出现。

但离别的日子,逐渐临近。

满打满算,这次在家呆了 8 天,但怎么就过的这么快呢。走的那天,还有说不完的话,心理有太多的感悟。

就这么稀里糊涂,又搭上了返程的飞机。回到这个暂时毫无生气的地方。

这座陌生的城市,暂时只有我一个人,常常会有孤独感。

我是不满家乡的生活,希望在外闯出一片天,创造更多可能。

想到这里,就一步一步地走吧。

在这座陌生的城市,我想要有所成就,有所建树,扎根立业,一定需要付出几倍于常人的努力,经受数倍于常人的考验才行呀。

冰冷的小房间,努力的让自己的生活井井有条,不断的计划、规划、落实,将理想中的样子不断落地。

这样,未来总有一天,会是充盈、美满、充满希望的!

顺利返程,这个年就算过完了(流水账)

昨夜十一点,回到了居住地, 看着熟悉的一切, 心里感触良多,离开的这 7 天,仿佛过去了很久很久。

一方面,两年没回家了,23 年终于回了一趟家, 另一方面,第一次这么远距离的旅行,总担心有什么突发状况, 好在一切顺利,当前已顺利返程,下次再回家就安心许多了。

这次回家,感受到太多的不一样,上一次回家是 2021 年 5 月 1 日。 上一次在家过年是 2020 年春节,那年在家度过大学最后一个学期,2020 年 6 月 1 日入职第一份工作,离开了家乡。

两年没回家,家里的变化很大,家人的变化也很大。

先说说家里的变化, 石河子的大街小巷装潢一新,最熟悉的几个街道开了许多新店,能撑过 4 个月封城的,似乎还是那些多年以前就在这里的店面。

石河子有了万达广场,非常时髦,一切都是新奇的,特别是这里的人非常时髦,一点不比内地大部分城市差,甚至还要高过一截。

景观河还在那里,世纪广场和游憩广场过年这几天有花灯秀,军垦博物馆的外围多了些军垦特色的藏品展,能把藏品展示在户外,而且不用担心藏品折损,还与环境融为一体,大概也只有这里了吧。

北泉镇这边,通往石河子更加方便了,多条断头路被修通,公交线路焕然一新,“进城”更加方便了。

几年的温度似乎比往年要冷一些,记得前几年过年,春节后冷冻在室外的年货都要解冻了,爷爷奶奶不得不把那些被迫解冻的饺子蒸熟来吃。

今年,走向室外居然需要一些勇气,戴着口罩走两步眼镜就是一层雾,如果不管再走两步就结冰了。降雪似乎也更多了些,来的这几天大部份时间都飘有小雪,瑞雪兆丰年,这是个好兆头。

过年,似乎这里的家人都没有往年那么积极了,三十中午还是冷冷清清,奶奶一个人待在家里。到了大年初一,房子里已经装不下了,四代同堂,好不热闹。

晚上,我们这代人一起去看了电影《流浪地球 2》,没想到电影院这一层人挤人,打电动的、看电影的、四处游玩的,就连检票都排起了长长的队伍,这是我多年来第一次见到的。

新疆人性格相比南方略微急躁,石河子人稍好,虽然还是稍微急躁,但大都充满善意。去超市购买护肤品,只是太干需要润一些,在一众昂贵的护肤品中,给我推荐的是最实用 9.9 一瓶的维 E 乳。

第一次发压岁钱,也是在今年,家里有了小孩子,就一切围绕小孩子在转了。

跟家里人聊了很多,发现家里人变化也很大。几位亲戚搬到了乌鲁木齐,过的很好很开心,很为他们感到开心。

开车进入乌鲁木齐,瞬间有一种拥挤感,从道路、到街道,路上的行人行色匆匆,地铁上一半汉族人,一半少数民族,真是别样的风景。这里的亲戚真的好热情,跟小时候一样,看得出他们在这里活的很开心,跟这边的亲戚联络也很好,真心为他们感到开心,从奎屯搬到乌鲁木齐发展,绝对是一个正确的抉择。

当我还沉浸在归家的喜悦、反差的感受,在思考还有很多事情没有做的时候,我的航程已经临近。

乌鲁木齐地铁,这几天免费坐,但乘客依然稀少。

来到乌鲁木齐地窝堡国际机场,姐姐送我到机场,感慨良多。通过总是比内地严格一些的安检,进入四处都是新疆特色产品的机场,即将登机,坐在登机口附近,这里大约三分之一的少数民族,一部分人在说粤语,还有许多一家三口出行的人。多年后我会是怎样的情况呢,感慨万千。

飞机平安落地,延迟起飞,提早落地,走出登机口,发现还是自己出发时的那个登机口,有点意思:

后来我就回来了,居住的公寓楼附近人并不多,一些饭店已经开始营业,这天是初五,到处都在迎财神。新的一年就要来临了。

这几天在业余时间开始研究使用 Emacs,发现 org-mode 真是个好东西,相比于更加流行的日程规划软件,更像日程规划软件,更加符合直觉,具有更多可能性,配合使用 beorg 感觉很不错。

至此,就要准备开始新的一年了,2023,赶走了瘟神,又回到了以前的样子,希望新的一年一切顺利,国泰民安,平平安安,幸福安康。

广州还是常常可以看到烟花的,很棒。

顺利返程,意味着这个年,就算过去了,即将开始新一年的挑战。

这次返乡,出乎预料,感触良多,似乎再次充满了力量。

相信信任的力量,我们要自信,然后继续前行!

使用 dos2unix 解决跨操作系统换行符问题

dos2unix 是将 Windows 格式文件转换为 Unix/Linux 格式的实用命令。

unix2dos 则是和 dos2unix 互为孪生的一个命令,将 Linux&Unix 格式文件转换为 Windows 格式文件的命令。

各个操作系统安装方法如下:

OS X
    brew install dos2unix
Debian
    apt-get install dos2unix 
Ubuntu
    apt-get install dos2unix 
Alpine
    apk add dos2unix 
Arch Linux
    pacman -S dos2unix 
Kali Linux
    apt-get install dos2unix 
CentOS
    yum install dos2unix 
Fedora
    dnf install dos2unix 
Windows (WSL2)
    sudo apt-get update sudo apt-get install dos2unix 
Raspbian
    apt-get install dos2unix 
Dockerfile
    dockerfile.run/dos2unix 
Docker
    docker run cmd.cat/dos2unix dos2unix

下面以 15分钟学会Emacs Lisp 教学源文件为例展示效果。

$ dos2unix learn-emacs-lisp-zh.el
dos2unix: converting file learn-emacs-lisp-zh.el to Unix format...

转换前后的对比如下:

上方是转换后的文件,下方是转换前的文件,使用 Emacs 打开。

可以看到,转换前该文件使用的是 Windows 风格的换行符,转换后该文件使用 Unix 风格换行符。

Unix 系统中:每行结尾只有 “”,即 \n; Windows 系统中:每行结尾是 “”,即 \r\n; Mac 系统中:每行结尾是 “”,即 \r“。

参考文献