-
Notifications
You must be signed in to change notification settings - Fork 242
Frequently Asked Questions
It's needed to get the stylus to rotate together with the screen.
They're useful as a starting point to customize your device. If you don't plan to use them, they can be safely deleted.
Most often that's because of secure boot. Try disabling it to verify that's really the issue. After that, to make your kernel work with secure boot, follow the signing instructions (or just leave it disabled at your own risk).
Usually this happens if you don't unload/reload the appropriate modules before you suspend or hibernate.
Make sure you have the /lib/systemd/system-sleep/sleep
script and it is executable.
Note: While in most cases the sleep script fixes the problems, some people have also reported bugs that cause touch or wifi functionality to occasionally break after resume, and in such cases have to restart their device.
What can wake up your surface is controlled by the files /sys/.../power/wakeup
, where the part of the path in ...
depends on the device. You can find all possible wakeup files with the command find /sys -name wakeup -printf '%p ' -exec cat {} \;
If you have problems with surface waking up on its own, try disablign all wakeup sources other than lid and power button as follows:
For SB1, make file in /etc/systemd/system/wakeup.service
with the script below, and then run sudo systemctl enable wakeup.service
. It disables all wakeup sources except rtc, power button and lid. On SB1, the lid wakeup file is in /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/power/wakeup
, and for the power button - in /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00
.
For other devices, it's possible that the power button and lid have different sysfs nodes. In that case you may need to edit the part grep -vE "(pnp0/00:03|PNP0C0D:00|MSHW0040:00)");
. Look at /proc/bus/input/devices to find the appropriate /sys/.../wakeup files for each device.
[Unit]
Description=Disable wakeup sources
[Service]
ExecStart=/bin/sh -c 'for device in $(find /sys -name wakeup | grep "power/wakeup" | grep -vE "(pnp0/00:03|PNP0C0D:00|MSHW0040:00)"); do echo disabled > $device; done'
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
The replacement isn't done on kernel level, it's just a configuration. It's these two commands:
ln -sfb /lib/systemd/system/hibernate.target /etc/systemd/system/suspend.target && sudo ln -sfb /lib/systemd/system/systemd-hibernate.service /etc/systemd/system/systemd-suspend.service
Normally, systemd uses the files suspend.target and systemd-suspend.service in /lib/systemd/system/ to suspend/hibernate. But if such files are present in /etc/systemd/system/ the files in /etc take priority. So the command makes symlinks to the hibernate files, with names that the suspend files should have, and places them in /etc/systemd/system/. Removing the links should make the system use the original files:
sudo rm /etc/systemd/system/suspend.target /etc/systemd/system/systemd-suspend.service
Does this package contain a pre-built kernel module (e.g. virtualbox, nvidia-driver)? If so, you need to install the respective dkms version of the package. Reason: Kernel modules have to be compiled for the specific kernel you're using. Distributions usually assume you're using their kernel package, and as such provide a pre-built module for you, ready to go. This means that this specific package is incompatible with this kernel, however, distributions usually provide a "dkms" (Dynamic Kernel Module Support) version of the package, which compiles (at least parts) of the kernel module, so that it can be used in any arbitrary kernel, such as this one here. Drawbacks are a slightly longer time to install the module and upgrade the kernel.
For the nvidia graphics driver on Ubuntu, you may want to read through this comment. The gist is: Install the driver either from the command-line or before installing the custom kernel.
If a message like this appears when installing a package containing a dkms kernel-module (e.g. virtualbox), you may need to either use an updated version of the package or an older kernel (e.g. the LTS kernel). At this repo, we try to provide the latest stable kernel and the current long-term-support (LTS) kernel. Distributions such as Ubuntu or Debian usually stick to major kernel versions (e.g. 4.18) and package versions for some time due to stability concerns. This means that a kernel module that e.g. works with a 4.18 kernel may not work with a 5.0 kernel.
Yes, see https://github.com/StollD/linux-surface-firmware
A strange hardware problem popped up out of nowhere (for example, some device stopped working or became buggy). Sometimes these tricks may help:
- You can try to reset the non-working device (like Wi-Fi) from UEFI. Restart your Surface and hold volume up when it starts booting up. This will send you to the UEFI firmware settings. There you can disable the device. Restart the SUrface to save changes, then go to UEFI again and re-enable the device.
- You can try to reset UEFI itself, as shown in this guide: https://answers.microsoft.com/en-us/surface/forum/surfpro4-surfupdate/surface-pro-4-stuck-in-uefi-loop-cant-change/803bed4e-1dd2-4622-ba54-155d51f8b8f9
- You can also try to update firmware.