Lenovo Yoga 7i (& Yoga 7) - 14ITL5 & 15ITL5

Le dump du BIOS indique les réferences 14ITL05 & 15ITL05, mais ces références semble appartenir à d'autres modèles. Peut-être cela peut fonctionner ou vous aider.

Le tableau suivant récapitule la prise en charge du matériel de portable par les différentes versions d'Ubuntu. Il utilise les notations suivantes :

  • OK 32 bits Fonctionne immédiatement en 32 bits.
  • OK 64 bits Fonctionne immédiatement en 64 bits.
  • 32 et 64 bits Fonctionne immédiatement en 32 et 64 bits.
  • Fonctionne après config Fonctionne après quelques manipulations
  • Ne fonctionne pas Ne fonctionne pas
  • |Pas testé Pas d'informations disponibles
  • Information obsolète Information de support trop ancienne, si possible mettez là à jour.

Ce portable est parfois appelé Yoga 7i ou Yoga 7 (ce n'est pas très claire), et a les références 14ITL5 pour le 14 pouces et 15ITL5 pour le 15 pouces.

Version Installation Carte graphique Son Wifi Bluetooth Webcam Touchpad Raccourcis multimédia Ecran tactile Lecteurs d’empreintes digitales Ecran tactile multipoints
20.04 avec Kernel 5.11.0 à 5.11.5 OK 64 bits OK 64 bits Fonctionne après config OK 64 bits OK 64 bits OK 64 bits OK 64 bits OK 64 bits OK 64 bits Ne fonctionne pas Fonctionne après config
21.04 Live USB OK 64 bits OK 64 bits Fonctionne après config OK 64 bits OK 64 bits OK 64 bits OK 64 bits OK 64 bits OK 64 bits Ne fonctionne pas Fonctionne après config
Infos : Les modifications pour le son et le S3, n'ont pas pu être testé sur le 21.04 live USB, mais doivent fonctionner. Le son fonctionne avec le jack, sans rien modifier.
Sous Ubuntu 20.04 avant le kernel 5.11 il était nécessaire de rajouter initcall_blacklist=elants_i2c_driver_init dans /etc/default/grub pour avoir le tactile fonctionnel.

Utilisateurs du Wiki possédant cet ordinateur, fonctionnel :

Cet ordinateur portable n'est à priori pas tatoué.

Pour démarrer sur le BIOS, il faut démarrer l'ordinateur et appuyer sur F2, on peut aussi utiliser le boot menu sur F12.
Il y a un mini BIOS, on n'a malheureusement pas accès à grand chose.

Il est possible de garder Windows en plus d'Ubuntu.

Post-Installation

Kernel 5.11

Il faut installer le kernel 5.11 pour avoir un fonctionnement complet du PC.
Les kernels après 5.11.5 ne fonctionnent plus chez moi sur Ubuntu 20.04 (dernier testé 5.11.16).

Il faudrait voir pour prendre la mainline kernel d'Ubuntu 21.04 pour ne pas avoir à faire les mise à jour à la main


Tutoriel - Dépot 5.11.5
Je recommande de télecharger :

wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.11.5/amd64/linux-headers-5.11.5-051105-generic_5.11.5-051105.202103091130_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.11.5/amd64/linux-headers-5.11.5-051105_5.11.5-051105.202103091130_all.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.11.5/amd64/linux-image-unsigned-5.11.5-051105-generic_5.11.5-051105.202103091130_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.11.5/amd64/linux-modules-5.11.5-051105-generic_5.11.5-051105.202103091130_amd64.deb

Et d'installer :

sudo dpkg -i *.deb


Il faut désactiver le secure boot
Aller dans le BIOS en appuyant (une ou plusieurs fois) sur F2 au démarrage, tout de suite après l'appuie sur power ou le redémarrage.
Il y a une option Secure Boot, la mettre sur disable.
Ceci à cause de ces noyaux (kernel) qui ne sont pas signés.

Rebooter et verifier :

uname -r

Son

Depuis le kernel 5.11.0 (jusqu’à 5.11.5) la carte son fonctionne, et n'a pas une sortie fictive ou dummy output.
Mais fonctionne qu'avec le jack et un casque ou headphone.
Si vous avez une sortie fictive vérifiez aussi les drivers utilisés, avec la commande :

aplay -l


Vous devez avoir quelques chose qui commence par :

**** Liste des Périphériques Matériels PLAYBACK ****
carte 0: sofhdadsp [sof-hda-dsp], périphérique 0: HDA Analog (*) []


La commande :

sudo dmesg | grep -i audio

Doit afficher des ligne contenant : sof-audio-pci

J'ai fait pas mal de modification, et je ne sais plus si sur Ubuntu 20.04, il faut forcer le driver sof-hda-dsp ou si cela est automatique.
Sur Ubuntu 21.04 aucune modification à faire pour avoir une sortie réelle et le fonctionnement du jack.

Haut-parleur (speakers)

Beaucoup de portable Lenovo (et d'autres marque aussi) avec le chipset ALC287 n'ont pas de sons sur les haut-parleurs.
Sur un pc avec un BIOS non restreint, en modifiant l'option S3 qui est désactivé pour Windows, cela devrait fonctionner facilement. Sur celui-ci il faut faire les modifications à la main.

Pour fonctionner avec les haut-parleurs (speakers) il faut :
* Activer le mode S3 (voir plus bas)
* Vérifier qu'il est bien activé
* Lancer une musique sur VLC par exemple, laisser jouer, passer en veille (suspend-to-RAM), sortir de la veille, et le son fonctionne sur les hauts-parleur (speakers). Si pas de son lu pendant 7 secondes, le son ne fonctionnera plus, il faudra alors remettre en veille.

Il y a un script sur la page de tutoriel, mais nous sommes plusieurs à ne pas avoir un fonctionnement concluant.

→ En édition

Gestion d'énergie / Mode S3 / Deep

Par défaut, pour l'autre OS, le mode S3 est désactivé dans le BIOS, vu que le BIOS est bridé (on a accès a presque rien), on ne peut pas le réactiver.
Il faut le modifier dans Ubuntu.
Le mode S3 est bien plus performant pour le passage en veille, que le s2idle activé par défaut.
Par exemple environ 10h de veille (dans la ram) consome 6% de batterie et ne chauffe pas contrairement au triple (de mémoire) et à un échauffement important en mode S2.

Le mode S3 est obligatoire pour avec le son avec les haut-parleurs.

Vérifier si le S3 est bien activé

Tapez :

cat /sys/power/mem_sleep

"S2idle [deep]" doit apparaitre
Si il y a juste "[s2idle]" il est désactivé.

Puis :

sudo dmesg |grep ACPI|grep supports


Vous devriez avoir :

[    0.195933] ACPI: (supports S0 S3 S4 S5)


Si S3 n’apparaît pas il n'est pas activé.

Activer le mode S3

Cette procédure est différente pour les autres modèles.
Il faut suivre la procédure ici, la voici en simplifié :
1) Installer iasl (Intel's compiler/decompiler for ACPI machine language) and cpio

sudo apt-get install acpica-tools cpio

2) on crée un dossier acpi : mkdir acpi
3) on fait un dump de la table ACPI DSDT

