Difference between revisions of "FreeBSD on X1 Carbon (Gen 6)"

From Run Your Own
Jump to: navigation, search
(Webcam)
(Trackpad/Touchpad)
 
(13 intermediate revisions by the same user not shown)
Line 42: Line 42:
 
* Choose your USB device (USB HDD)
 
* Choose your USB device (USB HDD)
 
* Follow instructions from BIOS update utility
 
* 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 <code>/boot/loader.conf</code> 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 ===
 
=== WiFi ===
 
* in /etc/rc.conf
 
* in /etc/rc.conf
  # Wireless
+
  # Wireless (change to relevant country code)
 
  wlans_iwm0="wlan0"
 
  wlans_iwm0="wlan0"
 
  background_dhclient="YES"
 
  background_dhclient="YES"
 
  ifconfig_wlan0="WPA DHCP country NL"
 
  ifconfig_wlan0="WPA DHCP country NL"
 +
 +
=== Trackpad/Touchpad ===
 +
With the update of <code>x11-servers/xorg-server</code> to 1.20.7, xorg-server has switched from using the <code>devd</code> backend to the <code>udev</code> backend for device configuration on FreeBSD 12 and 13. If you do not do anything, the trackpad and touchpad that used to work out of the box, will... not work anymore. If you want then back:
 +
* Make sure these options are enabled with <code>x11-drivers/xorg-drivers</code>:
 +
[X] EVDEV
 +
[X] LIBINPUT
 +
[X] MOUSE
 +
[X] SYNAPTICS
 +
* Add to <code>/etc/sysctl.conf</code>
 +
# Enable evdev hardware mouse + hardware keyboard
 +
kern.evdev.rcpt_mask=12
 +
* Tell the PS/2 driver to not handle the Trackpoint and Trackpad
 +
# Disable Trackpoint and Trackpad support in psm
 +
hw.psm.trackpoint_support="0"
 +
hw.psm.synaptics_support="0"
  
 
=== GPU ===
 
=== GPU ===
Line 72: Line 100:
 
</pre>
 
</pre>
 
Note: These days all the useful options are enabled by default so no need to add too many extra parameters.
 
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 ===
 
=== Headphones ===
Line 81: Line 113:
  
 
=== Webcam ===
 
=== 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 <code>cuse4bsd</code> kernel module and <code>webcamd</code>
 
* Install the <code>cuse4bsd</code> kernel module and <code>webcamd</code>
 
  portmaster -iB multimedia/cuse4bsd-kmod multimedia/webcamd multimedia/pwcview
 
  portmaster -iB multimedia/cuse4bsd-kmod multimedia/webcamd multimedia/pwcview
Line 103: Line 136:
 
== Sleep ==
 
== Sleep ==
 
* You need at least BIOS 1.30 (see BIOS section to know how to update BIOS)
 
* You need at least BIOS 1.30 (see BIOS section to know how to update BIOS)
* In BIOS change sleep state mode to Linux
+
* '''In BIOS change sleep state mode to Linux'''
 
* when you want to suspend to RAM:
 
* when you want to suspend to RAM:
 
  sudo zzz
 
  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.
 
'''Another Note:''' See optional config bits below for sleeping when closing lid.
Line 174: Line 201:
 
== References ==
 
== References ==
 
* https://www.freebsd.org/doc/handbook/
 
* https://www.freebsd.org/doc/handbook/
 +
* https://cooltrainer.org/a-freebsd-desktop-howto/
 
* https://corrupted.io/2018/06/06/X1C6G-S3-DSDT-FreeBSD.html
 
* https://corrupted.io/2018/06/06/X1C6G-S3-DSDT-FreeBSD.html

Latest revision as of 19:26, 23 May 2020

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 (change to relevant country code)
wlans_iwm0="wlan0"
background_dhclient="YES"
ifconfig_wlan0="WPA DHCP country NL"

Trackpad/Touchpad

With the update of x11-servers/xorg-server to 1.20.7, xorg-server has switched from using the devd backend to the udev backend for device configuration on FreeBSD 12 and 13. If you do not do anything, the trackpad and touchpad that used to work out of the box, will... not work anymore. If you want then back:

  • Make sure these options are enabled with x11-drivers/xorg-drivers:
[X] EVDEV
[X] LIBINPUT
[X] MOUSE
[X] SYNAPTICS
  • Add to /etc/sysctl.conf
# Enable evdev hardware mouse + hardware keyboard
kern.evdev.rcpt_mask=12
  • Tell the PS/2 driver to not handle the Trackpoint and Trackpad
# Disable Trackpoint and Trackpad support in psm
hw.psm.trackpoint_support="0"
hw.psm.synaptics_support="0"

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

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