0%

Arch Linux over Yoga 3 11

  • “你最喜欢的Linux发行版是什么?不要跟我说是Ubuntu。”

  • “额…用过的不多,就是Ubuntu了。”

  • 然后就被安利成功了……


简单介绍一下

Arch是一个相当简单和轻量级的发行版,官方主打的目标也就是想要把它保持得简单点。

但是Arch中的软件库管理却做得非常出色,秒杀apt-get和yum等等好大一截,以至于成功被安利并且使用了一段时间之后,真心不想再切回其他的了。

Arch除了官方的软件库之外,还提供了很多社区维护的软件甚至还有很多用户提供的安装脚本。比如很多本身还在Github上面处于开发阶段的软件,只要Arch的库中有人给它写过安装脚本,都能通过Arch的软件库命令一键安装,中间缺少的各种依赖都会自动补全。堪称神器。

Arch给我的感觉相当极客,它的发行版采用滚动更新的方式,不像其他发行版会有版本号什么之类的,而且始终保持里面的软件是最新的。(CentOS默认的gcc版本一直在4.5以下没变过好像,其他的发行版也有类似的情况,都是保证某个版本稳定适用。Oh,装完Arch,下完gcc,习惯性地看一下“–version”,返回来个5.3吓我一跳。)

然后就是系统特别干净,除了Linux最基础的东西以外,其他的几乎什么都没有加进去,由用户根据自己的需求来定制。


安装过程

在虚拟机上测试了一下之后,果断在Yoga上装上了Arch。

记录这个是方便以后自己再装的时候可以不用再去网上找别的教程。


在空U盘上刻好Arch的镜像,在Yoga的BIOS里面关掉SecurityBoot,然后就可以引导进安装盘了。

相对Ubuntu这些发行版来说,Arch的精简和轻量级简直令人发指。它安装的时候只给了一个root登录的shell,然后需要通过命令来完成整个安装过程。

shell登录之后目录下只有一个install.md的文件,其中记录了安装流程,可供安装过程中阅读使用,这些内容跟Arch官网Wiki中的Installation Guide是一样的。额,然而我觉得还是另外开个电脑上看Installation Guide比较好,上面有其他详细内容的页面链接。

按照教程上的提示安装过程大致是以下几个部分:

1 Pre-installation
1.1 Set the keyboard layout
1.2 Connect to the Internet
1.3 Update the system clock
1.4 Partition the disks
1.5 Format the partitions
1.6 Mount the partitions

2 Installation
2.1 Select the mirrors
2.2 Install the base packages
2.3 Configure the system
2.4 Install a boot loader
2.5 Reboot

3 Post-installation

Pre-installation

这部分主要是安装前的准备工作,比如检查硬盘情况,设置网络等等。

键盘和时间设置可以跳过,到后面安装的过程中会另外设置。

首先要检查网络,Arch的安装对网络的要求非常高,因为需要在安装过程中直接下载/更新一些软件,如果网络不太好,那…

还是不要装了吧。。。

最简单的情况是连在路由器上的有线网,最好是不需要什么特殊的登录等等的要求,直接插上网线就能用的情况。

以下介绍的部分都是建立在网卡能直接被安装shell驱动的情况,如果驱不起来…那就over了,查查wiki怎么解决吧

在shell中调用:

1
$ ip link

可以查看当前的网络硬件情况,比如网口在里面显示的是eth0,那么:

1
$ ip link set eth0 up

应该就能启动了,然后

1
$ dhcpcd

自动获取完地址之后应该就能ping通外网了。


Yoga上面没有自带网口,我也没有USB网卡可以用,幸好Arch的安装shell中也包含了无线网的连接工具。

首先使用:

1
$ wifi-menu -o

这个工具会扫描区域内的无线网信息,设置好连接的SSID和密码等信息之后生成连接网络用的配置文件。使用时会弹出一个对话框界面,非常方便。

生成的配置文件会被写在/etc/netctl/目录下,以网卡编号命名的一个文件中。把这个文件复制一份或者直接改名成wireless-wpa。

之后,运行:

1
$ netctl start wireless-wpa

就能连接之前设置好的无线网了。


之后是对硬盘的检查和分区。

1
$ fdisk -l

可以显示当前硬盘上各个分区的情况,然后根据需要把分区格式化成ext4格式,主要用到的几个指令是:

1
2
3
4
5
6
7
$ cfdisk            磁盘分区

$ mkfs.ext4 xxxx 把分区格式化成ext4格式,后面跟上分区表,一般是/dev/sda1、/dev/sda2这些

$ mkswap xxxx 把分区格式化成交换分区,后面跟上分区表

$ swapon xxxx 启用交换分区,后面跟上分区表

分区结束之后,开始挂载各个分区到系统中:

1
$ mount xxxx yyyy   把硬盘上的xxxx挂载到yyyy目录下

首先挂载”/“目录,然后在目录下创建其他目录,并继续挂载其他的部分,比如我的Yoga下:

