Dell XPS 15 9560
Device/Functionality | Status |
Suspend | Buggy |
Hibernate | Working |
Integrated Graphics | Working |
Discrete Nvidia Graphics | Modify |
Wifi | Working |
Bluetooth | Working |
rfkill | Working |
Audio | Working |
Touchpad | Working |
Webcam | Working |
Card Reader | Working |
Function/Multimedia Keys | Working |
Power Management | Modify |
EFI firmware updates | Working |
Fingerprint reader | Not working |
This page contains recommendations for running Arch Linux on the Dell XPS 15 9560 (late 2016). With some configuration almost all the hardware is well supported. Exceptions are the fingerprint reader, occasional locks on resuming from suspend experienced by some users, and the lack of support for PRIME render offload to the discrete GPU in the Nvidia proprietary driver.
Contents
UEFI
Before installing it is necessary to modify some UEFI Settings. They can be accessed by pressing the F2 key repeatedly when booting.
- Change the SATA Mode from the default "RAID" to "AHCI". This will allow Linux to detect the NVME SSD. If dual booting with an existing Windows installation, Windows will not boot after the change but this can be fixed without a reinstallation.
- Change Fastboot to "Thorough" in "POST Behaviour". This prevents intermittent boot failures.
- Disable secure boot to allow Linux to boot.
Installation of Arch Linux can proceed normally. Refer to the Installation guide for more information.
Power Management
Suspend and Hibernate
Suspend and Hibernate work out of the box, although some users have reported occasional system hangs on resuming from suspend, more commonly on kernels since 4.10.
Fan and temperature monitoring and control
Many of the thermometers can be read with lm_sensors.
Fan speeds can be monitored with i8kctl
from i8kutils-gitAUR. This laptop is not in the supported list so it is necessary to load the i8k
kernel module with the force=1
module option. See Kernel modules#Setting module options. It is also possible to manually control fan speeds (at your own risk) however with manual control only a subset of the possible speeds are available (0rpm, 2500rpm, 4800rpm) instead of (0rpm, 2500rpm, 3200rpm, 3700rpm, 4800rpm, and 5100rpm) in the firmware's automatic control. See Fan speed control#Disable BIOS fan speed control[broken link: invalid section].
The thermometer on the discrete Nvidia GPU can be monitored with the nvidia-smi
utility, which is part of nvidia-utils.
Power Saving
Disable discrete GPU
The discrete Nvidia GTX 1050 GPU is on by default and cannot be disabled in the UEFI settings. Even when idle, it uses a significant amount of power (about 7W). To disable it when not in use it is necessary to install bbswitch and bumblebee, add acpi_rev_override=1
to the Kernel parameters, enable bumblebeed.service
, and reboot (you may need to reboot twice for the firmware to notice acpi_rev_override
).
$ cat /proc/acpi/bbswitch
should now print
$ OFF
and
$ dmesg | grep bbswitch
should print something like
$ [ 4.253642] bbswitch: loading out-of-tree module taints kernel. $ [ 4.253833] bbswitch: version 0.8 $ [ 4.254093] bbswitch: Found integrated VGA device 0000:00:02.0: \_SB_.PCI0.GFX0 $ [ 4.254163] bbswitch: Found discrete VGA device 0000:01:00.0: \_SB_.PCI0.PEG0.PEGP $ [ 4.254225] bbswitch: detected an Optimus _DSM function $ [ 4.254282] bbswitch: Succesfully loaded. Discrete card 0000:01:00.0 is on $ [ 4.256651] bbswitch: disabling discrete graphics
Standard power saving configuration
It is a good idea to install a tool to tune common settings to save power. See Power management#Userspace tools. One caveat on versions of TLP prior to 1.0 is that enabling PCIE runtime power management results in bbswitch not working. A workaround is to disable PCIE runtime power management for the Nvidia GPU. For example for TLP, edit /etc/default/tlp
to have RUNTIME_PM_BLACKLIST="01:00.0"
. This is done by default in later versions of tlp, such as tlp-gitAUR. Alternatively, PCIE runtime power management can be disabled for all devices using the kernel parameter pcie_port_pm=off
.
Disable/autosuspend of touchscreen
Disabling the touchscreen can be done in the UEFI settings and results in significant power savings.
If touchscreen is required it can be placed into autosuspend by TLP by adding 04f3:24a1
to USB_WHITELIST
in tlp config file. This will leave touchscreen enabled for usage and will consume much less battery.
Enable NVME APST
Before Kernel 4.11 Linux does not support NVME APST, so the NVME SSD is in its highest power state all the time. Significant power savings can be achieved by running a Kernel with patches and appropriate parameters to enable APST. See Solid State Drives/NVMe#Power Saving APST. Even when running such a kernel, it may be necessary to adjust the default_ps_max_latency_us
parameter to the nvme_core
module in order to make ASPT work.
Enable power saving features for the i915 kernel module
Passing the following options to the i915 kernel module results in significant power savings: enable_fbc=1 enable_psr=1 disable_power_well=0
. Some users with the HD matte screen have reported that these parameters cause screen flickering. Frame buffer compression (enable_fbc=1
) is enabled by default starting from kernel 4.11.
Wifi and Bluetooth
For the Precision 5520 which has an Intel 8265 wifi card, the power_save
option for the iwlwifi
kernel module can be set from 1 to 5 with potential power savings. See Kernel modules#Setting module options. Bluetooth and Wifi can seperately be disabled with rfkill. See Wireless network configuration#Rfkill caveat.
Graphics
The integrated Intel HD 630 GPU works well out of the box. Optionally you may install xf86-video-intel but this is no longer recommended, since the built in kernel modesetting driver is more reliable. If you do not want to use the discrete Nvidia GPU, no extra setup is necessary. Otherwise there are a few options. All of the display outputs are connected to the integrated GPU so there is no need to set up output from the discrete GPU. It may be necessary to compile a custom kernel as described in #Power Saving.
Intel card only
See #Disable discrete GPU above.
Open source driver with PRIME render offloading
With this setup it is possible to use the integrated GPU by default and to offload GPU intensive applications to the discrete GPU by the use of the DRI_PRIME
environment variable. See PRIME for details. Note that the open source Nvidia driver Nouveau currently does not support power management on Pascal GPUs such as the GTX 1050, so performance is very poor with this driver. See Nouveau#Power management.
Proprietary driver with bumblebee
With this setup the integrated GPU is used by default but some applications can be rendered on the discrete GPU with the optirun
or primusrun
launchers. See Bumblebee for detailed instructions. The lack of proper v-sync support means that with this method applications rendered on the discrete GPU exhibit tearing. There is also some overhead introduced as a result of moving data inefficiently between the discrete and integrated GPUs, but the Nvidia GPU performs much better than it does with Nouveau. The current stable NVIDIA release (378.13) does not work (rmInitAdapterFailed in dmesg), however the latest beta drivers nvidia-betaAUR, nvidia-utils-betaAUR, and lib32-nvidia-utils-betaAUR are working. To use them with a custom kernel it is necessary to use the DKMS version nvidia-beta-dkmsAUR and to edit the PKGBUILD to update it to the same version as the utils package. Alternatively the current long lived branch release (375.66) works too (nvidia-llb-dkmsAUR, nvidia-utils-llbAUR, lib32-nvidia-utils-llbAUR).
Proprietary driver with PRIME output offloading
With this setup the discrete GPU is used for all rendering and the integrated GPU is used only to display the rendered output. Power consumption is much higher during light usage because the discrete GPU cannot be disabled. Performance for graphics intensive applications is significantly better than with Bumblebee, and v-sync works due to PRIME Synchronization so tearing is eliminated. Remove bumblebee and follow the instructions in NVIDIA Optimus, Nvidia README, or PRIME Synchronization thread using PCI:1:0:0
as the BusID. Add the modeset=1
parameter to the nvidia_drm
kernel module (on boot, not with modprobe) to enable PRIME synchronization and remove tearing (see Kernel modules#Setting module options). It is necessary to use the long lived branch of the NVIDIA driver (nvidia-llb-dkmsAUR, nvidia-utils-llbAUR, lib32-nvidia-utils-llbAUR) since the latest version (375.66) contains bugfixes making PRIME Synchronization usable on the GTX 1050, which are not present in the latest stable (378.13) and beta (381.09) releases.
Touchpad
Touchpad works of the box. It's a Synaptics touchpad, so you can use synclient
to list its capabilities and change them for the session.
Configure middle button
The touchpad has a big click zone in the bottom that can be disabled or configured for 1, 2 or 3 buttons.
For example, to have most of the touchpad seen as "button 1" but the middle lower zone (middle button) and the right lower zone (right button), create /etc/X11/xorg.conf.d/50-synaptics.conf
with content:
Section "InputClass" Identifier "touchpad catchall" Driver "synaptics" MatchIsTouchpad "on" # enable clik zone and configure 3 buttons on bottom Option "ClickPad" "1" Option "SoftButtonAreas" "60% 0 82% 0 40% 60% 82% 0" # other commons options than you may want to configure # scroll with two fingers (enabled vertically, disabled horizontally) Option "VertTwoFingerScroll" "1" Option "HorizTwoFingerScroll" "0" # enable tap as click: 1 finger -> left button, 2 fingers -> right, 3 fingers -> middle Option "TapButton1" "1" Option "TapButton2" "3" Option "TapButton3" "2" # idem but for click with 1,2,3 fingers. Use "0" to disable. Option "ClickFinger1" "1" Option "ClickFinger2" "3" Option "ClickFinger3" "2" # palm detection. These parameters somehow works, YMMV. Option "PalmDetect" "1" Option "PalmMinWidth" "10" Option "PalmMinZ" "200" EndSection
Firmware updates
Firmware updates are provided by Dell and can be installed with fwupdate or fwupd. Available firmware versions can be seen here.
Alternatively, firmware updates can be installed by copying the MS-DOS executable firmware file to a FAT32-formatted USB key (or directly to your EFI boot partition) and booting into "BIOS Flash Update" from the Boot Menu.
Fingerprint reader
The fingerprint reader is a Validity/Synaptics model with USB id 138a:0090
.
There currently is no Linux driver but an open source Linux driver is being developed by reverse engineering the Windows driver. [1]
Troubleshooting
xorg freezes at startup
If Xorg freezes as soon as it starts, even before printing any logs, and you are trying to use the Intel card with the nvidia one disabled, you need to add kernel parameter acpi_rev_override=1
as explained in #Disable discrete GPU above.
PCIe Bus Error in system logs
If you have an NVMe disk and depending of your BIOS version (but even with 1.5.0 from october 2017), you may have a lot of system error logs like:
Nov 25 22:36:08 xxxxx kernel: pcieport 0000:00:1c.0: PCIe Bus Error: severity=Corrected, type=Data Link Layer, id=00e0(Transmitter ID) Nov 25 22:36:08 xxxxx kernel: pcieport 0000:00:1c.0: device [8086:a110] error status/mask=00001000/00002000 Nov 25 22:36:08 xxxxx kernel: pcieport 0000:00:1c.0: [12] Replay Timer Timeout
This can be corrected with the kernel boot option pci=nommconf
(see here for explanation).
Notes
The suspend function key is not printed on the keyboard, but it's actually mapped to Fn
+Insert
.