FreeBSD sur un ThinkPad - FreeBSD on a ThinkPad

Mon portable donnait des signes de faiblesse. Le clavier abîmé par le chat qui le prenait pour dormir, le support de FreeBSD lui-même qui était aléatoire. Son âge aussi, plus de 3 ans. Et je l’ai un peu mal traité.

Je me suis donc décidé à le changer. Après un rapide sondage sur la page Facebook de FreeBSD, il s’avère que les portables qui sont le mieux supportés par FreeBSD sont les ThinkPad de Lenovo, version X ou T. Les T sont bien plus cher que les X, j’ai donc opté pour un X280.

English version below

La configuration du portable

J’ai décidé, même si c’est un peu cher, d’avoir un portable bien pourvu. J’ai donc choisi d’avoir 16Go de RAM, un SSD de 512Go, un core i7 de 8e génération à 4,00Ghz. j’ai également choisi, et c’est l’un des points fort des portables de grandes marques, un clavier QWERTY.

Comme prévu, j’étais absent lors de la première présentation du colis. J’ai patienté le lendemain pour avoir mon précieux.

Déballage

La machine est bien emballée, sans fioriture à la « Apple ». l’alimentation est au standard de l’Union Européenne, via un connecteur USB-c. Pas de superflu, pas de CD/DVD. La machine est livrée avec Windows 10.

Un très bon point pour cette machine, elle dispose d’un cache webcam.

Sauvegarde de Window10

Après certains déboires avec la machine précédente, j’ai appris qu’il fallait conserver un Windows d’origine dans un coin. C’est utile pour faire les mises à jour du firmware de la machine qui ne sont fournies que pour cet OS.

Microsoft propose un outil sur son site pour faire une clef USB de secours. En fait, il suffit de télécharger l’image ISO de Windows et de la mettre sur le support désiré.

Il faut bien sûr s’assurer quel le support est bootable avant de tout casser.

Mise à jour du l’UEFI sans Windows

Il semble qu’il soit possible de mettre à jour l’UEFI en utilisant une image ISO téléchargable ici.

Je dois avouer que je ne l’ai pas fait, de peur de tout perdre. Pensez à faire DES sauvegardes.

Téléchargement de l’image FreeBSD 12.0-RELEASE

Pour télécharger la bonne image, rendez-vous sur site de FreeBSD. Je l’ai fait sur mon ancienne machine pour bénéficier des outils que je connais bien pour mettre cette image sur une clef USB.

La commande utilisée couramment pour copier une image sur une clef USB est dd(1) :

# dd if=/chemin/vers/limage.img of=/chemin/vers/le/périphérique

