Lenovo ThinkPad P1
Lenovo ThinkPad P1 was released in 2018 and has up to Intel Core i7-8850H or Xeon E-2176M 6-core processor, up to 64 GB DDR4 RAM, and up to NVIDIA Quadro P2000 graphics.
Installation
Do not change to "Discrete Graphics" with BIOS v1.15
https://www.reddit.com/r/thinkpad/comments/a2g0k4/warning_do_not_change_from_hybrid_graphics_to/
This might potentially brick your device and require Lenovo to replace your motherboard. Apparently verified on BIOS v1.15 and still not resolved.
You will want to use BIOS v1.18 or newer. BIOS v1.17 (released Dec 24, 2018) originally fixed the issue for the mass majority; however, this version has been removed due to additional bricking issues that happen occasionally related to the Hybrid graphics options when changed.
Firmware update
Before installation, it is recommended that you boot into Windows 10 and use the preinstalled Lenovo Vantage software to install any necessary firmware updates, particularly this one.
Installation with hybrid graphics
Currently the live CD might not boot normally if your BIOS is configured to enable hybrid graphics. See NVIDIA Optimus for details. Two options are possible:
- Disable hybrid graphics by changing your BIOS settings to "Discrete only" (Be careful, this might brick your latpop: #Do not change to "Discrete Graphics" with BIOS v1.15)
- Alternatively, before booting into live CD, press
e
and addmodprobe.blacklist=nouveau
to your kernel parameters.
If you choose to use the second option, you might also want to include modprobe.blacklist=nouveau
in your /boot/loader/entries/arch.conf
.
HiDPI screen
Some configurations of ThinkPad P1 comes with a HiDPI screen. See HiDPI#Linux console (tty) for more details.
Graphics
There are two difficulties with configuring graphics on ThinkPad P1: there is no "integrated graphics only" option in the BIOS, and the external display ports (HDMI, etc.) are wired into the NVIDIA chip. Depending on your needs, you might choose from the following options:
Discrete only
As the P1 is an hybrid device with both an integrated and discrete video card, the NVIDIA drivers have to be setup to use Optimus in order to properly work with external outputs and the integrated laptop screen. Setup NVIDIA Optimus as instructed in NVIDIA Optimus#Use NVIDIA graphics only. Note that this method will keep your NVIDIA graphics card always on, which might dramatically shorten your battery life.
Black screen after X starts with NVIDIA drivers
Even if using Optimus, the driver might anyway fail to detect the laptop screen using the auto-generated xorg.conf
file and you might experience a black screen after X has been started. See NVIDIA Optimus#No screens found on a laptop/NVIDIA Optimus for more details.
If you are able to connect an external monitor and verify it works, you can inspect the xrandr -q
output to verify only HDMI and Display Port outputs are actually detected. The tool should as well display only external video output connections.
In order to instruct the driver about the integrated laptop screen, the xorg.conf
file has to be modified to add a "ConnectedMonitor" Option
to the Section "Device"
(see NVIDIA/Troubleshooting#Screen(s) found, but none have a usable configuration)
Use the following as 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
After re-starting X, the integrated screen output should show be now detected and properly usable.
If the laptop screen gets detected but xrandr
fails to properly detect the available resolutions, remove the HorizSync
and Vertrefresh
options from Section "Monitor"
and restart X
Hybrid graphics with Reverse PRIME
Set up Reverse PRIME to do the main rendering on the Intel chip, while still being able to use the external display outputs wired to the NVIDIA chip. Battery life should remain decent with this option.
Hybrid graphics with Bumblebee
See Bumblebee for detailed instructions. If Xorg refuses to start after setting up Bumblebee, try generating an Xorg configuration by running Xorg -configure
and copy it to /etc/X11/xorg.conf
.
Because Bumblebee normally disables the NVIDIA card, display outputs such as HDMI might not show up in xrandr -q
. You may want to refer to Bumblebee's multi-monitor setup page.
Hybrid graphics with bbswitch only
This method requires manual switching between integrated and discrete graphics mode. Switching between them requires restarting all Xorg instances, although it does not require a restart.
Install the appropriate NVIDIA graphics drivers and bbswitch. Generate an Xorg configuration by running Xorg -configure
and copy it to /etc/X11/xorg.conf.intel
. You may also create /etc/X11/xorg.conf.nvidia
, though it should not be necessary.
After loading the module with
# modprobe bbswitch
you can switch to discrete graphics with the following Bash function:
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 }
After this, xrandr -q
should correctly show HDMI-0
as one of the outputs. Running xrandr --auto
will mirror the display on an external monitor. If you want to extend your display with a different DPI, adapt the following command to your needs:
$ xrandr --output HDMI-0 --scale 2x2 --right-of eDP-1-1
Conversely, you can switch to integrated graphics this way:
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 }
You need to manually start your X session after switching.
If you are also running TLP, to prevent TLP from blocking system startup or shutdown, you should tell it to leave NVIDIA card alone by uncommenting the following line:
/etc/default/tlp
RUNTIME_PM_DRIVER_DENYLIST="amdgpu nouveau nvidia radeon"
You may also want to refer to nvidia-xrun, which allows for running a separate X session with NVIDIA graphics.
Troubleshooting
xbacklight not adjusting screen brightness
Installing lightAUR should help.
System hangs on startup/shutdown
If you are using hybrid graphics, ensure that your TLP is correctly blacklisting NVIDIA drivers by uncommenting this line:
/etc/default/tlp
RUNTIME_PM_DRIVER_DENYLIST="amdgpu nouveau nvidia radeon"
Also make sure that the NVIDIA card is turned on before shutdown by running:
# modprobe nvidia
You can install systemd services to manage this automatically as as follows:
/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
And a service to disable the card again at resume if it was originally off:
/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