1
2
3
4
$ mount /dev/sda8 /mnt
$ cd /mnt
$ mkdir home
$ mount /dev/sda7 /mnt/home

然后开始正式安装的过程。

Installation

为了后面能够更快地安装,在正式安装的时候可以修改一下/etc/pacman.d/mirrorlist文件中记录的安装源地址,删掉国外的,留一个速度最快的国内源就好…比如科大源。

然后输入:

1
$ pacstrap /mnt base

命令,开始安装基础的Linux。命令执行结束之后可以看到/mnt目录下面已经出现了常见的Linux根目录结构了。

调用:

1
$ genfstab -p /mnt >> /mnt/etc/fstab

生成分区的挂载表。

至此,在安装shell上的工作全部完成,并且已经安装到硬盘上的Linux系统也已经初具雏形了,调用以下指令将根目录切换到硬盘上去,之后所有的工作都是在已经安装好的新Linux系统中完成:

1
$ arch-chroot /mnt /bin/bash

最后的bash也可以不加,这样切换过去之后默认用的是sh作为shell。

设置计算机的名字:

1
$ echo Yoga-arch > /etc/hostname

设置时区:

1
$ ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

用vi打开/etc/locale.gen文件,把需要用到的语言从里面注释掉,一般常用的是en_US和zh_CN,选择UTF-8的就行。

然后调用:

1
$ locale-gen

生成语言信息。

还要在配置文件中加一下:

1
$ echo LANG=your_locale > /etc/locale.conf

这些全部设置好之后就可以开始最后的系统安装了:

1
$ mkinitcpio -p linux

至此,然后可以改一下root的密码,至此,Arch linux系统安装结束。


然而,系统虽然是装好了,引导还没添加。之后可以选择自己常用的引导工具来引导Arch。

当然这些在Arch里面是没有的,需要自己安装:

1
$ pacman -S grub efibootmgr os-prober

grub是linux下最常用的引导软件,efibootmgr用于efi模式的支持,os-prober用于处理多系统的引导。

1
2
3
4
5
6
$ cd /boot
$ mkdir efi
$ mount /dev/sda2 /boot/efi
$
$ grub-mkconfig -o /boot/grub/grub.cfg
$ grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub

首先将efi分区挂载到系统中,然后使用grub-mkconfig将整个硬盘上的系统信息写入配置文件,然后使用grub-install安装引导。

重启即可引导进入Arch!!!

!!! 然而这时候得等一下 !!! 要是什么都不注意直接重启可能就会悲剧

前面说过新装好的Arch里面什么都没有,可能连网络连接的工具都是不完整的,这个时候最好检查一下网络管理软件netctl等等是不是已经装上了,否则重启之后可能没有办法连上网。


Post-installation

装好Arch之后就是各种驱动,图形界面等等的安装了,记录一下通常需要做的事情:

1
2
3
4
$ pacman -S alsa-utils      # 声卡驱动
$ pacman -S xorg xorg-xinit # X图形环境
$ pacman -S gdm gnome # gnome图形界面以及gdm启动器
$ systemctl enable gdm # 设置gdm开机启动

然后重启一遍,进入系统就OK了。

后话

Yoga对Arch的支持还算可以,基本的设备都是能够驱动起来的,几个Fn键也都是正常的,目前还没有解决的问题是触摸屏不支持多点触控,触控板也不太好用,总体上还是比较满意的。

记录一下Arch下常装的几个工具:

yaourt

Arch默认的软件库管理工具是pacman,yaourt是在pacman的基础上做的一个辅助工具,安装完之后语法与原始的pacman相同,但是功能更为强大。

安装方式是在/etc/pacman.conf中加入yaourt的源

1
2
3
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch

然后同步一下源信息并安装即可:

1
2
$ pacman -Sy
$ pacman -S yaourt

zsh

通常bash是最为常用的shell,zsh搭配“oh my zsh”的配置脚本…只能说非常强大。

回头可以专门写一篇讲zsh的。

xorg/wayland+gdm+gnome

图形界面。

file-roller

gnome下解压用的插件。

在Yoga上的Bug记录

触摸屏的多点触控问题

装了不少驱动,最好还是发现Linux对触摸屏的支持不算太好,其实多点触控已经驱起来了,但是没有对应的动作可以执行。

Wiki上写了一个叫Touchegg的软件可以配置多点触控的动作。

搞了半天装上之后发现还是不能用,虽然成功地识别了多点,然后在一个文档里面找到了一句话大意是说pinch(捏)等等动作支持没完成什么的…

坑爹呢这是!

论坛上有人说gnome和某些应用已经支持了多点触控,回头找找看官方的说明。

4月15号更新

Oh,我的天!

晚上回来yaourt -Syu一下更新了一堆东西,比较重要的东西有xinput的输入驱动,然后chrome也更新到了版本号50。打开chrome之后惊喜地发现多点触控能用了,双指放上去可以成功缩放页面了。

不知道是驱动更新了还是chrome的功能。


应该是chrome的功能,因为我现在在vs code下面开了双栏,然后左右不能够独立触摸滑动,我记得windows下是可以的。

