jmontleon / pixelbook-fedora

How to install Fedora on a Pixelbook with reasonable results
60 stars 12 forks source link

Fedora on Pixelbook

This process can be used to get Fedora installed on your Chromebook. This process will destroy your data so make sure you have backups of anything you need. When you're done ChromeOS will not be bootable and your data will be wiped. See the notes below for how to adapt them for other distrbutions.

What works and doesn't work:

Component Status
Ambient Light Sensor Mostly Working Issue
Audio Working
Brightness Working
Bluetooth Working
Camera Working
Keyboard Working
Orientation / Tablet Mode Working
Suspend Working
Touchpad Working
Touchscreen Working
Wireless Working

Requirements

Unlocking the Pixelbook to install the Coreboot Firmware

These steps will wipe your data and account settings. Do not proceed if you need data on your Chromebook.

  1. Press ESC+Refresh+Power on the Pixelbook
  2. At the recovery screen press CTRL-D
  3. Once you are certain your data is backed up you can confirm that you want to do this and proceed.
  4. At this point your Chromebook will be powerwashed and your account and data removed so once it finished log back in

Install Coreboot

  1. All of the instructions for this process are at mrchromebox.tech
  2. You must configure Closed Case Debug, disable write protect, and enable firmware flashing.
  3. To do all of this read, understand, and follow these instructions.
  4. Then use the Firmware Utility Script to install the UEFI firmware.
  5. Do make a backup of the stock firmware and ensure you do not lose it.
  6. If you ever want to go back to ChromeOS you can use the script to restore this backup firmware. Don't lose it.

Update Coreboot

If you followed the instructions above you should be all set.

If you skipped the instructions above because coreboot was already installed please ensure it is up to date. At least one trace in dmesg was resolved by a firmware update.

You may also encounter a bug that causes slow boots and hangs on shutdown if running coreboot versions prior to 4.16, which contains this fix.

Install Fedora

  1. Prepare a bootable Fedora USB stick
  2. Insert it into the Pixelbook and install it normally.

Once fedora is installed you may make use of the ansible playbook provided for configuration or continue following the instructions in this file.

  1. sudo dnf -y copr enable jmontleon/pixelbook
  2. sudo dnf -y update

Audio

By default audio will not work at all, but by copying topology and firmware files from a recovery image the speakers will work. With some additional configuration the microphone, headphone jack, and possibly other aspects work as well.

  1. Download the latest eve recovery image from chromiumdash.appspot.com/serving-builds
  2. Unzip the file. As an example unzip chromeos_13904.55.0_eve_recovery_stable-channel_mp-v2.bin.zip
  3. Create device maps sudo kpartx -av chromeos_13904.55.0_eve_recovery_stable-channel_mp-v2.bin
  4. Mount the ChromeOS root filesystem sudo mount -o ro /dev/mapper/loop0p3 /mnt
  5. Copy the files:
    1. sudo cp /mnt/lib/firmware/9d71-GOOGLE-EVEMAX-0-tplg.bin /lib/firmware/
    2. sudo cp /mnt/lib/firmware/dsp_lib_dsm_core_spt_release.bin /lib/firmware/
    3. sudo cp /mnt/lib/firmware/intel/dsp_fw_C75061F3-F2B2-4DCC-8F9F-82ABB4131E66.bin /lib/firmware/intel
    4. sudo mkdir -p /opt/google/dsm/
    5. sudo cp /mnt/opt/google/dsm/dsmparam.bin /opt/google/dsm/dsmparam.bin
  6. Add audio packages sudo dnf -y install pixelbook-alsa-ucm pixelbook-wireplumber pixelbook-scripts
  7. systemctl --user --now enable pixelbook-acpi
  8. After rebooting you should have audio (Note: Some systems require 2 or occasionally 3 reboots. See the troubleshooting section for details)

