LGiki's Blog

愿每个人都能被这个世界温柔相待

联想R7000开箱上手以及ArchLinux安装

今天是7月3日,距离我拿到这台2020款的联想R7000正好过去了一个月,用了一个月时间也有资格来聊聊联想的这台机器了。

先说说我这台联想R7000的具体配置吧:

1
2
3
4
5
6
CPU: AMD Ryzen 7 4800H with Radeon Graphics (16) @ 2.900GHz
Memory: 2 * 8G DDR4 3200MHz
GPU: NVIDIA GeForce GTX 1650
SSD: Samsung PM981a 512G
SSD: Intel 760P 512G
Wireless LAN Card: Intel Wi-Fi 6 AX200

其中512G的Intel 760P是我自己加上的,机子原厂只自带了512G的Samsung PM981a。

这里简单放上一张neofetch截图:

这款电脑我是以首发价格5599在京东入手的,算上一些优惠折扣,最终到手价是5529。要问这个价格买这个配置的电脑值不值,从我自己的使用体验来说是相当值的,这个预算如果去买Intel平台的笔电肯定买不到性能比这个强的。

一个月使用下来对这台电脑各方面都十分满意,不过还是鄙视一下联想R7000屏幕/内存/SSD抽奖。我买到的这一台是龙腾的屏幕,听说京东方的屏幕会比龙腾的屏幕好点,不过我也没见过京东方屏幕的R7000到底是怎么样的,简单测试了一下屏幕没有坏点也就懒得换货了,毕竟换回来的说不定还是龙腾的屏幕,最起码现在这个屏幕比我之前那个暗影精灵2看着舒服,就凑活着用吧(又不是不能用)。

既然聊到了前一台电脑,那就说说吧,四年前高考结束那会儿买的惠普暗(gǔ)影(bāo)精灵2花了4999,除了电池鼓包这个通病之外(也正是因为这个原因,以后再也不会考虑惠普的任何产品),整体用下来还是挺满意的,大学四年用下来没遇到过什么大毛病,后面我将内存升级到16G之后,日常使用更是没什么问题。唯一让我忍受不了想换电脑的就是CPU性能了,i5-6300hq的性能日常开个IDE写代码、编译程序的时候多多少少会有一点拖泥带水的感觉,CPU的占用总会上升到100%,随之而来就是各种操作都变得十分卡顿。

而R7000用下来,不管是写Java、Golang还是前端,编译速度都相当快,Jetbrains家的IDE索引速度也快了不少,写代码再也不会因为编译速度慢而浪费时间了。写Android后台开个虚拟机也十分流畅。

AMD 4800H这颗8C16T的CPU日常使用完全遇不到占用达到100%的情况,基本都在50%以下,CPU日常懒得动。

至于游戏方面的体验,因为我最近没怎么玩游戏,再加上买这台电脑并不是为了玩游戏的,所以还没有详细测试,只简单试了试CSGO全低特效能有200+fps左右,我已经很满足了。

其实从配置上来看,这是一台高U低显的电脑,至于为什么会选择这样配置的电脑,是我不想玩游戏了吗?那肯定不是,对于游戏我依旧是充满着热爱的,虽然现在玩游戏的时间变得越来越少了。选择这个配置的主要原因是,笔记本的CPU和显卡大多数是无法更换的,唯一能升级的也就内存跟SSD,用几年过后,CPU和显卡逐渐就跟不上主流了,这时候如果想升级配置就只能选择一整台换掉,我觉得这样太亏,所以笔记本电脑并不想选择配置太高的,在预算尽量少的情况下最大限度满足自己的需求就行,以后不再需要便携性的时候整个台式机比笔记本香多了,还能享受到DIY的乐趣呢。

联想的R7000要让我挑缺点的话,除了抽奖问题之外,我认为还有以下两个缺点:

  • 这台机子有两个M.2接口,但是其中一个M.2插槽跟SATA硬盘位是互斥的,没法同时安装SATA硬盘跟SSD
  • 机子的16G内存是由两条8G内存组成的双通道,并且机器也只有两个内存插槽,后期如果要升级内存,就得买8G以上的内存条来换掉才行

说了这么多,总结起来还是那六个字母、两个符号:AMD, YES!

PS:Linux之父Linus Torvalds也换到了AMD平台,相信未来Linux内核对AMD平台的支持情况会越来越好。

ArchLinux安装

新机器到手,除了赶紧把自带的预装了联想全家桶的Windows 10家庭中文版换成专业版之外,最重要的就是装上ArchLinux了!平时写代码啥的还是ArchLinux用起来舒服,不仅仅是字体渲染看着比Windows清晰舒服,更重要的是很多事情都可以命令行一把梭,还不容易有各种各样奇奇怪怪的毛病(例如在开始菜单加入广告推荐Edge浏览器)。

ArchLinux的安装只需要按照官方Archwiki上的Installation guide一步步操作就行了,不过安装过程中如果是选择通过WiFi来接入互联网那马上就会遇到第一个问题:通过wifi-menu或者其他相关命令无法正常连接WiFi。

WiFi连接

第一次启动ArchLinux的安装镜像,习惯性使用wifi-menu连接WiFi,直接就报错了。难道是AX200这张无线网卡太新了,安装镜像还不支持?检查了一下驱动发现是没问题的。

翻了翻Google才发现,原来是机子所有的无线电接口都被bloacked了,解决方法也很简单,通过rfkill命令就能直接把所有的无线电接口都unblock:

1
rfkill unblock all

执行完这条命令之后再执行rfkill list应该就能看到如下结果,所有的无线电接口的blocked状态都是no。

1
2
3
4
5
6
7
8
9
10
11
12
13
➜  ~ rfkill list
0: ideapad_wlan: Wireless LAN
Soft blocked: no
Hard blocked: no
1: ideapad_bluetooth: Bluetooth
Soft blocked: no
Hard blocked: no
2: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
3: hci0: Bluetooth
Soft blocked: no
Hard blocked: no

这时候就能正常使用wifi-menu或其他相关的命令行连接WiFi,继续进行后续的安装操作了。

屏蔽nouveau

不知道是不是因为GTX 1650这张显卡比较新,nouveau用起来总是会有一些奇奇怪怪的问题,偶尔还会导致系统关机的时候卡住,内核日志里也总会有很多关于nouveau的报错。

因为打算装NVIDIA的闭源驱动,所以我直接屏蔽了nouveau,省得再出现一些奇奇怪怪的问题,具体的屏蔽方法就是在/etc/modprobe.d目录下新建一个disable-nouveau.conf文件并写入以下内容:

1
blacklist nouveau

这样下次开机进系统就不会加载nouveau驱动了,内核日志中也不会再出现一大堆关于nouveau的报错。

屏幕亮度调节

这是我刚装上ArchLinux时遇到的第一个问题,屏幕亮度无法调节,开机直接就是最高亮度。

当时翻遍了ArchWiki和Google,尝试了很多解决方法,包括在Kernel启动参数后加上各种奇奇怪怪的启动参数(acpi_osi=! acpi_osi="Windows 2009"acpi_backlight=vendor等),直接向/sys/class/backlight/amdgpu_bl0/brightness中写入亮度数值都不行,然后就彻底放弃了,最高亮度凑活着用吧。

后来有一次从Windows重启到Linux的时候意外发现:先启动到Windows,然后在Windows上面选择重启,之后再进Linux就能正常调节亮度了。当时没有其他解决方法,所以只能每次用Linux都先启动到Windows,然后再重启进ArchLinux。

后面滚到5.7.6内核之后就能正常调节屏幕亮度了,但是随之而来又带来了新的问题,系统在播放音频或者是视频的时候,有一定的概率会卡死,就跟这个帖子描述的类似:https://bbs.archlinux.org/viewtopic.php?id=256929,kernel的日志也是一样的,初步怀疑是kernel某个patch有问题,又懒得自己编译内核,所以就先滚回5.7.5内核,最高亮度先用着,坐等内核更新。

终于,昨天更新了5.7.7内核之后,亮度调节正常,播放音/视频也不会再导致系统卡死了。R7000装Linux遇到屏幕亮度无法调节的可以将内核升级到5.7.7试试,应该就能调节了。

AMD/NVIDIA双显卡切换

R7000是支持在BIOS中设置成独显直连的,但是我并不想让Linux直接在独显上跑,不仅费电,还容易发热,日常写代码感觉也不需要用上独显,所以我还是更喜欢双显卡切换,毕竟集成显卡也是花了钱买的嘛,怎么能就这么放着不用呢。