sudo cat /sys/firmware/acpi/tables/DSDT > dsdt.aml

4) On décompile le dump qui va generé un .dsl basé sur le .aml ACPI

iasl -d dsdt.aml

5) on crée notre patch pour notre Yoga 7i : (C'est cette étape qui est propre au matériel)

nano acpi.patch

On met :

--- dsdt.dsl~    2018-04-26 09:35:29.501055509 -0600
+++ dsdt.dsl    2018-04-26 09:36:23.769729028 -0600
@@ -18,7 +18,7 @@
  *     Compiler ID      "INTL"
  *     Compiler Version 0x20210105 (539033861)
  */
-DefinitionBlock ("", "DSDT", 2, "LENOVO", "CB-01   ", 0x00000002)
+DefinitionBlock ("", "DSDT", 2, "LENOVO", "CB-01   ", 0x00000003)
 {
     External (_GPE.AL6F, MethodObj)    // 0 Arguments
     External (_GPE.P0L6, MethodObj)    // 0 Arguments
@@ -516,7 +516,7 @@

     Name (SS1, Zero)
     Name (SS2, Zero)
-    Name (SS3, Zero)
+    Name (SS3, One)
     Name (SS4, One)
     OperationRegion (GNVS, SystemMemory, 0x45AB8018, 0x0A9B)
     Field (GNVS, AnyAcc, Lock, Preserve)

On sauvegarde
6) On applique le patch :

patch --verbose < acpi.patch

Il doit y avoir un message "2 Hunk ok", ou quelque chose comme cela. Testé sur Ubuntu 20.04.
7) On recompile notre version patché du .dsl