Brightness

  1. sudo dnf install pixelbook-udev && sudo dnf -y update, if you haven't already.
  2. Create /etc/modprobe.d/i915.conf with one line: options i915 enable_dpcd_backlight=1
  3. sudo dracut -f
  4. After rebooting the backlight should work.

Keyboard

Hotkeys / Capslock

  1. sudo dnf -y install pixelbook-udev, if you haven't already.

Backlight

  1. sudo dnf -y install pixelbook-scripts
  2. Add yourself to the input group: sudo usermod -aG input $USER
  3. Set up a keyboard shortcut up to run /usr/bin/pixelbook-keyboard-backlight when you press ctrl+space.

Orientation

  1. sudo dnf -y install pixelbook-udev pixelbook-scripts, if you haven't already.
  2. sudo dnf -y update, if you haven't already.
  3. `edit /etc/acpi/events/powerconf and comment out the following two lines. This will prevent the power button from causing an immediate shutdown in Gnome.
    event=button/power.*
    action=/etc/acpi/actions/power.sh
  4. sudo systemctl --now enable acpid
  5. Gnome and KDE handle screen orientation automatically in tablet mode.
  6. For others systemctl --user --now enable pixelbook-display-orientation
  7. systemctl --user --now enable pixelbook-acpi will listen to tablet mode and audio jack related events and act accordingly

Touchpad

A frequent complaint is that the touchpad does not work after reboot. If you encounter this you can install the pixelbook-touchpad-service as a workaround. This is a service that unloads and loads two kernel modules.

  1. sudo dnf -y install pixelbook-touchpad-service
  2. sudo systemctl enable --now pixelbook-touchpad

If you enable Tap to Click in Gnome or Xfce it will also enable Tap to Drag. To disable Tap to Drag you can do one of the following.

Gnome:

  1. gsettings set org.gnome.desktop.peripherals.touchpad tap-and-drag false

Xfce

  1. sudo dnf -y install pixelbook-touchpad-tweak

Touchscreen

  1. sudo dnf -y install pixelbook-scripts, if you haven't already.
  2. sudo usermod -aG input $USER, if you haven't already
  3. sudo usermod -aG tty $USER
  4. Gnome and KDE have their own gesture logic. For Xfce and others systemctl --user --now enable pixelbook-touchscreen-click

Excessive AER logging

Watching journalctl you'll note lots of logging about AER corrections. The pixelbook-aer package contains a workaround for this.

  1. sudo dnf -y install pixelbook-aer
  2. sudo systemctl enable --now pixelbook-aer

Additional packages

A lot of common software is not available in Fedora, such as nvidia drivers and vlc. Fortunately a plethora of software is available from RPM Fusion.

Troubleshooting.

When rebooting users have observed sound continuing to fail and the mouse not working. If this happens, the problem is often remedied by rebooting via the Power+Refresh button or holding down the the power button until the system powers off and then using it to power on the system again. The touchpad section above contains a service that will mask the problem.

5.16 introduced fixes to the display backlight.

Audio has been a particularly problematic area at times. Make sure you're not using a known broken kernel.

Issues are welcome if you think you found something Pixelbook specific. Full logs, detailed explanations of steps taken, configuration performed, etc. are important. It is impossible to provide help with comments that simply state things aren't working as expected.

Other distributions

For the most part nothing in this repo is distribution specific other than the availability of packages to simplify the install process. The primary adjustments you will need to be concerned about are listed below.

  1. Reference this PR to see the kernel options that must be enabled for hardware support.
  2. To match placement of configuration and scripts that are provided by packages look at the corresponding spec file. All sources are located in the configs and scripts directories.
  3. When a package is referenced, using the alsa ucm package as an example, note the sources in the spec file and where they are installed and manually do the same. Alsa is a special case in that 1.2.6 and above put these files in a conf.d directory. For older versions you'll probably need to move them one directory up.

If you would like to provide these packages in an AUR, PPA, or similar repo for other distributions for yourself and others please let me know and I will add them to the instructions.