之前暗影精灵2上面是使用bumblebee的方案来管理双显卡的,但是bumblebee似乎只支持Intel+NVIDIA双显卡,不支持AMD+NVIDIA双显卡。那就只能寻找新的解决方案了。

所以就去爬了爬ArchWiki上的NVIDIA Optimus,最终决定采用optimus-manager来管理双显卡。

安装显卡驱动

AMD集成显卡的驱动使用xf86-video-amdgpu,NVIDIA独立显卡的驱动使用NVIDIA闭源驱动:

1
2
sudo pacman -S xf86-video-amdgpu
sudo pacman -S nvidia nvidia-settings nvidia-utils lib32-nvidia-utils

安装Optimus Manager

首先需要安装optimus-manager, 因为是AMD平台,所以不能直接安装原版的optimus-manager,必须安装AMD分支版本optimus-manager-amd-gitAUR

1
yay -S optimus-manager-amd-git

同时bbswitch也得替换成bbswitch-ati-gitAUR

1
yay -S bbswitch-ati-git

都安装好了之后开启服务:

1
sudo systemctl enable optimus-manager.service

同时需要确保/etc/X11/xorg.conf/etc/X11/xorg.conf.d 下面没有显示相关的配置文件

配置Optimus Manager

1
2
sudo mkdir -p /etc/optimus-manager
sudo cp /usr/share/optimus-manager.conf /etc/optimus-manager/optimus-manager.conf

然后编辑/etc/optimus-manager/optimus-manager.conf文件,根据文件内的注释说明进行optimus-manager的配置。

这里贴一下我自己用的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
[optimus]

# This parameter defines the method used to power switch the Nvidia card. See the documentation
# for a complete description of what each value does. Possible values :
#
# - nouveau : load the nouveau module on the Nvidia card.
# - bbswitch : power off the card using the bbswitch module (requires the bbswitch dependency).
# - acpi_call : try various ACPI method calls to power the card on and off (requires the acpi_call dependency)
# - none : do not use an external module for power management. For some laptop models it's preferable to
# use this option in combination with pci_power_control (see below).
# With that option set, you can also use the scripts nvidia-enable.sh and nvidia-disable.sh to
# execute custom commands for power management.
switching=none

# Enable PCI power management in Intel mode.
# This option is incompatible with acpi_call and bbswitch, so it will be ignored in those cases.
pci_power_control=yes

# Remove the Nvidia card from the PCI bus.
# May prevent crashes caused by power switching.
# Ignored if switching=nouveau or switching=bbswitch.
pci_remove=no

# Reset the Nvidia card at the PCI level before reloading the nvidia module.
# Ensures the card is in a fresh state before reloading the nvidia module.
# May fix some switching issues. Possible values :
#
# - no : does not perform any reset
# - function_level : perform a light "function-level" reset
# - hot_reset : perform a "hot reset" of the PCI bridge. ATTENTION : this method messes with the hardware
# directly, please read the online documentation of optimus-manager before using it.
# Also, it will perform a PCI remove even if pci_remove=no.
#
pci_reset=no

# Automatically log out the current desktop session when switching GPUs.
# This feature is currently supported for the following DE/WM :
# KDE Plasma, GNOME, XFCE, Deepin, i3, Openbox, AwesomeWM, bspwm
# If this option is disabled or you use a different desktop environment,
# GPU switching only becomes effective at the next graphical session login.
auto_logout=yes

# The mode used with startup mode ac_auto when not connected to AC.
# Possible values : amd, intel, hybrid-amd, hybrid-intel
ac_auto_battery_mode=amd


# The mode used with startup mode ac_auto when connected to AC.
# Possible values : hybrid, nvidia
ac_auto_extpower_mode=nvidia

[intel]

# Driver to use for the Intel GPU. Possible values : modesetting, intel
# To use the intel driver, you need to install the package "xf86-video-intel".
driver=modesetting

# Acceleration method (corresponds to AccelMethod in the Xorg configuration).
# Only applies to the intel driver.
# Possible values : sna, xna
# Leave blank for the default (no option specified)
accel=

# Enable TearFree option in the Xorg configuration.
# Only applies to the intel driver.
# Possible values : yes, no
# Leave blank for the default (no option specified)
tearfree=

# DRI version. Possible values : 2, 3
DRI=3