iasl -ve -tc dsdt.dsl

8) On crée une archive CPIO avec la structure correct, qui permetra à GRUB de le démarrer au boot.
Nous appelerons l'image finale acpi_override et la copions dans /boot/:

mkdir -p kernel/firmware/acpi
cp dsdt.aml kernel/firmware/acpi
find kernel | cpio -H newc --create > acpi_override
sudo cp acpi_override /boot

9) GRUB doit être paramétré :

sudo nano /etc/default/grub

Chercher et remplacer les lignes suivante :

 GRUB_CMDLINE_LINUX_DEFAULT="mem_sleep_default=deep"
 GRUB_EARLY_INITRD_LINUX_CUSTOM="/boot/acpi_override"

Note : il est possible de garder d'autres parametre dans GRUB_CMDLINE_LINUX_DEFAULT il faut mettre un espace entre chaque.
10) Il faut regenerer la config de GRUB :

sudo update-grub

Ici 2 options : soit GRUB genere la config avec initrd /boot/acpi_override (on le vois apparaitre), soit non (ce qui est mon cas sous Ubuntu 20.04) Si il est apparu on passe à l'étape 12, sinon la 11
11) Il faut que GRUB charge notre nouvelle table DSDT, il faut éditer (en root) /boot/grub/grub.cfg en graphique ou :

sudo nano /boot/grub/grub.cfg

Il faut modifier chaque ligne initrd pour avoir /boot/acpi_override avant l'image noyau, donc pour chaque version du noyau
Exemple :

initrd /boot/initrd.img-5.11.5-051105-generic

Devient :

initrd /boot/acpi_override /boot/initrd.img-5.11.5-051105-generic


Ceci est à perfectionner, puisque a chaque mise à jour de noyau, il faudra refaire la manipulation

12) Redemarer et verifier si cela fonctionne :

sudo dmesg |grep ACPI|grep supports


Vous devriez avoir :

[    0.195933] ACPI: (supports S0 S3 S4 S5)


Si S3 n’apparaît pas il n'est pas activé.

Puis :

cat /sys/power/mem_sleep</sleep>

"S2idle [deep]" doit apparaitre
Si il y a juste "[s2idle]" il est désactivé.

C'est l'élement qui me semble compliqué, on peut vérifier (si ca ne fonctionne pas) avec :

sudo dmesg

On doit avoir :

