Skip to content

Frequently Asked Questions

tmarkov edited this page Sep 16, 2019 · 17 revisions

Setup.sh questions

What is libwacom for?

It's needed to get the stylus to rotate together with the screen.

Why (not) delete example configs?

They're useful as a starting point to customize your device. If you don't plan to use them, they can be safely deleted.

Boot issues

Why can't I boot my newly installed kernel?

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).

Suspend and hibernate issues

I don't have touch and wifi after resuming from suspend/hibernate.

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.

My device wakes up automatically from suspend/hibernate.

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

I replaced suspend with hibernate. How can I undo?

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

Package Issues

Package "x" does not work / kernel module does not load (e.g. nvidia)

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.

I can't install package "x" because the kernel is "incompatible"

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.

General Issues

Can I update the firmware if I don't have Windows?

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: