最近把本科时用的一台垃圾笔记本重装了一个 ArchLinux 系统,这里简单记录了下我的配置过程。主要解决几个没有被系统很好兼容的 Fn 键,双显卡的使用。如果有不妥的地方也希望大家指正。
LUKS on btrfs
笔记本电脑当然要把根分区加密。
cryptsetup -y -v luksFormat /dev/sda2
cryptsetup open /dev/sda2 cryptdev
mkfs.btrfs /dev/mapper/cryptdev
mount /dev/mapper/cryptdev /mnt
然后就可以分子卷了……
配置 Bootloader
/dev/sda1
我把它挂给 /boot
,因为我打算用 systemd-boot
引导,所以 /boot
直接做 EFI 分区了。配置的话需要注意两个地方,一个是 systemd-boot
的配置,还需要添加 initramfs 的模块,wiki
上都有详细的介绍。
主要有两套方案,busybox 的 encrypt
钩子 和 systemd 的 sd-encrypt
钩子:
我使用的是 sd-encrypt
钩子,编辑 /etc/mkinitcpio.conf
加入如下内容后 mkinitcpio
:
...
HOOKS=(base systemd autodetect keyboard sd-vconsole modconf block sd-encrypt lvm2 filesystems fsck)
...
同时内核参数配置如下:
我这里同时配置了使用 FIDO2 设备解锁,需要使用
systemd-cryptenroll --fido2-device=auto <BLOCK-DEVICE>
来注册 FIDO2 设备,如果不需要的话可以去掉fido2-device
的参数。
rd.luks.name=<uuid of /dev/sda2>=luksdev rd.luks.options=discard,fido2-device=auto root=/dev/mapper/luksdev rw rootflags=subvol=/@
每次开机的时候会在 initramfs 加载的时候就要输入密码插入物理密钥来解锁根分区。为了方便起见, display-manager 我开启了自动登录,这样就不用多次输入密码了。
触控板
触控板的支持还是比较好的,基本上开箱即用。唯一的问题,也是老生常谈的问题,就是我需要根据我的习惯把触控板改成双指自然滚动,当然这些设置如果有桌面环境应该都可以在设置中心里配置,而我没有使用桌面环境,需要手动编辑配置文件。
安装 xf86-input-libinput
包,然后在 /etc/X11/xorg.conf.d
里配置 20-touchpad.conf
,写入以下内容:
Section "InputClass"
Identifier "libinput touchpad catchall"
MatchIsTouchpad "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
Option "NaturalScrolling" "on"
Option "Tapping" "on"
Option "DisableWhileTyping" "on"
EndSection
这样打开了自然滚动,敲击模拟单击,打字时临时禁用触控板的功能。
WIFI 开关键
笔记本电脑上有个 wifi 的开关,看起来它也不听话。因为它并不是一个在硬件上关闭无线网卡的按钮。 通过以下命令来捕获按键事件:
xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
它能被识别为 246
, 也就是 XF86WLAN
键。
这样的话方案就很明确了,我只需要自己在 i3 的配置里加上这个按钮的功能(打开/关闭 wifi)。我的网络管理后端使用的是 NetworkManager
, 所以我就搓了个脚本来控制无线网络,并在 i3 的配置里调用这个脚本:
bindsym XF86WLAN exec --no-startup-id ~/.config/i3/toggle_wifi
#!/bin/sh
status=$(nmcli radio wifi)
case $status in
enabled)
nmcli radio wifi off
;;
disabled)
nmcli radio wifi on
;;
esac
DPMS
只要内核启用了 ACPI,DPMS 是会自动启用的。但是我发现在 lightdm 下,我默认启用 DPMS 似乎并没有生效,一晚上屏幕都没有自动关闭。
个人觉得可行的解决方法有两个,一个是在 lightdm 配置的 greeter-setup-script
里自己用 xset
强行设置 DPMS 的时间;另一个是手动设置 xorg.conf
。
我选择了第二种方式,/etc/X11/xorg.conf.d
下新建一个配置 10-monitor.conf
:
Section "Monitor"
Identifier "LVDS0"
Option "DPMS" "true"
EndSection
Section "ServerFlags"
Option "StandbyTime" "5"
Option "SuspendTime" "5"
Option "OffTime" "5"
EndSection
双显卡
硬件型号:Intel HD Graphics 5500 & NVIDIA GeForce 910M
安装驱动
Intel 显卡驱动
安装 xf86-video-intel
包即可。
sudo pacman -S xf86-video-intel
NVIDIA 显卡驱动
安装 nvidia
包即可。
sudo pacman -S nvidia
不过我由于最新内核对我的部分硬件支持存在 bug,我暂时使用的是 lts 内核。所以我安装的是 nvidia-lts
驱动。
配置 PRIME render offload
安装 nvidia-prime
包,一般就行,不需要额外配置。
pacman -S nvidia-prime
这时候重启系统,通过 prime-run
命令就能使指定程序在 NVIDIA 显卡上渲染了。
当然你可以这样测试来比较两次输出的不同:
glxinfo | grep "OpenGL renderer"
prime-run glxinfo | grep "OpenGL renderer"
亮度调节
不过,这样配置还是出现了一些问题。 我发现,我的笔记本上的亮度调节按键并没有作用。由于我使用的 i3wm 不是桌面环境,调节亮度需要自己手动设置。
安装 xorg-xbacklight
包,在 i3 的配置中添加以下内容:
bindsym XF86MonBrightnessUp exec --no-startup-id xbacklight -inc 5.0 #increase screen brightness
bindsym XF86MonBrightnessDown exec --no-startup-id xbacklight -dec 5.0 #decrease screen brightness
并在 /etc/X11/xorg.conf.d
下新建一个配置 20-nvidia.conf
:
Section "Device"
Identifier "iGPU"
Driver "intel"
Option "Backlight" "intel_backlight"
EndSection
Section "Screen"
Identifier "iGPU"
Device "iGPU"
EndSection
Section "Device"
Identifier "dGPU"
Driver "nvidia"
EndSection
这样就可以在使用双显卡的同时使用 intel_backlight
了。
信息
一翻折腾之后发现很多东西配不好,笔记本最后还是选择回归 KDE 了……