Malheureusement, la commande dd(1) ne donne aucun état d’avancement du processus, c’est frustrant et on peut se demander s’il n’est pas planté. C’est là que la commande pv(1) vient à notre secours.

 Mon utilisation de dd est ancienne. Les nouvelle versions on désormais un paramètre status=progress`

# pv -tepb FreeBSD-12.0-RELEASE-amd64-memstick.img | dd of=/dev/da0
1% [=                                                              ]

Configuration UEFI/BIOS sur le ThinkPad

L’image de FreeBSD-12.0-RELEASE et l’OS lui même peuvent démarrer directement sur l’UEFI. Vérifiez que l’ordre de test est bien [UEFI first then BIOS]

Une fois ces opérations réalisées, on peut démarrer sur la clef USB et commencer l’installation. Choisissez les options que vous désirez. J’ai opté pour une installation sur ZFS chiffré. Le processus d’installation est extrêmement rapide.

En plus du mot de passe root qui vous est demandé, pensez à créer tout de suite un autre utilisateur, celui de tous les jours.

 J’ai choisi le même UID/GID que mon utilisateur sous GNU/Linux au travail pour faciliter les échanges de fichiers. Pensez ausi à ajouter votre utilisateur au groupe wheel

L’installation terminée il faut redémarrer et penser à retirer la clef USB de son port.

Ça démarre et après

Il est temps de se connecter et de constater que l’on a pas grand-chose et en particulier, pas de réseau WiFi.

La connexion au réseau WiFi

Il faut déterminer le matériel présent dans la machine et trouver le bon pilote à charger dans le noyau.

# pciconf -lvc
…
iwm0@pci0:59:0:0:   class=0x028000 card=0x00108086 chip=0x24fd8086 rev=0x78 hdr=0x00
    vendor     = ’Intel Corporation’
    device     = ’Wireless 8265 / 8275’
    class      = network
…

Nous voilà renseignés, il s’agit d’une carte intel wireless 8265/8275. Les trois premières lettres nous renseignent même sur le pilote à utiliser, ici : iwm.

Le fichier /boot/loader.conf

C’est dans ce fichier que nous allons demander le chargement du pilote au démarrage du noyau.

1
2
3
4
if_iwm_load="YES"
iwm8265fw_load="YES"
wlan_ccmp_load="YES"
wlan_tkip_load="YES"

Le fichier /etc/rc.conf

Dans ce fichier nous allons créer un alias vers le pilote que nous venons définir dans /boot/loader.conf. Nous allons également indiquer les options que le périphérique WiFi devrait utiliser pour fonctionner. Ainsi, nous lui indiquons qu’il devrait prendre son adresse via DHCP :

1
2
3
background_dhclient="YES"
wlans_iwm0="wlan0"
ifconfig_wlan0="WPA SYNCDHCP powersave"

La demande de DHCP en tâche de fond permet de ne pas bloquer le processus de démarrage si par malchance aucun serveur DHCP ne pouvait nous répondre. C’est le même principe qui procède de l’option SYNCDHCP. L’option WPA sert à mettre en place les connexions chiffrées via le protocole idoine et indique par la même que nous allons utiliser un fichier de configuration supplémentaire.

Le fichier /etc/wpa_supplicant

Ce fichier va stocker les informations des différents réseaux WiFi/WPA que vous allez utiliser. Chez vous, dans votre entreprise, à l’hôtel, dans le train, etc. Commençons par le réseau le plus proche de vous.

Chaque bloc network correspond à un réseau différent.

1
2
3
4
5
6
7
network={
        ssid="Maison-sucree-Maison"
        bssid=aa:bb:cc:dd:ee:ff
        key_mgmt=WPA-PSK
        proto=RSN
        psk="ilestpasbeaumonmotdepasse"
}
1

Lors du lancement du daemon wpa_supplicant, celui-ci va scanner les réseaux environnants et s’il trouve une correspondance avec l’un de ceux définis dans votre fichier de configuration, il y a des chances pour que la connexion se fasse toute seule.

Un petit test

Il est temps de tester notre configuration en relançant les différents éléments nécessaires. En fait, le redémarrage du réseau suffit a lancer aussi wpa_supplicant et la demande d’une adresse IP au serveur DHCP (pourvu que vous en ayez un opérationnel à portée d’ondes).

# service netif restart

La commande ifconfig nous renseigne sur l’état de notre connexion :

# ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    ether a1:b2:c3:d4:e5:f6
    hwaddr a1:b2:c3:d4:e5:f6
    inet 11.22.33.44 netmask 0xffffff00 broadcast 11.22.33.255
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
    media: IEEE 802.11 Wireless Ethernet DS/2Mbps mode 11g
    status: associated
    ssid Maison-sucree-Maison channel 11 (2462 MHz 11g) bssid aa:bb:cc:dd:ee:ff
    regdomain FCC country US authmode WPA2/802.11i privacy ON
    deftxkey UNDEF AES-CCM 2:128-bit powersavemode CAM powersavesleep 100
    txpower 30 bmiss 10 scanvalid 60 protmode CTS wme roaming MANUAL
    groups: wlan

On dirait que le réseau WiFi fonctionne.

Mise à jour du système

À partir du moment où le réseau fonctionne, il est possible, voire nécessaire de faire les mises à jours des logiciels installés de base.

bootstrap du système de gestion de paquet

Il est indispensable que le système de paquet (pkg(7)) ait connaissance des paquets disponibles sous format binaire, si c’est ce que vous voulez utiliser.2

Mise à jour des paquets déjà installés

La mise à jour se fait avec le même utilitaire :

# sudo pkg upgrade

Le bluetooth

Malgré tous mes efforts, je n’arrive pas à le faire fonctionner. Un trou en moins dans la sécurité du portable ☺.

La carte graphique

De nos jours il devient difficile de se passer d’une interface graphique (même si ce blog est écrit avec vim(1) et que j’utilise mutt(1) pour gérer mon courrier électronique.

En fait, l’installation d’une interface graphique avec Xorg fonctionne presque toute seule. J’ai choisi mate (ex gnome2).

# sudo pkg install mate-common

La configuration de Xorg

On arrive à la partie la plus compliquée de l’installation. Longtemps, j’ai utilisé le pilote vesa(4x). Ce pilote est lent et ne permet pas à la machine de donner son plein potentiel. Heureusement il existe un autre pilote, i915kms. Il suffit de le charger au lancement de la machine, dans le fichier /etc/rc.conf en ajoutant la ligne :

kld_list="/boot/modules/i915kms.ko"

Dans le répertoire /usr/local/etc/X11/xorg.conf.d on ajoute un fichier driver.intel.conf pour utiliser ce pilote :

1
2
3
4
5
6
7
8
9
Section "Device"
        Option          "AccelMethod"
        Option          "TripleBuffer"
        Option          "HotPlus"
        Option          "TearFree"
        Identifier      "Card0"
        Driver          "intel"
        BusID           "PCI:0:2:0"
EndSection

La prise en compte se fera au prochain redémarrage ou, si vous avez chargé le pilote drm-next3, au prochain redémarrage de l’interface graphique.4

La console de connexion

Avec Mate, il n’y a pas de gestionnaire de connexions graphique prévu. Le seul logiciel qui fonctionne correctement bien qu’abandonné est SLiM. Fort heureusement, il fait encore partie des ports *BSD. Nous allons donc pouvoir l’installer tranquillement.

# pkg install slim-freebsd-themes slim-themes

Nous en profitons pour installer les thèmes spécifiques à FreeBSD et d’autres thèmes.

Le fichier de configuration est /usr/local/etc/slim.conf. La seule modification est le choix du thème. Ceux-ci se trouvent dans /usr/local/share/slim/themes/. Tous (ou presque) présentent une image de prévisualisation, à vous de choisir celui qui vous sied le plus.5

Il existe des alternatives à slim : gdm, xdm, sddm etc. Je vous laisse les découvrir.

Il faut aussi demander au système de lancer le daemon slim au démarrage. Cela se fait en ajoutant la ligne slim_enabled="YES" dans le fichier /etc/rc.conf. Par exemple ainsi :

# sysrc slim_enabled="YES"

Le touchpad

En fait, le touchpad fonctionne sans configuration. Il est assez étrange de ne pas trouver de panneau de contrôle pour le gérer. C’est donc en chargeant un module noyau et en changeant des valeurs pour Xorg que l’on arrive à avoir une configuration optimale.

Prise en charge par le noyau

Dans le fichier /boot/loader.conf, il faut ajouter la ligne :

hw.psm.synaptics_support="1"

Configuration de Xorg

Pour cette configuration, nous allons copier le fichier fourni par défaut /usr/local/share/X11/xorg.conf.d/70-synaptics.conf dans le répertoire /usr/local/etc/X11/xorg.conf.d.

# sudo cp /usr/local/share/X11/xorg,d/70-synaptics.conf /usr/local/etc/X11/xorg.conf.d/.

Puis le modifier à notre sauce :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
EndSection

Section "InputClass"
        Identifier "touchpad ignore duplicates"
        MatchIsTouchpad "on"
        MatchOS "Linux"
        MatchDevicePath "/dev/input/mouse*"
        Option "Ignore" "on"
EndSection

Section "InputClass"
        Identifier "enable synaptics SHMConfig"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Option "SHMConfig" "true"
EndSection

Section "InputDevice"
        Identifier "Mouse0"
        Driver "mouse"
        Option "Protocol" "auto"
        Option "Device" "/dev/sysmouse"
        Option "ZAxisMapping" "4 5 6 7"
EndSection

 ZAxisMapping 4 5 6 7 représentent les boutons de la souris et les déplacements verticaux.

 Pour avoir le ¨Natural Scrolling¨, vous pouvez ajouter le fichier /usr/local/etc/X11/xorg.conf.d/20-natural-scrolling.conf qui contient :

1
2
3
4
5
6
7
8
Section "InputClass"
        Identifier "Natural Scrolling"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Option "VertScrollDelta" "-1"
        Option "HorizScrollDelta" "-1"
        Option "DialDelta" "-1"
EndSection

Les touches « spéciales »

Le clavier de mon X280 comporte des touches spéciales pour gérer le son (plus/moins/silence) et la luminosité de l’écran. Ces fonctions marchent avec les combinaisons de touches Fn+F1 (silence), Fn+F2 (moins), Fn+F3 (plus), Fn+F5 (moins de luminosité) et Fn+F6 (plus de luminosité).

Dans l’interface graphique

Malheureusement ces combinaisons de touches ne fonctionnent pas par défaut. Il faut ajouter le port graphics/intel-backlight et le tester de façon simple :

# sudo pkg install intel-backlight
…
# intel_backlight decr 15

La luminosité devrait diminuer de 15 %. Utilisez plusieurs fois la dernière commande pour vérifier que le changement est significatif. Pour augmenter la luminosité il suffit de remplacer decr par incr.

Si cela fonctionne, il vous reste à configurer ces combinaisons dans les raccourcis clavier de votre interface graphique.

Dans le même temps reconfigurer, les raccourcis par défaut pour le son.6

Suspendre et reprendre

Le gros avantage du portable, est de pouvoir le fermer, se déplacer et reprendre le travail où on l’avais laissé sans redémarre. Cette possibilité, appelée « Suspend and Resume » ne fonctionnait pas correctement sur ma machine, jusqu’à ce que découvre le Blog de Gawen qui explique comment mettre en place cette fonctionnalité.

Je ne vais pas reproduire son billet de blog ici, ce serait inutile.

Dans le UEFI/BIOS

Il est possible, dans le UEFI/BIOS, de faire en sorte que les touches de fonction soient accessibles sans passer par la touche Fn. Cela peut faciliter la vie.

Accèder aux CD Audio

Il faut modifier dans le fichier /etc/devfs.conf ainsi :

link    cd0     cdrom
link    cd0     dvd

perm    cd0     0666
perm    xpt0    0666
perm    pass0   0666

Puis de redémarrer devfs :

 # service devfs restart

Conclusion

FreeBSD sur un Thinkpad X280, cela fonctionne. Il y a deux petites choses qui me dérangent :

  • impossible de désactiver le touchpad pendant la frappe au clavier. Un survol trop proche avec le pouce peut envoyer le curseur bien loin de la ligne que vous êtes en train d’écrire ;
  • le bluetooth qui ne fonctionne pas ;

Cette installation est la mienne et me convient. Je ne me prétend par expert et d’autres peuvent sans doute faire mieux.

Mise à jour du 9 novembre 2019

J’ai fait la mise à jour de mon kernel en 12.1-RELEASE et j’ai eu quelques problèmes.

Le module i915kms.ko

Au chargement de ce module, la machine plante et redémarre. Ce n’est pas le comportement désiré.

Après avoir exposé mon problème sur la liste freebsd-hardware, il s’avère que c’est une bug connu avec une solution. Il suffit de recompiler le module depuis les ports. Voici la procédure :

  https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=241101

Tout d’abord, dans le menu de démarrage, choissez l’option 2 - Single user boot afin de démarrer sans les couches supérieures du système.

Une fois que vous avez rentré le mot de passe et le chemin vers le shell à utiliser (faites entrée sur ce choix) vous vous retrouvez avec un simple #.

Nous allons monter le système de fichier en mode lecture/écriture (il est en lecture seule par défaut) et monter les datasetsZFS :

 # mount -u /
 # zfs mount -a

À partir de là nous allons pouvoir éditer le fichier /etc/rc.conf pour commenter la ligne kld_list="/boot/modules/i915kms.ko"

Ensuite, nous reprenons la séquence de démarrage en tant exit.

Une nouvelle fois nous nous connectons avec l’utilisateur root et nous allons recompiler notre module noyau :

 # cd /usr/ports/graphics/drm-fbsd12.0-kmod
 # make install clean
 …

Des tas de lignes inconpréhensible pour le commun des mortels font s’afficher avec que la main ne vous soit rendu.

Il est temps de réactiver la ligne kld_list="/boot/modules/i915kms.ko" dans le fichier /etc/rc.conf et de redémmarer la machine.

Et cette fois, elle va jusqu’à la fin et vous propose la connexion graphique.

Lien externe

Je vous conseille de télécharger et de garder avec vous le PDF dont voici le lien : - tp_x280_hmm_en.pdf

English version



My laptop was at the end of its life. 3 years old only, but the keyboard was used by the cat to sleep, the FreeBSD support was not really good and I wasn’t very soft with it.

So I decided to change. After asking the Facebook FreeBSD User Group I decided to buy a Lenovo X280 with a 500GB SSD, 16GB of memory and an Intel Corei7 8th generation, 4.00Ghz.

The package

The computer is very well packed, with no fioriture like Apple did. Standard EU power Supply with USB-c connector. Nothing more, no CD/DVD. The computer is delivered with Windows 10.

Very good point, there is a hard webcam cache (a small slider, to cover the lens).

Windows 10 Backup

With the previous machine, I learned that we should always copy of the original OS. It’s the only way to make the firmware update for example.

Microsof provide a tool, on his website in order to make a rescue usb key. In fact, It’s only an ISO image of Windows to put on the USB volume.

Be sure to boot with this support before break everything.

UEFI update whitout Windows

It seems possible to update the UEFI by downloading a bootable ISO image, here.

I did not try by fear to lose everything. If you decide to do it, make backups.

Downloading FreeBSD 12.0-RELEASE

In order to download the right image please visit the official FreeBSD website. I used to do this download on my old laptop (wich was already on FreeBSD) to use tools that I really know to make a bootable USB key.

The main command to copy an image to another support is dd(1):

# dd if=/path/to/image.img of=/path/to/support

Unfortunately, dd(1) does not provide any feedback. It’s frustrating and you can ask yourself if the process is not broken. The command pv(1) can help us.

 I was using dd for a long time. The new version has now a status=progress parameter.

# pv -tepb FreeBSD-12.0-RELEASE-amd64-memstick.img | dd of=/dev/da0
1% [=                                                              ]

Configure UEFI/BIOS on ThinkPad

The FreeBSD-12.0-RELEASE usbstick and the OS itself could boot on UEFI. Be sure that the boot sequence is [UEFI first then BIOS]

Once you did it, boot on the USB key and start the installation. Pick the options you want/need. I choose to install a encrypted ZFS. A passphrase will be asked during the installation process and asked every time the system boot.

The installation process is pretty fast.

You will ask to choose a root password. The install process will also ask for creating another user in order to NOT work as root.

 I choosed the same uid/gid as my user on GNU/linux at work in order to exchange files with no owner difficulties. Remember to invite your user in the wheel group.

Once the installation finished, it’s time to reboot and remove the USB key.

Well it’s booting, and after

Log in and you’ll notice that we don’t have a lot of things that works, especially no WiFi.

The WiFi connection

We need to find which hardware is on the computer in order to find the right driver to load in the kernel.

# pciconf -lvc
…
iwm0@pci0:59:0:0:   class=0x028000 card=0x00108086 chip=0x24fd8086 rev=0x78 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = 'Wireless 8265 / 8275'
    class      = network
…

Here is the answer, it’s an intel wireless 8265/8275 wireless card. The first third letter give us the driver to use, iwm.

The /boot/loader.conf file

In this file we will put a lot of information about the boot sequence and the driver to load in the kernel.

1
2
3
4
if_iwm_load="YES"
iwm8265fw_load="YES"
wlan_ccmp_load="YES"
wlan_tkip_load="YES"

The /etc/rc.conf file

In this file, we describe which services to start automatically at boot.

Here we’re gonna make an alias for the driver put in /boot/loader.conf file. We also define the option for the WiFi device had to use in order to work. Therefore we say it to find it’s IP Address using DHCP:

1
2
3
background_dhclient="YES"
wlans_iwm0="wlan0"
ifconfig_wlan0="WPA SYNCDHCP powersave"

The DHCP request in background allow to not slow down the other boot processes if there is no responding DHCP server. It’s the same for SYNCDHCP. The option WPA is used to prepare the encrypted connection with the WPA protocol. We will use another file to describe the connection itself.

The /etc/wpa_supplicant file

In this file we will have the informations for all the known WiFi connections. At home, at work, in the train, at the hotel, etc. Starting with the nearest network.

Each network block is a different network.

1
2
3
4
5
6
7
network={
        ssid="Home-Sweet-Home
        bssid=aa:bb:cc:dd:ee:ff
        key_mgmt=WPA-PSK
        proto=RSN
        psk="whatawonderfulpasswordisntit"
}
7

When the daemon wpa_supplicant starts, it’s gonna scan the Wi-Fi networks around you and look if one is already known. If it is the case, the connection will be esthablished automatically.

A small test

It’s time to test your configuration by relaunching all the necessary parts. In fact, restarting the network itself will launch wpa_supplicant to and the request for an IP address to a DHCP should work if you have a fonctional server.

# service netif restart

The ifconfig command give us information about our connections:

# ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    ether a1:b2:c3:d4:e5:f6
    hwaddr a1:b2:c3:d4:e5:f6
    inet 11.22.33.44 netmask 0xffffff00 broadcast 11.22.33.255
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
    media: IEEE 802.11 Wireless Ethernet DS/2Mbps mode 11g
    status: associated
    ssid Home-Sweet-Home channel 11 (2462 MHz 11g) bssid aa:bb:cc:dd:ee:ff
    regdomain FCC country US authmode WPA2/802.11i privacy ON
    deftxkey UNDEF AES-CCM 2:128-bit powersavemode CAM powersavesleep 100
    txpower 30 bmiss 10 scanvalid 60 protmode CTS wme roaming MANUAL
    groups: wlan

It looks like a WiFi connection is established.

System update

Once network is working, you have to update default installed software.

bootstrap of the Package Manager System

It’s mantadory for the package manager (pkg(7)) to know which packages are available in binary format, if this is the way you want to install softwares.8

# sudo pkg

Update of the already installed packages

The update use the same pkg(7) command:

# sudo pkg upgrade

The bluetooth

Despite all my efforts and searches, I cannot find a way to make it working. This is a security hole fixed!

The graphic card

Nowadays it’s really difficult to not use a graphical interface (even though this blog is written with vim(1) and I use mutt(1) to manage my emails.

In fact, the graphic card installation with Xorg works almost by itself. I chose the mate (ex gnome2) desktop environment.

# sudo pkg install mate-common

Xorg configuration

This is the most complicated part of the installation. During a long time I used the vesa(4x) driver. This driver is very slow and does not allow the computer to be used at is full potential. Fortunately there is another driver, i915kms. You just have to load it at the machine boot. This is done by inserting a new line in /boot/loader.conf:

kld_list="/boot/modules/i915kms.ko"

In the /usr/local/etc/X11/xorg.conf.d we have to add a configuration file for the driver, driver.intel.conf:

1
2
3
4
5
6
7
8
9
Section "Device"
        Option          "AccelMethod"
        Option          "TripleBuffer"
        Option          "HotPlus"
        Option          "TearFree"
        Identifier      "Card0"
        Driver          "intel"
        BusID           "PCI:0:2:0"
EndSection

The file will be used at the next reboot or, if you already loaded the i915kms9 driver, the next time you restart the graphical interface10

Console login

Mate doesn’t provide any graphical login interface. The only working software is an abandonned software named SLiM. Fortunately it is still in the *BSD ports. We just have to install it:

# pkg install slim-freebsd-themes slim-themes

We install themes at the same time.

The configuration file is /usr/local/etc/slim.conf. The only modification we have to do is the theme choice. The themes are in /usr/local/share/slim/themes. Almost every one of them provide a preview image letting you choose the one your prefer11.

You also need to ask the system to launch the slim daemon during the boot. You can do it by adding the line slim_enabled="YES" in the /etc/rc.conf file or by using the command sysrc(8).

# sysrc slim_enabled="YES"

 There are other display managers like gdm, xdm, sddm. I let you discover them.

The TouchPad

In fact, the Touchpad work out of the box. But it’s very strange to not have a control panel for it. In order to have an optimal configuration we will change some kernel parameters and values in Xorg configuration.

Load the driver into the kernel

Add this line into your /boot/loader.conf file:

hw.psm.synaptics_support="1"

Xorg additionnal configuration

For this configuration we are going to copy the defaults provided file /usr/local/share/X11/xorg.conf.d/70-synaptics.conf in the /usr/local/etc/X11/xorg.conf.d/ folder:

# sudo cp /usr/local/share/X11/xorg,d/70-synaptics.conf /usr/local/etc/X11/xorg.conf.d/.

Then modify it for our use:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
EndSection

Section "InputClass"
        Identifier "touchpad ignore duplicates"
        MatchIsTouchpad "on"
        MatchOS "Linux"
        MatchDevicePath "/dev/input/mouse*"
        Option "Ignore" "on"
EndSection

Section "InputClass"
        Identifier "enable synaptics SHMConfig"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Option "SHMConfig" "true"
EndSection

Section "InputDevice"
        Identifier "Mouse0"
        Driver "mouse"
        Option "Protocol" "auto"
        Option "Device" "/dev/sysmouse"
        Option "ZAxisMapping" "4 5 6 7"
EndSection

 ZAxisMapping 4 5 6 7 are the mouse bouton and vertically scrolls

 In order to have the ¨Natural Scrolling¨, you can add another fonfiguration file called /usr/local/etc/X11/xorg.conf.d/20-natural-scrolling.conf:

1
2
3
4
5
6
7
8
Section "InputClass"
        Identifier "Natural Scrolling"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Option "VertScrollDelta" "-1"
        Option "HorizScrollDelta" "-1"
        Option "DialDelta" "-1"
EndSection


The “specials” keys

On my X280 keyboard there are special keys to manage sound (increase/decrease/muted) and the screen brightness. Those functions work the shortcut Fn+F(muted), Fn+F2 (decrease), Fn+F3 (increase), Fn+F5/Fn+F6 (brightness).

In the graphical interface

Unfortunately those shorcuts does not work out of the box. We need to add the port graphics/intel_backlight and test it with a very simple command:

# sudo pkg install intel_backlight
…
# intel_backlight decr 15

The bightness of your screen decrease by 15%. Use the last command several times to see if it really changes. To increase brightness just replace decr by incr.

If it works, you just have to configure those shortcuts in the graphical interface.

In the same time configure the sound keys.12

In the UEFI/BIOS

You can, in the UEFI/BIOS switch Function keys to get utility shortcuts without Fn key rather than F-X keys. It could be interesting.

Suspend and resume

Ww use laptop because it’s so easy to close it, move, re-open it and continue the job whitout rebootin the machine. This feature is call “Suspend and Resume” and di not worl well on my installation before I found the Gawens’ blog who explain very clearly how-to configure this feature.

I will not repoduice the blog post here, it will be useless.

Access to Audio CD

We need to make change in /etc/devfs.conf file:

link    cd0     cdrom
link    cd0     dvd

perm    cd0     0666
perm    xpt0    0666
perm    pass0   0666

Then restart devfs:

 # service devfs restart

To conclude

FreeBSD on a Thinkpad X280, it works, Just three little things annoys me:

  • I don’t find a way to automatically disable the touchpad when I use the keyboard. Therefore the cursor sometimes goes away to another line;
  • the Bluetooth does not work.

Update on november 9th 2019

I made the kernel update to 12.1-RELEASE and it don’t work as expected.

The i915kms.ko module

At loading this module, the machine reboot without any message. This not what I want.

After exposing my trouble to the freebsd-hardware mailing list, it appears that is a known bug, with a workaround. You just have to recompile the module from the sources. Here is how-to do that:

  https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=241101

First you need to choose 2 - Single User in the boot menu, to avoid the loading of the superior elements of the system.

One you gave the root password and choose the shell you want to use (just hit the return key for this question), you wil have a minimalist prompt #.

We are going to mount the filesystem in read/write mode (it’s read only by default) and mount the ZFS datasets:

 # mount -u /
 # zfs mount -a

Then we’re going to edit the /etc/rc.conf file and comment the line kld_list="/boot/modules/i915kms.ko"

By using the exit command, the boot sequence will continue.

Once again we have to login as root et it’s time to recompile the kernel module.

 # cd /usr/ports/graphics/drm-fbsd12.0-kmod
 # make install clean
 …

A lot of incomprensive lines will be displayed. To care about them.

Once you have the prompt again (#), edit the /etc/rc.conf file again and uncomment the line kld_list="/boot/modules/i915kms.ko".

Reboot and see the smile on your face, you have the graphical interface.

This installation is mine and is ok for me. I am not an expert and some may have other methods, other tricks.

External Link

Maybe it’s a good idea to download and keep on backup this document: - tp_x280_hmm_en.pdf


  1. Ne rêvez pas, les informations reproduites ici ne sont pas celles d’un réseau Wi-Fi de ma connaissance. [return]
  2. C’est ce que j’utiliserais dans cet article. [return]
  3. avec la commande # sudo kldload i915kms [return]
  4. que vous pouvez provoquer avec la combinaison CTRL+ALT+Effacement [return]
  5. Je pense qu’il est assez simple de faire le vôtre à partir de vos plus belles photos. [return]
  6. Merci à mon ami Bertrand pour m’avoir guidé dans cette configuration et à Porkepix pour les relectures, suggstions et corrections. [return]
  7. Don’t be silly the informations are not real and are not about a network I know. [return]
  8. This is what I will use all along this blog post. [return]
  9. with the command # sudo kldload i915kms [return]
  10. that you can trigger through the shortcut CTRL+ALT+Backspace [return]
  11. I think you can make yours with your own pictures. [return]
  12. Thanks to my friend Bertrand who helped me in this configuration and Porkepix for reread, advice and correct. [return]