天工开物 #5 我的 Linux 开发机

作者在文中分享了选择Linux开发机的心路历程,最终选择了基于Arch Linux的Garuda Linux。在尝试了Ubuntu和Arch Linux后,发现Garuda Linux在图形桌面环境和NVIDIA显卡驱动上有更好的解决方案。文章详细描述了各个发行版的优缺点,包括Ubuntu的稳定性和易用性,以及Arch Linux的简洁与高度可定制性。此外,还探讨了输入法、字体和应用软件的配置,最终确定了使用Fcitx5 + Rime输入法和Noto字体的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先说一下结论:最终我选择了基于 Arch Linux[1] 的 Garuda Linux[2] 发行版作为基础来搭建自己的 Linux 开发机。

4885f745f93bfb098ddea286af17d03e.png

Neofetch 时刻

发行版的选择

在上周末的这次折腾里,我一共尝试了 Garuda Linux 发行版,原教旨的 Arch Linux 发行版,以及众所周知的 Ubuntu[3] 发行版这三个选择。虽然最后做了逃兵直接摆烂 Garuda Linux 配好的图形桌面环境,算不上符合 Arch 之道[4]的玩法,但是该走的过场还是走了的。

机器的选择

我想配置一个纯粹的 Linux 环境的想法大概酝酿了一年多了。从接触 io_uring[5] 相关功能的代码,到其他依赖 Linux 内核版本或生态工具的功能,我从前同事 @w41ter[6] 那里接受了一个理念:“开发机的环境最好跟生产环境是一致的这样也才好调试问题。”

配置一个原生的 Linux 环境(相较于虚拟机),最舒服的其实是公司提供高配的开发机。例如在某司时用上的 256 GB 内存 96 核 NVMe 盘的机器。毕竟对 Linux 的执念也不过是一个开发环境,而不是必须要一个桌面环境。可惜公司的机器跟特定公司绑定,而且不太适合开展一些未必跟公司工作紧密相关的工作和共享文件,更麻烦的是,往往访问公司机器还得连接内网,这就让“完全使用 Linux 开发”的目标难以实现。

另一个被否定的做法是个人购买云服务器。这个思路我在读书的时候就试过了,最近也还考察过目前的行情。结论就是:太贵。一台上面提到的公司级开发配置的机器,云厂商对个人是卖不到这个配置的。大约打个五折以上可以起卖,每个月少说五千块钱,多了上万。还别说这个机器只是租给你,上面的数据不在本地,而且机器在哪个区域联网都有不同的问题。个人装机花个小几万能配得比这配置好不少,还是自己的资产,用个几年不在话下。这么一看,个人用买云服务器纯属冤大头。

最后,办法就是自己买台机器装上 Linux 系统。由于国内几乎所有机器都预装了 Windows 系统,弃之可惜,所以只能麻烦点装双系统。硬件配置我自己是不会配的,找的好兄弟一揽子解决,这里就不介绍了。

装双系统这件事我在大学时候就做过,当时还干过替换内核和开发内核模块,还有利用显卡写 Lua Torch 之类的事情,所以做起来其实是轻车熟路的。但是一直以来都觉得同一块盘上分区逼死强迫症,也确实对使用多少有点影响,这次我就干脆加了一块 2TB NVMe 的盘来折腾 Linux 系统。

Garuda Linux

我一开始选的就是 @Manjusaka_Lee[7] 在推特上介绍过的他为自家 HomeLab 选型的 Garuda Linux 发行版。在一个非常清晰的教学视频的帮助下,我很快就完成了安装。

How to Dual Boot Garuda Linux and Windows 10 SAFELY[8]

然后就发现 N 卡不愧是 Linux 的两大噩梦硬件之一。

79386b37ca0832fc2817e773c2360cbc.jpeg

你知道我要说什么

我使用的是 GTX 4090 Ti 的显卡,毕竟这次是一揽子计划,估计一劳永逸个五年起步,而且买新不买旧嘛。但是 4090 确实是太新了,而黄老爷自然是不太在乎开源拖拉机能不能用上他的新卡的。Garuda Linux 在我的机器上,如果选择安装开源驱动,Live USB 都起不来;如果选择安装专有软件驱动,则会在安装完成后进入系统的时候起不来。

所幸 @Manjusaka_Lee 哥哥也遇到了这个问题,所以这个问题是可解的,咒语全文如下:

# 首先,选择专有驱动安装系统。此时,直接启动系统会进入 Color buffer .. 卡死
# 此时,重新进入 Boot 页面,选择从 Live USB 登录,在 Live USB 环境中完成修复:


# 1. chroot
# Find your system disk by `lsblk -f`
# https://forum.garudalinux.org/t/how-to-chroot-garuda-linux/4004
sudo mkdir -p /mnt/broken
sudo mount /dev/<your system disk partition (
连接天工开物代码需要使用MQTT协议,可以使用LinuxC编写程序进行连接。下面是一个简单的示例程序: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <mosquitto.h> #define MQTT_HOST "localhost" #define MQTT_PORT 1883 #define MQTT_TOPIC "tgkw" void on_connect(struct mosquitto *mosq, void *userdata, int rc) { printf("Connected to MQTT broker with result %d\n", rc); mosquitto_subscribe(mosq, NULL, MQTT_TOPIC, 0); } void on_message(struct mosquitto *mosq, void *userdata, const struct mosquitto_message *message) { printf("Received message on topic %s: %s\n", message->topic, (char *) message->payload); } int main() { struct mosquitto *mosq = NULL; int rc; mosquitto_lib_init(); mosq = mosquitto_new(NULL, true, NULL); if (!mosq) { fprintf(stderr, "Error: Out of memory.\n"); exit(1); } mosquitto_connect_callback_set(mosq, on_connect); mosquitto_message_callback_set(mosq, on_message); rc = mosquitto_connect(mosq, MQTT_HOST, MQTT_PORT, 60); if (rc != MOSQ_ERR_SUCCESS) { fprintf(stderr, "Unable to connect to MQTT broker: %s\n", mosquitto_strerror(rc)); exit(1); } mosquitto_loop_forever(mosq, -1, 1); mosquitto_destroy(mosq); mosquitto_lib_cleanup(); return 0; } ``` 上面的程序使用mosquitto库连接到MQTT服务器,并订阅了主题"tgkw"。当收到新的消息时,会调用on_message函数进行处理。 可以根据实际情况修改MQTT_HOST、MQTT_PORT和MQTT_TOPIC等参数,以及编写相应的代码进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值