Featured image of post 笔记本 ArchLinux 的一些折腾

笔记本 ArchLinux 的一些折腾

最近把本科时用的一台垃圾笔记本重装了一个 ArchLinux 系统,这里简单记录了下我的配置过程。

最近把本科时用的一台垃圾笔记本重装了一个 ArchLinux 系统,这里简单记录了下我的配置过程。主要解决几个没有被系统很好兼容的 Fn 键,双显卡的使用。如果有不妥的地方也希望大家指正。

# LUKS on btrfs

笔记本电脑当然要把根分区加密。

bash
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

conf
...
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 的参数。

conf
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 ,写入以下内容:

xorg
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 的开关,看起来它也不听话。因为它并不是一个在硬件上关闭无线网卡的按钮。 通过以下命令来捕获按键事件:

bash
xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'

它能被识别为 246 , 也就是 XF86WLAN 键。 这样的话方案就很明确了,我只需要自己在 i3 的配置里加上这个按钮的功能(打开/关闭 wifi)。我的网络管理后端使用的是 NetworkManager, 所以我就搓了个脚本来控制无线网络,并在 i3 的配置里调用这个脚本:

bash
bindsym XF86WLAN exec --no-startup-id ~/.config/i3/toggle_wifi
bash
#!/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

xorg
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 包即可。

bash
sudo pacman -S xf86-video-intel

# NVIDIA 显卡驱动

安装 nvidia 包即可。

bash
sudo pacman -S nvidia

不过我由于最新内核对我的部分硬件支持存在 bug,我暂时使用的是 lts 内核。所以我安装的是 nvidia-lts 驱动。

# 配置 PRIME render offload

安装 nvidia-prime 包,一般就行,不需要额外配置。

bash
pacman -S nvidia-prime

这时候重启系统,通过 prime-run 命令就能使指定程序在 NVIDIA 显卡上渲染了。

当然你可以这样测试来比较两次输出的不同:

bash
glxinfo | grep "OpenGL renderer"
prime-run glxinfo | grep "OpenGL renderer"

# 亮度调节

不过,这样配置还是出现了一些问题。 我发现,我的笔记本上的亮度调节按键并没有作用。由于我使用的 i3wm 不是桌面环境,调节亮度需要自己手动设置。 安装 xorg-xbacklight 包,在 i3 的配置中添加以下内容:

bash
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

xorg
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 了……

Licensed under CC BY-NC-SA 4.0
最后更新于 2022 年 11 月 2 日 12:36 CST