之前在chrome下做过一些设置,可惜49版没有什么效果,在chrome地址栏输入:

1
chrome://flags

然后跳出来的页面中开启Enable touch events项。

NetworkManager在gnome下显示故障

4月9号还是10号左右的时候gnome有过一次更新,新版本后NetworkManager在设置里面打开就出问题了,各种显示不正常。原本以为是我的Arch装了什么奇怪的东西起冲突了,后来发现实验室的台式机也是这个状况,找到原因是gnome更新带来的bug。

4月13号gnome再次有个小版本更新,故障消失,不得不赞一下Arch滚动更新之迅速,一有bug应该马上就会有人上报。

gdm下触控板只能移动不能点击

gdm下触摸屏能点,但是触控板不能点,然后触摸屏还不太好用,所以挺不舒服的。

在Arch的gdm Wiki页上找到了解决方案:

触控板点击的这个功能在gdm下是默认关闭的(话说我不明白为啥要关?)

直接在命令行下:

1
$ sudo -u gdm gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click true

即可。

然而我这里输这个居然dbus报错了,不知道什么情况,还好还有GUI下的解决方法:

1
2
$ xhost +SI:localuser:gdm
$ sudo -u gdm dconf-editor

首先处理一下gdm的访问权限,然后在dconf-editor的图形界面下面把tap-to-click改过来。

重启gdm即可。

Arch和Windows时间不一致问题

发现一个非常蛋疼的事情,Arch和Windows下如果都开了自动同步网络时间的话,同步的结果会差8个小时。而且它们都会修改bios里面的硬件时间,在Arch下设置好时区,把时间改到正常了,然后切到Windows下面就不正常了;如果在Windows下面改过来了,切到Arch下又会不正常。

刚装的时候未果,只好把Arch的自动同步时间关掉,然后时区选到英国那边的零时区,这样才保证两边不会出问题。

今天回来好好研究了一下,发现这是因为两个系统默认读取硬件时间之后的设定不同。Windows会把bios上的硬件时间直接作为localtime,而Arch会把硬件时间认为是UCT的标准时间,然后加上由于时区产生的8小时算出来计算机所在的当地时间。

据Arch的Wiki上说,Windows这样做是不太好的,会有夏令时计算上的bug,也建议用户不要使用localtime,而采用Arch的标准。

幸运的是,我们国家貌似没有夏令时的制度,那么果断把Arch的UCT改成localtime即可。

1
timedatectl set-local-rtc true

然后用status可以检查配置:

1
timedatectl status

打开之后,下面会有个warning,提示说localtime怎么不好啊,什么的,无视之就好,重启一下检查bios和Windows时间是不是都是一致的。

给Arch安装微软字体

Arch中有一些编写好的aur包比如ttf-ms-win10ttf-ms-win8等等,支持快速地给系统装上windows对应版本上面自带的那些字体,比如我还是非常喜欢微软雅黑的,而且默认gnome下面的中文偶尔在某些应用下面显示得怪怪的,看起来非常地不舒服。

于是直接yaourt -S ttf-ms-win10,结果安装给我报错了,说是需要下载的文件找不到。

这我就呵呵了,想着是不是这个aur包的PKGBUILD文件写的有问题啊,需要下载的网址写错了什么的。

重新yaourt装了一下,然后查看PKGBUILD,原来这里面写得很清楚:微软的字体是有license限制的,不是开源随便用的,因此字体以及license文件都需要自己想办法弄到,放到PKGBUILD的目录下面再执行安装即可。

来源则比较直观,就是windows的安装镜像或者一个现成的windows系统。这个时候就体现出双系统的好处了,直接mount把C盘挂载过来,然后准备把字体直接复制过来就好了。

但是在这里直接复制的时候发生了点问题,显示出来中间有很多文件是软链接,而且系统无法定位到是链接到哪里去了,遂失败。

于是重启系统切到windows下面,特意查看了一下,这时候并没有发现里面的文件有链接的迹象啊?

Anyway,把C盘的字体文件重新复制了一份到D盘。复制快结束的时候资源管理器报告有重复文件,问我是否替换,没怎么注意结果切回Arch安装的时候发现少了文件。试图在PKGBUILD里面直接删掉那个文件的记录,结果下面居然还有个sha256sums校验,我了个去。遂失败。(至今不明白为什么复制会出问题,C盘这个字体文件夹有点神奇)

于是再重启切回到windows下面,这次我在命令行里面复制,再切回去的时候文件终于都正常了。

把D盘挂载上,然后把字体复制到/tmp/yaourt-xxx的对应目录中去,继续安装,完成。

IPv6

2018-03-30

重新把实验室配的台式机也装成了 Arch,发现 IPv6 虽然能够获取到地址,但是就是死活 ping 不通任何一个。

解决方案是 Arch Wiki 上提到的启用 Privacy Extension。

暂时不明具体的原理,但是改完 sysctl.d 以及 NetworkManager 的设置之后,重启生效。