[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.11.5-051105-generic root=(l'emplacement de votre Ubuntu) ro mem_sleep_default=deep

Il doit y avoir aussi une ligne

ACPI: DSDT 0x.... ... (v02 LENOVO CB-01    00000003 INTL ...)

Il faut avoir le 3 avant INTL (par défaut c'est à 2 avant la modif que l'on viens de faire)
Bien verifier si il y a eu des erreurs, et si on a bien remplacer toutes les lignes initrd.

Touches raccourcis réglage luminosité (hotkeys brightness)

Les touches fonctionnent uniquement après une mise en veille vers la ram (suspend-to-RAM), avec le noyau 5.11.5, cela fonctionnais mal ou pas avec des noyaux précédent (peut être les 5.8).
Certains parlent d'options dans /etc/default/grub, j'ai fait quelques test non concluant, peut-être une piste a creuser avec : acpi_backlight=none

Pavé tactile

Vous pouvez consulter la page consacrée au pavé tactile (touchpad) pour savoir comment utiliser toutes ses possibilités (ascenseur vertical, ascenseur horizontal, …).
Le Touchpad présente souvent le défaut suivant : lorsqu'on tape au clavier, on clique sans le vouloir avec la paume. Consultez ce paragraphe pour corriger ce défaut.

Je n'ai pas constaté ce problème

Ecran Tactile

Multitouch

Si le multitouch ne fonctionne pas immédiatement après l'installation, installez ces paquets:

sudo apt-get install xserver-xorg-input-evdev touchegg

Pour tester si cela fonctionne, tapez "touchegg" dans un terminal et essayez de "scroller" avec deux doigts dans une autre application avec un ascenseur.
Si ça fonctionne, vous devrez ajouter touchegg dans vos programmes au démarrage de session.

Il est possible de faire des fonctions à 3/4 doigts voir ici (non testé)

Avec plusieurs écrans

→ A vérifier

Si vous avez un second écran branché, vous vous apercevrez que le touchscreen ne fonctionne pas comme vous l'attendez probablement : toucher un point sur l'écran ne clique pas en ce point : l'écran tactile couvre la surface totale des deux écrans, et pas seulement la sienne.

Essayez la commande suivante:

xinput --map-to-output "ELAN Touchscreen" eDP1

Si ça fonctionne bien pour vous, ajoutez cette commande aux programmes au démarrage de votre session

Mode tablette : désactiver le clavier et le touchpad

Un capteur détecte le passage en mode retourné ou tablette et désactive le touchpad (sur Plasma et Mate). Sur certains environnement de bureau, l'écran est automatiquement retourné (en plus du touchpad désactivé), c'est le cas de :

  • L’environnement de bureau Ubuntu
  • L’environnement de bureau Ubuntu sur Wayland
  • L’environnement de bureau Cynamon, par contre le tactile considère que l'écran est dans le même sens.

Grouar propose des scripts dans sont tuto pour Yoga 2 Pro

→ A tester

Voici un script bash qui permet de basculer entre le mode tablette (clavier et touchpad désactivés) et le mode laptop :

#!/bin/bash
 
# you can find touchpad and keyboard labels with the command xinput --list
TOUCHPAD_LABEL="SynPS/2 Synaptics TouchPad"
KEYBOARD_LABEL="AT Translated Set 2 keyboard"
 
STATUS_ON=1
STATUS_OFF=0
 
function getStatus {
    # first argument is device id or device name
    status=$(xinput --list-props "$1" | grep "[^\"]Device Enabled.*" | grep -o "[01]$")
    echo $status
}
 
function setStatus {
    xinput set-int-prop "$1" "Device Enabled" 8 $2
}
 
 
tp_status=$(getStatus "$TOUCHPAD_LABEL")
kb_status=$(getStatus "$KEYBOARD_LABEL")
 
if [[ $tp_status == $STATUS_ON ]] && [[ $kb_status == $STATUS_ON ]]
then
    #kdialog --passivepopup 'Keyboard and touchpad disabled' 3 # uncomment if you use kde and want notifications
    setStatus "$TOUCHPAD_LABEL" $STATUS_OFF
    setStatus "$KEYBOARD_LABEL" $STATUS_OFF
else
    #kdialog --passivepopup 'Keyboard and touchpad enabled' 3 # uncomment if you use kde and want notifications
    setStatus "$TOUCHPAD_LABEL" $STATUS_ON
    setStatus "$KEYBOARD_LABEL" $STATUS_ON
fi

Je l'utilise avec un fichier .desktop placé dans ~/.local/share/applications dont le contenu est le suivant :

[Desktop Entry]
Encoding=UTF-8
Name=Toggle Tablet
Comment=Toggle keyboard and touchpad
Exec=~/scripts/toggletablet.sh
Icon=preferences-desktop-display
Type=Application 

Ce qui permet de lancer le script via le menu (dans mon cas, Homerun dans KDE)

Dans mon cas, le script toggletablet.sh est placé dans un dossier script dans /home/grou, à vous d'adapter la ligne Exec à votre installation.

Mode tablette : retourner l'écran

→ A tester

Un autre script pour alterner entre trois orientations d'écran :

#!/bin/sh
# Switch between 3 orientations
state=$(xrandr -q|grep eDP1|cut -d' ' -f5)
case $state in
    inverted)
	xrandr -o normal
	xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1
	xinput enable 'SynPS/2 Synaptics TouchPad'
	;;
    right)
	xrandr -o inverted
	xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1
	xinput disable 'SynPS/2 Synaptics TouchPad'
	;;
    *)
	xrandr --screen 0 -o right
	xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1
	xinput disable 'SynPS/2 Synaptics TouchPad'
	;;
esac

—-

Contributeurs : Pour la base issu de lenovo_yoga_2_pro grouar, pour le Yoga 7 : DavidLenovo

  • lenovo_yoga_7_7i.txt
  • Dernière modification: Le 08/05/2021, 15:45
  • par DavidLenovo