FreeBSD on X1 Carbon (Gen 6)

From Run Your Own
Jump to: navigation, search

Base Installation

  • grab ISO
  • encryption info goes here

Tracking FreeBSD-STABLE 12

/etc/src/conf - source build options

WITHOUT_ASSERT_DEBUG=true # compile without the assert(3) checks.
WITHOUT_AUDIT=true # Set to not build audit support into system programs.
WITHOUT_BSNMP=true # Set to not build or install bsnmpd(1)
WITHOUT_CALENDAR=true # Set to not build calendar(1)
#WITHOUT_LIB32=true
WITHOUT_TESTS=true # Set to not build nor install the FreeBSD Test Suite
WITHOUT_INET6=true
#WITHOUT_CROSS_COMPILER=true
#WITHOUT_KERBEROS=true # some pkgs do not like to have it without
WITHOUT_MAIL=true
WITHOUT_QUOTAS=true
WITHOUT_DEBUG_FILES=true
WITH_SVN=true # Set to install svnlite(1) as svn(1).

/etc/make.conf - system build information

CPUTYPE?=skylake           # no kabylake yet?

FreeBSD source and installation

rm -rf /usr/src/*
svnlite checkout https://svn0.eu.FreeBSD.org/base/stable/12 /usr/src

Hardware Specific config

BIOS Updates

  • Get latest BIOS update from Lenovo as bootable CD ISO file.
  • Convert the ISO to something that you can boot from USB
sudo portmaster -i sysutils/geteltorito
geteltorito -o usb-bios-update.img n23ur13w.is
  • Write the image to your USB device
sudo dd if=usb-bios-update.img of=/dev/daX bs=10M
  • plug USB in X1, (re)boot
  • Press enter, then F12 to choose temporary startup device
  • Choose your USB device (USB HDD)
  • Follow instructions from BIOS update utility

Microcode Updates

  • Information about current microcode version can be accessed this way (needs to install a small tool first)
sudo portmaster -iB sysutils/x86info
sudo kldload cpuctl.ko
sudo x86info -a | grep Microcode      # To note current Microcode version
  • Latest microcode can be fetched by installing the following port:
sudo portmaster -iB sysutils/devcpu-data
  • Edit /boot/loader.conf to add:
# Microcode update
cpu_microcode_load="YES"
cpu_microcode_name="/boot/firmware/intel-ucode.bin"
  • Reboot and check if Microcode version has changed :)

WiFi

  • in /etc/rc.conf
# Wireless
wlans_iwm0="wlan0"
background_dhclient="YES"
ifconfig_wlan0="WPA DHCP country NL"

GPU

DRM Next Kernel Module

  • Install the port
portmaster -i graphics/drm-next-kmod
  • in /etc/rc.conf
# drm-next-kmod port
kld_list="/boot/modules/i915kms.ko"
  • add your main user to video group
pw usermod ${USERNAME} -G video
  • reboot
shutdown -r now

Xorg

  • /etc/X11/xorg.conf
Section "Device"
  Identifier  "Intel Graphics"
  Driver      "intel"
  Option      "TearFree" "true"
EndSection

Note: These days all the useful options are enabled by default so no need to add too many extra parameters.

Audio over HDMI

Seems to be currently broken with drmnext. Need to be investigated further.

Headphones

To make the headphone plug work, add the following in /boot/device.hints (and reboot):

# Enable headphones
hint.hdaa.0.nid33.config="as=1 seq=15"

Webcam

Note: this does not quite work as expected due to a small conflict between cuse.ko and cuse4bsd.ko, the former need to be unloaded first, need to investigate...

  • Install the cuse4bsd kernel module and webcamd
portmaster -iB multimedia/cuse4bsd-kmod multimedia/webcamd multimedia/pwcview
  • Load the cuse4bsd kernel module at boot time, edit /boot/loader.conf:
# Character device driver for webcams
cuse4bsd_load="YES"
  • Start webcamd daemon at boot time, edit /etc/rc.conf:
# Webcam daemon
webcamd_enable="YES"
  • Test webcam with:
pwcview -s uxga -f 30

Thinkpad drivers

Used for LCD control, suspend, etc...

  • in /boot/loader.conf
# Thinkpad stuff
acpi_video_load="YES"
acpi_ibm_load="YES"

Sleep

  • You need at least BIOS 1.30 (see BIOS section to know how to update BIOS)
  • In BIOS change sleep state mode to Linux
  • when you want to suspend to RAM:
sudo zzz

Note: I see the disk not super happy when resuming, with system hanging for a couple secs and lots of:

nvme0: aborting outstanding i/o
nvme0: WRITE sqid:7 cid:67 nsid:1 lba:9792488 len:64
nvme0: ABORTED - BY REQUEST (00/07) sqid:7 cid:67 cdw0:0

Not sure if this should be a concern... There is an issue open about that https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=230722

Another Note: See optional config bits below for sleeping when closing lid.

Optional

  • xorg.conf
# All non-default X11 font directories must specified manually because
# the X server does not search directories recursively...
# Also, check /var/log/Xorg.0.log for missing fonts.dir files
# Most likely some directories will miss theirs, in which case you need
# to cd there and run mkfontdir...
Section "Files"
  FontPath "/usr/local/share/fonts/Caladea/"
  FontPath "/usr/local/share/fonts/Carlito/"
  FontPath "/usr/local/share/fonts/GentiumBasic/"
  FontPath "/usr/local/share/fonts/Liberation/"
  FontPath "/usr/local/share/fonts/LinLibertineG/"
  FontPath "/usr/local/share/fonts/TerminusTTF/"
  FontPath "/usr/local/share/fonts/TTF/"
  FontPath "/usr/local/share/fonts/Type1/"
  FontPath "/usr/local/share/fonts/cyrillic/"
  FontPath "/usr/local/share/fonts/dejavu/"
  FontPath "/usr/local/share/fonts/encodings/"
  FontPath "/usr/local/share/fonts/terminus-font/"
  FontPath "/usr/local/share/fonts/twemoji-color-font-ttf/"
  FontPath "/usr/local/share/fonts/util/"
EndSection
  • Don't want some options, /etc/make.conf
OPTIONS_SET+=SNDIO      # BSD specific sound system
 
OPTIONS_UNSET+=DOCS     # I only install specific ones
OPTIONS_UNSET+=EXAMPLES # Same
OPTIONS_UNSET+=IPV6     # IPV6 free laptop already saved the day twice
  • Keyboard rate
xset rate r rate 250 34
kbdcontrol -r fast
  • in /etc/sysctl.conf
# No BEEPS!
hw.syscons.bell=0
kern.vt.enable_bell=0

# Suspend to RAM when closing lid (for laptop with a working S3)
hw.acpi.lid_switch_state=S3
  • If you don't like the touchpad and only use the emblematic Thinkpad pointing stick, you can disable the touchpad entirely in the BIOS (hurray!)
  • in ~/.login.conf
me:\
        :charset=UTF-8:\
        :lang=en_GB.UTF-8:\
        :setenv=LC_COLLATE=C:
  • in /etc/rc.conf
dbus_enable="YES"       # Enable DBUS
dumpdev="NO"            # Disable crash dumps

References