Skip to content

Commit 2037eae

Browse files
committed
new article: suck less on windows
1 parent b1898c1 commit 2037eae

File tree

1 file changed

+246
-0
lines changed

1 file changed

+246
-0
lines changed

content/post/suckless-windows.md

Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
1+
---
2+
title: 痛的少一些!Windows
3+
date: 2025-01-08T20:36:52+08:00
4+
tags: [msys2,windows,suckless]
5+
6+
---
7+
8+
Windows 痛点例举,
9+
10+
- 祖传蓝屏(这一点在 XP 上尤为严重,Win7 以上已经少见许多)。
11+
- 静默更新。悄悄下载更新,强制更新,莫名其妙跳出来说要更新,关机时强迫更新。恶心的默认策略!
12+
- 万年难用的资源管理器,不带标签页,窗口开一堆。
13+
- 开发上来说,编译工具链体验比不上 linux.
14+
15+
虽然 Windows 很难用,但并不妨碍它桌面市场占用率第一的地位。在生活或者工作中,我还是无法避免地被动使用 windows. 因此,我希望通过一些简单定制,让我的使用体验能好一些。
16+
17+
安装 MSYS2
18+
----------
19+
20+
如果你在 windows 上做开发,必定会装 git bash,而它提供的终端就是 MINGW(Minimalist GNU for Windows)。它的主要作用是提供 windows 版本的 gcc 编译工具链。它自带了一些 linux 基础命令,仅仅是基础。所以 [MSYS2][1] 出现了,它在 MINGW 的基础上,提供了更多的命令,并且自带了一个著名的包管理器—[Pacman][2]. 没错,正是 Archlinux 的包管理器。如此一来便可以在在 windows 上使用相同的 linux 命令行,而这些都是适配原生 windows 的,并非虚拟机或者子系统之类的。并且想要啥软件包,直接通过 pacman 安装也非常方便。
21+
22+
### MinGW、Clang、UCRT?
23+
24+
安装完之后,会产生多个 launcher,选择哪个呢?[这里][3]有详细的对比。其实就是工具链和运行时库的区别。一般用 gcc 建议选择 MINGW64,用 llvm 建议使用 CLANG64.
25+
26+
### 一点配置
27+
28+
网上的配置[帖子][4]还是比较多的,这里简单列举几个常用的。
29+
30+
#### 修改镜像
31+
32+
`/etc/pacman.d`文件夹里面包含几个 mirrorlist,新版的 MSYS2 里面默认已经有中科大源。直接编辑将其提前即可。。
33+
34+
```
35+
Server = http://mirrors.ustc.edu.cn/msys2/
36+
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/
37+
```
38+
39+
#### 禁用某些源
40+
41+
编辑/etc/pacman.conf,注释掉不想要的源。
42+
43+
> vim 和 zsh 在 mingw 里面,mingw64 和 clang64 里面都没有。
44+
45+
参考:https://my.oschina.net/zuozhihua/blog/8757266
46+
47+
#### 继承环境变量
48+
49+
如果你之前安装过 git bash,现在你的电脑里面应该有两套 mingw(一个 git bash 安装的,一个是 MSYS2 安装的)。Git bash 里面自带 vim. 而 MSYS2 里面可以通过包管理器安装 vim. 然而重要的是 windows 系统程序的路径需要继承下来,这样可以方便的在 mingw 里面直接调用 windows 程序例如
50+
51+
- notepad.exe:记事本
52+
- cmd:命令提示符
53+
- explorer:文件管理器
54+
55+
要继承 windows 系统环境变量,找到 MSYS2 的安装目录(例如,D:\msys64)下有 mingw64.ini,将里面的
56+
57+
```
58+
MSYS2_PATH_TYPE=inherit
59+
```
60+
61+
取消注释,再次打开 mingw64 即可继承系统环境变量。
62+
63+
> 上面只改了 MinGW64 的 launcher,如要改其他可如法炮制。
64+
65+
#### 更改默认 shell
66+
67+
launcher.ini(例如 mingw64.ini)里面添加环境变量
68+
69+
```
70+
SHELL=/usr/bin/zsh
71+
```
72+
73+
参考:https://superuser.com/questions/961699/change-default-shell-on-msys2
74+
75+
#### 添加到 vscdoe 集成终端
76+
77+
设置里面加上,参考:https://gist.github.com/dhkatz/106891324c9624074a84d11e2691144b
78+
79+
```json
80+
{
81+
"terminal.integrated.defaultProfile.windows": "MSYS2 MINGW64",
82+
"terminal.integrated.profiles.windows":{
83+
"MSYS2 MINGW64": {
84+
"path": "D:\\msys64\\usr\\bin\\bash.exe",
85+
"args": ["--login", "-i"],
86+
"env": {
87+
"MSYSTEM": "MINGW64",
88+
"CHERE_INVOKING": "1",
89+
"MSYS2_PATH_TYPE": "inherit"
90+
}
91+
},
92+
"PowerShell": {
93+
"source": "PowerShell",
94+
"icon": "terminal-powershell"
95+
},
96+
"Command Prompt": {
97+
"path": [
98+
"${env:windir}\\Sysnative\\cmd.exe",
99+
"${env:windir}\\System32\\cmd.exe"
100+
],
101+
"args": [],
102+
"icon": "terminal-cmd"
103+
},
104+
"Git Bash": {
105+
"source": "Git Bash"
106+
}
107+
}
108+
}
109+
```
110+
111+
安装 Everything
112+
---------------
113+
114+
Everything 是一个 windows 文件搜索程序,搜索速度快,轻量易用,支持正则表达式。完爆 windows 资源管理器自带的搜索功能。直接至官网下载安装即可。
115+
116+
安装 QtTabBar
117+
-------------
118+
119+
[QtTabBar][5] 是一款 windows 资源管理器扩展工具。之前说了,windows 自带的文件管理器不支持标签页。这才有了 QtTabBar. 值得一提的功能点:
120+
121+
- 深度资源管理器标签支持,甚至控制面板都是一个标签页的事儿。
122+
- 支持用户自定义组,放置常用路径(类似于书签)。
123+
- 支持多语言,官网下载翻译包即可。
124+
- 桌面快捷操作。桌面双击即可触发浮动菜单,常用路径一键即达。
125+
- 不俗的文件预览功能。鼠标悬停即可预览目录、图片、视屏等。预览图片真的很实用!
126+
127+
微软拼音添加小鹤双拼
128+
------------------
129+
130+
作为双拼爱好者,当初去知乎吸收了一下各种双拼方案对比,决定学小鹤,至今已经忘记它有啥优缺点了,反正用着挺好就是了。
131+
132+
方案来自互联网。在 CMD 中直接粘贴
133+
134+
```
135+
reg add HKCU\Software\Microsoft\InputMethod\Settings\CHS /v UserDefinedDoublePinyinScheme0 /t REG_SZ /d "小鹤双拼*2*^*iuvdjhcwfg^xmlnpbksqszxkrltvyovt" /f
136+
```
137+
138+
PS,微软大法好!在曾经的 XP 时代,搜狗拼音还是很好用的,如今已是臃肿不堪。后来一直在找替代,知道微软拼音横空出世。至此 windows 输入法无需再纠结。其界面节约,打字流畅,又支持添加小鹤双拼,已经很够用了!
139+
140+
另辟蹊径之 linux 虚拟机
141+
----------------------
142+
143+
无论是 WSL 还是 MSYS2,启动起来都有些卡,而且换 zsh 之后就更卡了。目前还不清楚原因,所以才有了这种尝试。Windows 下可以使用 virtualbox 安装一个 linux 虚拟机,然后开启 sshd,配置好端口转发(或者虚拟网卡)即可在宿主机上 ssh 连接虚拟机,体验上和 linux 远程开发机相差无几。
144+
145+
使用 VirtualBox 安装一个 Archlinux 虚拟机重点步骤:
146+
147+
1. 安装 VirtualBox,
148+
2. 下载 archlinux 镜像(LiveCD),
149+
3. 从镜像启动虚拟机,执行安装流程,这一步参考 archwiki 中的 installation guide.
150+
151+
值得注意的是,虚拟磁盘创建分区的时候,建议直接选择 [MBR 分区表][6]。我一开始选择 GPT 分区表,多挂载一个 boot 分区,反复装了 3 次,装完启动引导重启都提示找不到可启动的设备。反正是虚拟机,也不用考虑引导多个系统,直接 MBR 分区表,还可以少挂载一个 boot 分区。
152+
153+
装完之后安装一些常用软件,
154+
155+
- vim
156+
- zsh
157+
- openssh
158+
- **NetworkManager**
159+
160+
> LiveCD 里面网络配置是开箱即用的,但这并不表示装好的系统网络配置和 LiveCD 一样。当你兴奋地重启进新系统之后,很可能发现里面没网。因此,一定要在安装过程中(arch-chroot)把[网络管理器][7]的包装好。
161+
162+
启动进新系统之后,
163+
164+
```bash
165+
systemctl start NetworkManager.service # 启动网络管理器
166+
systemctl enable NetworkManager.service # 设为自动启动
167+
```
168+
169+
### 配置端口转发
170+
171+
系统启动之后,不必装图形界面。直接启动一个 ssh sever,然后在 windows 上 ssh 连上即可。使用体验和远程 Linux 开发机一致。但宿主机(Host)和虚拟机(VM)的网络不一定直接相通,还须做一点配置。
172+
173+
端口转发配置参考 [SSH 连接 NAT 网络模式 VirtualBox 虚拟机][8]
174+
175+
![](https://oscimg.oschina.net/oscnet/74b6fb8a7d1a0b05b644a38bba037cdfd8e.jpg)
176+
177+
### 配置固定 IP
178+
179+
端口转发配置简单易用,但有一个小缺点。每次暴露一个端口,都需要新增一条规则。比如我转发 22 端口给 ssh,那我 sftp 的 23 端口呢?这时候又得新增一条规则,比较麻烦。
180+
181+
我们可以通过增加一张虚拟网卡,配置静态 IP 地址和主机网络互通。此后直接访问这个 IP 带端口即可访问虚拟机。配置参考 [Win10 宿主机 ssh 连接 VirtualBox 里的 archlinux 虚拟机][9]
182+
183+
需要注意一点,配置接口(interface)静态地址并使之持久化生效是网络管理器的职责。所以一定要通过网络管理器的接口设置 IP 地址。之前安装的 NetworkManager 提供`nmcli`命令行配置工具。详细用法参考 [NetworkManager - ArchWiki][10].
184+
185+
使用示例,
186+
187+
```bash
188+
yychi@~/bin> nmcli dev
189+
DEVICE TYPE STATE CONNECTION
190+
wlp2s0 wifi 已连接 LovelyLife
191+
lo loopback 连接(外部) lo
192+
193+
yychi@~/bin> nmcli connection
194+
NAME UUID TYPE DEVICE
195+
LovelyLife 92506e38-1823-4f66-1a89-75a62ecabe74 wifi wlp2s0
196+
lo 7e2fe31d-8ba1-1823-ad29-239857601abb loopback lo
197+
198+
yychi@~/bin> nmcli connection edit LovelyLife
199+
200+
===| nmcli 交互式连接编辑器 |===
201+
202+
正在编辑已有的连接 "802-11-wireless""LovelyLife"
203+
204+
输入 "help""?" 查看可用的命令。
205+
输入 "print" 来显示所有的连接属性。
206+
输入 "describe [<设置>.<属性>]" 来获得详细的属性描述。
207+
208+
您可编辑下列设置:connection, 802-11-wireless (wifi), 802-11-wireless-security (wifi-sec), 802-1x, ethtool, match, ipv4, ipv6, hostname, link, tc, proxy
209+
nmcli> set ipv4.addresses 192.168.56.100/24
210+
nmcli> set ipv4.gateway 192.168.56.1
211+
nmcli> save
212+
persistent temporary
213+
nmcli> save persistent
214+
成功地更新了连接 "MeijmTenda" (ab876b5a-a02e-43c5-8d65-8da29891b0c1)。
215+
```
216+
217+
### 配置 ssh 别名
218+
219+
在宿主机(Host)上配置,
220+
221+
```ini
222+
# FILE:~/.ssh/config
223+
224+
Host varch
225+
HostName 192.168.56.100
226+
User xxxx
227+
```
228+
229+
此后就可以直接`ssh varch`了。
230+
231+
小结
232+
---
233+
234+
至此,我在 windows 上安装了一些小工具、配置了一个可用的 linux 环境。与我个人来说,大幅提升了 windows 的易用性。
235+
236+
237+
[1]: https://www.msys2.org/
238+
[2]: https://wiki.archlinux.org/title/Pacman
239+
[3]: https://www.msys2.org/docs/environments/
240+
[4]: https://www.cnblogs.com/wswind/p/10650126.html
241+
[5]: http://qttabbar.wikidot.com/
242+
[6]: https://wiki.archlinux.org/title/Partitioning#Example_layouts
243+
[7]: https://wiki.archlinux.org/title/Network_configuration#Network_managers
244+
[8]: https://www.cnblogs.com/phoebus-ma/p/18219807
245+
[9]: https://www.cnblogs.com/arisskz6/p/16983492.html
246+
[10]: https://wiki.archlinux.org/title/NetworkManager#Edit_a_connection

0 commit comments

Comments
 (0)