# Whether or not to enable modesetting for the nouveau driver.
# Does not affect modesetting for the Intel GPU driver !
# This option only matters if you use nouveau as the switching backend.
modeset=yes


[amd]

# Driver to use for the AMD GPU. Possible values : modesetting, amdgpu
# To use the amdgpu driver, you need to install the package "xf86-video-amdgpu".
driver=amdgpu

# Enable TearFree option in the Xorg configuration.
# Only applies to the amdgpu driver.
# Possible values : yes, no
# Leave blank for the default (no option specified)
tearfree=

# DRI version. Possible values : 2, 3
DRI=3

# Whether or not to enable modesetting for the nouveau driver.
# Does not affect modesetting for the AMD GPU driver !
# This option only matters if you use nouveau as the switching backend.
modeset=yes


[nvidia]

# Whether or not to enable modesetting. Required for PRIME Synchronization (which prevents tearing).
modeset=yes

# Whether or not to enable the NVreg_UsePageAttributeTable option in the Nvidia driver.
# Recommended, can cause poor CPU performance otherwise.
PAT=yes

# DPI value. This will be set using the Xsetup script passed to your login manager.
# It will run the command
# xrandr --dpi <DPI>
# Leave blank for the default (the above command will not be run).
DPI=96

# If you're running an updated version of xorg-server (let's say to get PRIME Render offload enabled),
# the nvidia driver may not load because of an ABI version mismatch. Setting this flag to "yes"
# will allow the loading of the nvidia driver.
ignore_abi=no

# Set to yes if you want to use optimus-manager with external Nvidia GPUs (experimental)
allow_external_gpus=no

# Comma-separated list of Nvidia-specific options to apply.
# Available options :
# - overclocking : enable CoolBits in the Xorg configuration, which unlocks clocking options
# in the Nvidia control panel. Note: does not work in hybrid mode.
# - triple_buffer : enable triple buffering.
options=

关于我的这份配置文件:

  • switching method不使用bbswitch是因为使用集成显卡的时候通过bbswitch关闭独立显卡会导致电脑的风扇以最高转速狂转,可能是因为关闭了独立显卡电源之后,系统无法正常读取独显温度导致将风扇调至最高转速,暂时没有找到一个比较靠谱的解决方法,所以就先用none,也许未来BIOS升级之后能解决这个问题
  • 正是因为switching method选择了none,所以把pci_power_control启用了,让PCI power management管理独显的电源
  • AMD的driver使用amdgpu
  • 其余配置基本都是默认配置

一些都配置好了就重启电脑吧,如果没有什么意外的话,Optimus Manager已经正常工作了。

Optimus Manager用法

  • 切换到NVIDIA:

    1
    optimus-manager --switch nvidia
  • 切换到AMD:

    1
    optimus-manager --switch amd
  • 设置开机使用AMD:

    1
    optimus-manager --set-startup=amd
  • 显示当前模式:

    1
    optimus-manager --print-mode
  • 显示开机使用的模式:

    1
    optimus-manager --print-startup
  • 更多用法:

    1
    optimus-manager --help

Optimus Manager GUI

触摸板

是的,这台机器的触摸板在Linux下无法正常使用,触摸跟按键都没有任何反应。

在内核日志上可以找到关于触摸板的报错内容:

1
2
3
4
5
6
7
8
[    1.981868] i2c_hid i2c-MSFT0001:00: supply vdd not found, using dummy regulator
[ 1.981883] i2c_hid i2c-MSFT0001:00: supply vddl not found, using dummy regulator
[ 7.064976] i2c_hid i2c-MSFT0001:00: failed to reset device.
[ 13.251401] i2c_hid i2c-MSFT0001:00: failed to reset device.
[ 19.438327] i2c_hid i2c-MSFT0001:00: failed to reset device.
[ 25.624986] i2c_hid i2c-MSFT0001:00: failed to reset device.
[ 26.638144] i2c_hid i2c-MSFT0001:00: can't add hid device: -61
[ 26.638591] i2c_hid: probe of i2c-MSFT0001:00 failed with error -61

找到了一个相关的讨论:https://bugzilla.kernel.org/show_bug.cgi?id=207759

因为我日常几乎用不到笔记本的触摸板,平时都是用鼠标,所以也懒得再去研究这个问题了,说不定随着内核的更新,触摸板突然就能用了呢(想peach)。

Buy me a cup of coffee