折腾Manjaro

前言

Windows 10实在是比较慢,而且内存也挺费的。在折腾过NOI Linux(Ubuntu 14.04)、Debain、Puppy、Tiny Core,当然还有可怕的Arch之后,我在q234rty等的推荐下试用基于Arch的,默认含有图形界面的Manjaro。

截至写这里时,Manjaro已经超过Mint成为近6个月排名第一的发行版,而Ubuntu排在第三,差距较大。

安装

去官网下载镜像,然后刻录到一张DVD+RW,即可擦写的DVD。这是经常折腾OS必备的。不过DVD还是比较慢,启动就需要两三分钟。与Arch需要敲一堆命令安装不同,Manjaro非常方便,而且有GUI。易用就是与Arch最大的差异。我选择的桌面环境是XFCE。

应用级别的问题与处理

输入法是一个重要的问题,最终的解决方法是Fcitx+Google拼音,还是不错的。Google拼音还不如Fcitx原生的拼音。不过需要加入配置文件,把候选词改成9比较好。

软件包管理有GUI,不过应该要开启AUR及更新,能获取很多软件。比如vscode、Chrome,甚至还有TIM、QQ可以直接安装使用。不过Firefox总有些问题,所以才换成Chrome,当然Chromium也可以。

TIM建议使用人气高的TIM 2.0.0,比更新的稳定。

LibreOffice有很大的问题,还是换成WPS比较好。

一般遇到找不到文件xxx,最好用ln创建链接,重命名或者复制也可以解决。注意用法为ln src dest

很多Fx的快捷键都被占用。比较不明显的是Alt+F12,作用是窗口置顶!

系统级别的笔记

设置PATH

怪我基础不好,到现在还不知道怎么设置PATH。查阅资料可知有两种方法:

  • 临时性:$ export PATH="$PATH:<newpath>"
  • 用户永久性:按上述方法修改~/.bashrc,然后source ~/.bashrc

Chrome内核经常卡死问题

包括Chrome和VS Code。Chrome可以禁用硬件加速来部分解决,而VS Code看起来不行。目前的解决方法是将NVIDIA驱动改成专有,暂时没有问题。

GRUB修复

最严重的问题是更新了Windows 10 1803(rs4)之后,GRUB就被覆盖了,即使把MBR用BOOTICE改回GRUB 2也没用。其实这种情况我以前也见过,上次是因为改了分区表,如果用EasyBCD还不能成功引导的话,我会选择直接放弃Linux,转回Windows。然而,我决定尝试修复。

经过探索,用LiveCD修复比较有效。另一种用grub rescue的无法解决我的问题。

如果比较担心Windows的安危,可以用Windows PE或RE启动,用BOOTICE修改MBR为NT 6.x,就能顺利进入Windows,以进一步查找资料。否则,从LiveCD启动,然后执行以下步骤:

1
2
3
4
5
6
$ fdisk -l
# 找到分区,设为/dev/sdxy。
$ mount /dev/sdxy /mnt
# 挂载到/mnt。
$ grub-install --root-directory=/mnt /dev/sdx
# 安装GRUB。然后重启即可。

无法加载内核模块

一次内核更新后,我得到了这个更惊喜的错误。这下可好,根本进不了了。本来打算回滚内核的,但并不会。后来分析了错误问题。一个为systemd-modules-load的服务启动失败,查阅发现与/etc/modules-load.d/下的配置文件有关。有效的也是引起问题的模块来自VirtualBox和NVIDIA驱动。

在我的情况下,tty仍然可以登录,因此可以直接修改。如果不行就得用LiveCD或其他发行版。

解决方法是直接删掉这两项,注意删软件包而不是刚才的配置文件,否则无效。然而我一时间忘了NVIDIA的专有驱动的名字,还好有mhwd驱动管理工具。其基本用法如

命令行 作用
-l或无参数 列出所有设备
-h 显示帮助
-i <usb/pci> <configs> 安装配置
-r <usb/pci> <configs> 删除配置

千万不要忘了指定接口类型,容易删除驱动,但安装可能会遇到问题。

重启后可以启动,唯一的问题是网卡没有工作。使用以下命令查看问题:

1
2
3
4
5
6
$ lspci -v
# 列出所有PCI设备,可以找到网卡的模块记为<module>。
$ dmesg | grep <module>
# 找到模块相关的消息。
$ sudo modprobe <module>
# 启动未启动的模块。

对于我的情况,共有两个模块,其中一个启动失败。启动另一个模块可以使用了,重启后问题圆满解决。别忘了重新安装先前移除的软件包。

清理文件

由于只给分了20GB,空间一直很紧张。现在又装了TeX Live,一周没来,装200+个更新的空间都不够了。

  • 清理软件包缓存:pacman -Sc,一般不要-Scc,过于aggressive
  • 清理无用依赖:pacman -Qdtq | pacman -Rs -。以上两项最为有效,来自罗塞塔。
  • 用Filelight分析占用空间最多的文件吧。

OI相关

对拍

这是最大的跨平台问题,最为讨厌的是bash没有pause命令,需要用read命令模拟。还有条件控制语句极为奇怪。

1
2
3
4
5
6
7
8
9
#!/bin/bash
for ((i=1;;i++)) do
echo No. $i
./gen
./usr
./std
diff name.out name.ans
if [ $? -eq 1 ]; then read -rsp $'Wrong Answer\n' -n 1; fi
done;

输出太慢?表达式支持取模,可以用if [ $(( $i % 100 )) -eq 0 ]; then echo $i; fi之类的,这就比批处理灵活多了。所以bash大法好!

简易的评测

vscode有个好插件IORun,能跨平台解决单文件的评测,这样就不用编译CCR了。AUR里还没有CCR,也许去上传一个?

但是IORun的设置都是全局的,需要到配置文件里改编译指令、时限,而且不支持空间限制。

ulimit

以前很少用,而且主要是改栈空间,其实也可以设置内存限制。-a显示所有限制。-s为栈空间,-v为虚拟内存空间(和内存空间也没什么区别吧)。注意只在当前终端有效,如果想修改全局(试好再改),就改.bashrc吧,参见上面的环境变量。

但是默认行为是修改软、硬限制(-HS),只能改小,不能改大。如果只修改软限制(-S)就能解决这个问题,当然再怎么改也不能超过硬限制。

又到出题的时候。发行版用TeX Live,只要安装texlive-bintexlive-coretexlive-langchinesetexlive-latexextratexlive-science就可以编译基本的中文文档,当然我用Xe。中文字体与Windows下有些不同,一般感觉比较好看,但是PDF也比Windows下的大。

但是还是老问题,因为用了LaTeX Workshop插件提供高亮,latexindent总是报错。正确的解决方法是确保perl已安装,然后启动cpan(大概是perl的包管理工具),可能要回答一堆问题才能进入命令行,然后install Log::Log4perl,也就是缺的那个包即可。但别高兴得太早,因为还缺大量依赖,经过了更多的make test之后,终于好了。