FreeBSD on X1 Carbon (Gen 6): Difference between revisions

From Run Your Own
Jump to navigation Jump to search
No edit summary
 
(39 intermediate revisions by the same user not shown)
Line 31: Line 31:


== Hardware Specific config ==
== Hardware Specific config ==
=== DRM Next Kernel Module ===
=== 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 <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 ===
* 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 <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 ===
==== DRM Next Kernel Module ====
* Install the port
* Install the port
  portmaster -i graphics/drm-next-kmod
  portmaster -i graphics/drm-next-kmod
Line 42: Line 89:
* reboot
* reboot
  shutdown -r now
  shutdown -r now
==== Xorg ====
* /etc/X11/xorg.conf
<pre>
Section "Device"
  Identifier  "Intel Graphics"
  Driver      "intel"
  Option      "TearFree" "true"
EndSection
</pre>
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):
<pre>
# Enable headphones
hint.hdaa.0.nid33.config="as=1 seq=15"
</pre>
=== 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>
portmaster -iB multimedia/cuse4bsd-kmod multimedia/webcamd multimedia/pwcview
* Load the <code>cuse4bsd</code> kernel module at boot time, edit <code>/boot/loader.conf</code>:
# Character device driver for webcams
cuse4bsd_load="YES"
* Start <code>webcamd</code> daemon at boot time, edit <code>/etc/rc.conf</code>:
# Webcam daemon
webcamd_enable="YES"
* Test webcam with:
pwcview -s uxga -f 30


=== Thinkpad drivers ===
=== Thinkpad drivers ===
Used for LCD control, suspend, etc...
Used for LCD control, suspend, etc...
* in /boot/loader.conf
* in /boot/loader.conf
# Thinkpad stuff
<pre>
acpi_video_load="YES"
# Thinkpad stuff
acpi_ibm_load="YES"
acpi_video_load="YES"
acpi_ibm_load="YES"
</pre>
 
== 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 ==
== Optional ==
* xorg.conf
<pre>
# 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
</pre>
* Don't want some options, /etc/make.conf
<pre>
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
</pre>
* Keyboard rate
xset rate r rate 250 34
kbdcontrol -r fast
* in /etc/sysctl.conf
<pre>
# 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
</pre>
* 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
<pre>
dbus_enable="YES"      # Enable DBUS
dumpdev="NO"            # Disable crash dumps
</pre>


== 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

Latest revision as of 18: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