Lenovo ThinkPad P1
Lenovo ThinkPad P1 于 2018 年发布,最高配备 Intel Core i7-8850H 或 Xeon E-2176M 6 核处理器,最高 64 GB DDR4 RAM,以及最高 NVIDIA Quadro P2000 显卡。
安装
BIOS v1.15 版本请勿更改为“独立显卡”
https://www.reddit.com/r/thinkpad/comments/a2g0k4/warning_do_not_change_from_hybrid_graphics_to/
这可能会导致您的设备变砖,并需要联想更换您的主板。显然已在 BIOS v1.15 上验证,但仍未解决。
您需要使用 BIOS v1.18 或更高版本。BIOS v1.17(于 2018 年 12 月 24 日发布)最初修复了绝大多数问题;但是,此版本已被删除,原因是与更改混合显卡选项时偶尔发生的其他变砖问题有关。
固件更新
在安装之前,建议您启动进入 Windows 10 并使用预装的 Lenovo Vantage 软件安装任何必要的固件更新,特别是这个。
混合显卡安装
目前,如果您的 BIOS 配置为启用混合显卡,则 Live CD 可能无法正常启动。有关详细信息,请参阅NVIDIA Optimus。有两种可能的选择
- 禁用混合显卡,方法是将您的 BIOS 设置更改为“仅独立显卡”(注意:这可能会导致您的笔记本电脑变砖:#BIOS v1.15 版本请勿更改为“独立显卡”)
- 或者,在启动进入 Live CD 之前,按
e
并将modprobe.blacklist=nouveau
添加到您的内核参数。
如果您选择使用第二种选择,您可能还想在您的 /boot/loader/entries/arch.conf
中包含 modprobe.blacklist=nouveau
。
HiDPI 屏幕
某些 ThinkPad P1 配置配备了 HiDPI 屏幕。有关更多详细信息,请参阅HiDPI#Linux 控制台 (tty)。
显卡
在 ThinkPad P1 上配置显卡有两个难点:BIOS 中没有“仅集成显卡”选项,并且外部显示端口(HDMI 等)连接到 NVIDIA 芯片。根据您的需求,您可以从以下选项中选择
仅独立显卡
由于 P1 是一款混合设备,同时具有集成显卡和独立显卡,因此必须设置 NVIDIA 驱动程序以使用 Optimus,以便与外部输出和集成笔记本电脑屏幕正常工作。按照NVIDIA Optimus#仅使用 NVIDIA 显卡中的说明设置 NVIDIA Optimus。请注意,此方法将使您的 NVIDIA 显卡始终处于开启状态,这可能会大大缩短您的电池续航时间。
使用 NVIDIA 驱动启动 X 后黑屏
即使使用 Optimus,驱动程序可能仍然无法使用自动生成的 xorg.conf
文件检测到笔记本电脑屏幕,并且您可能会在启动 X 后遇到黑屏。有关更多详细信息,请参阅NVIDIA Optimus#在笔记本电脑上找不到屏幕/NVIDIA Optimus。
如果您能够连接外部显示器并验证其工作正常,您可以检查 xrandr -q
输出以验证是否仅检测到 HDMI 和 Display Port 输出。 工具也应仅显示外部视频输出连接。
为了向驱动程序指示集成笔记本电脑屏幕,必须修改 xorg.conf
文件,以将 "ConnectedMonitor" Option
添加到 Section "Device"
(请参阅NVIDIA/Troubleshooting#已找到屏幕,但没有可用的配置)
使用以下内容作为 xorg.conf
Section "Device"
Section "Device" Identifier "nvidia" Driver "nvidia" VendorName "NVIDIA Corporation" BusId "1:0:0" Option "AllowEmptyInitialConfiguration" Option "ConnectedMonitor" "eDP" Option "CustomEDID" "eDP:/sys/class/drm/card0-eDP-1/edid" Option "IgnoreEDID" "false" Option "UseEDID" "true" EndSection
重新启动 X 后,集成屏幕输出 现在应该显示已检测到并可以正常使用。
如果笔记本电脑屏幕被检测到,但 xrandr
无法正确检测到可用的分辨率,请从 Section "Monitor"
中删除 HorizSync
和 Vertrefresh
选项,然后重新启动 X
使用 Reverse PRIME 的混合显卡
设置Reverse PRIME 以在 Intel 芯片上进行主渲染,同时仍然能够使用连接到 NVIDIA 芯片的外部显示输出。使用此选项,电池续航时间应保持良好。
使用 Bumblebee 的混合显卡
有关详细说明,请参阅Bumblebee。如果在设置 Bumblebee 后 Xorg 拒绝启动,请尝试通过运行 Xorg -configure
生成 Xorg 配置文件,并将其复制到 /etc/X11/xorg.conf
。
由于 Bumblebee 通常会禁用 NVIDIA 显卡,因此 HDMI 等显示输出可能不会在 xrandr -q
中显示。您可能需要参考Bumblebee 的多显示器设置页面。
仅使用 bbswitch 的混合显卡
此方法需要手动在集成显卡和独立显卡模式之间切换。在它们之间切换需要重新启动所有 Xorg 实例,尽管它不需要重新启动。
安装适当的NVIDIA 显卡驱动程序和 bbswitch。通过运行 Xorg -configure
生成 Xorg 配置文件,并将其复制到 /etc/X11/xorg.conf.intel
。您也可以创建 /etc/X11/xorg.conf.nvidia
,尽管这不是必需的。
加载模块后,使用
# modprobe bbswitch
您可以使用以下 Bash 函数切换到独立显卡
discrete() { killall Xorg modprobe nvidia_drm modprobe nvidia_modeset modprobe nvidia tee /proc/acpi/bbswitch <<<ON cp /etc/X11/xorg.conf.nvidia /etc/X11/xorg.conf }
此后,xrandr -q
应正确显示 HDMI-0
作为输出之一。运行 xrandr --auto
会将显示镜像到外部显示器。如果您想使用不同的 DPI 扩展您的显示,请根据您的需要调整以下命令
$ xrandr --output HDMI-0 --scale 2x2 --right-of eDP-1-1
相反,您可以使用这种方式切换到集成显卡
integrated() { killall Xorg rmmod nvidia_drm rmmod nvidia_modeset rmmod nvidia tee /proc/acpi/bbswitch <<<OFF cp /etc/X11/xorg.conf.intel /etc/X11/xorg.conf }
切换后,您需要手动启动您的 X 会话。
如果您还运行 TLP,为了防止 TLP 阻止系统启动或关机,您应该告诉它不要管 NVIDIA 显卡,方法是取消注释以下行
/etc/default/tlp
RUNTIME_PM_DRIVER_DENYLIST="amdgpu nouveau nvidia radeon"
您可能还需要参考 nvidia-xrun,它允许使用 NVIDIA 显卡运行单独的 X 会话。
故障排除
xbacklight 无法调节屏幕亮度
安装 lightAUR 应该会有所帮助。
系统启动/关机时卡住
如果您正在使用混合显卡,请确保您的 TLP 正确地将 NVIDIA 驱动程序列入黑名单,方法是取消注释此行
/etc/default/tlp
RUNTIME_PM_DRIVER_DENYLIST="amdgpu nouveau nvidia radeon"
还要确保在关机前通过运行以下命令打开 NVIDIA 显卡
# modprobe nvidia
您可以安装 systemd 服务来自动管理此操作,如下所示
/etc/systemd/system/nvidia-enable-power-off.service
[Unit] Description=Enable NVIDIA card at shutdown DefaultDependencies=no [Service] Type=oneshot ExecStart=/bin/sh -c "awk '{print $2}' /proc/acpi/bbswitch > /tmp/gpu_state && echo ON > /proc/acpi/bbswitch" #ExecStart=/usr/bin/modprobe nvidia [Install] WantedBy=shutdown.target WantedBy=reboot.target WantedBy=hibernate.target WantedBy=suspend-then-hibernate.target WantedBy=sleep.target WantedBy=suspend.target
以及在恢复时再次禁用显卡的服务(如果它最初处于关闭状态)
/etc/systemd/system/nvidia-disable-resume.service
[Unit] Description=Disable NVIDIA card at system resume DefaultDependencies=no After=sleep.target After=suspend.target After=suspend-then-hibernate.target After=hibernate.target [Service] Type=oneshot ExecStart=/bin/sh -c 'cat /tmp/gpu_state > /proc/acpi/bbswitch || echo OFF > /proc/acpi/bbswitch' #ExecStart=/usr/bin/rmmod nvidia [Install] #WantedBy=shutdown.target #WantedBy=reboot.target WantedBy=sleep.target WantedBy=suspend.target WantedBy=suspend-then-hibernate.target WantedBy=hibernate.target