dimanche 5 juillet 2015

Mes problèmes de suspend, et comment je les ai résolus

Depuis quelque temps, je restais sur le noyau 3.14 car c'était le seul qui fonctionnait sans trop de souci. Notamment les noyaux plus récents provoquaient des soucis au suspend: le PC se réveillait presque immédiatement.

J'ai essayé récemment le noyau 4.1 compilé manuellement, et j'ai eu le même souci... et même un souci supplémentaire puisqu'il ne se mettait parfois même plus en veille. Il était temps de déboguer un peu tout ça.

Update novembre 2016: j'ai changé le type de service pour multitouch_reload.

Le PC ne se met plus en veille.

La première étape consiste à comprendre pourquoi le PC ne se mettait plus en veille. Un peu de logs supplémentaires nous seraient utiles. Le plus simple pour les activer temporairement est d'exécuter la commande suivante en root:

systemctl set-environment SYSTEMD_LOG_{LEVEL=debug,TARGET=journal}
systemctl restart systemd-logind

Une fois ces commandes exécutées, on peut avoir des logs avec la commande journalctl -b -u systemd-logind:

juil. 01 08:12:22 beitou systemd-logind[22720]: Lid closed.
juil. 01 08:12:22 beitou systemd-logind[22720]: Ignoring lid switch request, 4 displays connected.
juil. 01 08:12:22 beitou systemd-logind[22720]: Ignoring lid switch request, 4 displays connected.
juil. 01 08:12:28 beitou systemd-logind[22720]: Lid opened.

Oh, j'ai donc 4 moniteurs connectés en même temps ! Ah, en fait non. Il doit donc y avoir une détection qui échoue. Pour en savoir plus, on peut demander gentiment à ACPI:

$ cat /sys/class/drm/*/*/status
unknown
unknown
unknown
unknown

Mais je m'aperçois qu'après un boot les valeurs sont correctes:

$ cat /sys/class/drm/*/*/status
disconnected
connected
disconnected
disconnected

Les valeurs deviennent incorrectes uniquement après un retour de veille. Cependant elles redeviennent normales après (par exemple) un appel à xrandr.

Après quelques rapports de bug, j'ai des pistes. Il semble que ce souci n'arrive que depuis le noyau 4.1. Après avoir appliqué le patch d'un mail de la liste du noyau, ce premier souci est corrigé. Il semble aussi que systemd v221 inclue un contournement au souci, mais je ne l'ai pas essayé.

Place aux autres soucis !

Le PC se réveille après quelques secondes.

Quelques forums m'ont mis la puce à l'oreille: il semble que ce soit le module USB qui envoie des événements de réveil.

On peut le voir en affichant /proc/acpi/wakeup:

$ cat /proc/acpi/wakeup 
Device	S-state	  Status   Sysfs node
P0P1	  S4	*disabled
XHC	  S3	*enabled  pci:0000:00:14.0
HDEF	  S4	*disabled  pci:0000:00:1b.0
RP01	  S4	*disabled  pci:0000:00:1c.0
PXSX	  S4	*disabled
RP03	  S4	*disabled  pci:0000:00:1c.2
PXSX	  S5	*disabled  pci:0000:04:00.0
PXSX	  S4	*disabled  pci:0000:05:00.0
		*disabled  platform:rtsx_pci_sdmmc.0
		*disabled  platform:rtsx_pci_ms.0
PEG0	  S4	*disabled
PEGP	  S4	*disabled
PEG1	  S4	*disabled
PEG2	  S4	*disabled
LID0	  S4	*enabled   platform:PNP0C0D:00

Cela sert normalement à réveiller le PC si le clavier est actionné, mais on dirait que des événements sont envoyés qui ne devraient pas être reçus... La solution évidente consiste à désactiver cette fonction (en root):

# echo XHC > /proc/acpi/wakeup
$ cat /proc/acpi/wakeup 
Device	S-state	  Status   Sysfs node
P0P1	  S4	*disabled
XHC	  S3	*disabled  pci:0000:00:14.0
HDEF	  S4	*disabled  pci:0000:00:1b.0
RP01	  S4	*disabled  pci:0000:00:1c.0
PXSX	  S4	*disabled
RP03	  S4	*disabled  pci:0000:00:1c.2
PXSX	  S5	*disabled  pci:0000:04:00.0
PXSX	  S4	*disabled  pci:0000:05:00.0
		*disabled  platform:rtsx_pci_sdmmc.0
		*disabled  platform:rtsx_pci_ms.0
PEG0	  S4	*disabled
PEGP	  S4	*disabled
PEG1	  S4	*disabled
PEG2	  S4	*disabled
LID0	  S4	*enabled   platform:PNP0C0D:00

Pour l'exécuter au boot, voici ce que j'ai fait.

J'ai d'abord édité /etc/systemd/system/disable-xhc-wakeup.service avec le contenu suivant:

[Unit]
Description=Disable XHC Wakeup

[Service]
ExecStart=/usr/local/bin/disable-xhc-wakeup

[Install]
WantedBy=multi-user.target 

Puis j'ai édité /usr/local/bin/disable-xhc-wakeup avec ce contenu:

#!/bin/sh

if grep -q XHC.*enabled /proc/acpi/wakeup ; then
  echo XHC > /proc/acpi/wakeup
fi

Et j'ai enfin activé ce nouveau service (en root):

# systemctl enable disable-xhc-wakeup.service

Le touchscreen ne fonctionne plus après un resume

Après un peu de recherche, j'ai découvert que simplement décharger et recharger le module hid_multitouch corrigeait le souci:

modprobe -r hid_multitouch
modprobe hid_multitouch

Il ne reste plus qu'à le faire de manière systématique.

Attention, beaucoup de documentation pointe vers /usr/lib/pm-utils/defaults, mais ce fichier n'est plus utilisé avec systemd.

J'ai donc créé un fichier /etc/systemd/system/reload_multitouch.service:

[Unit]
Description=Reload hid_multitouch kernel module
After=sleep.target

[Service]
Type=oneshot
ExecStart=/sbin/modprobe -r hid_multitouch ; /sbin/modprobe hid_multitouch

[Install]
WantedBy=sleep.target

Puis je l'ai activé:

# systemctl enable reload_multitouch

Et voilà !

J'ai rapporté le bug sur le bugtracker du noyau Linux donc vous pourrez suivre la résolution éventuelle !

dimanche 16 décembre 2012

Tarte aux pommes façon ma grand-mère

Voici encore une recette qui s'est transmise visuellement, façon "je l'ai vue faire et j'ai essayé et voilà", avec des quantités pas bien précises parce qu'on met un peu de ci et un peu de ça, mais ça doit être à peu près ça. Ingrédients 3 pommes un peu acides, genre Granny ou Canada un  […]

Lire la suite

mardi 9 octobre 2012

Risotto aux champignons

Ce soir, j'ai eu envie de cuisiner un peu. Je savais que j'avais du riz à risotto dans un coin, des champignons, il ne manquait que le parmesan et le vin que j'ai été chercher en passant.

Voici donc un essai qui s'est avéré bien réussi !

Lire la suite

vendredi 7 septembre 2012

Les montagnes Huangshan

Mr Cheng

Huangshan ou les montagnes jaunes Ça y est, c'est le départ de Shanghai après 4 jours bien denses. Notre plan, c'est de rejoindre Huangshan par bus (environ 6h de voyage), de dormir une nuit dans la petite bourgarde de Tangkou au pied des montagnes, de monter dans les montagnes et d'y dormir une  […]

Lire la suite

dimanche 2 septembre 2012

Shanghai: La tour Jinmao et la concession française

Des oeufs de 100 ans, miam.

Pour ce dernier jour à Shanghai, il fallait tout de même monter en haut d'une tour. On l'a fait un peu comme des pauvres: on est monté à l'hôtel Hyatt (le plus haut du monde !) pour observer la vue depuis son hall et son café. Nous sommes ensuite allés nous promener dans l'ex-concession française.  […]

Lire la suite

samedi 1 septembre 2012

Suzhou et ses jardins

Jardin de la Politique des simples sous la pluie

Une nuit et un train rapide (35 minutes) plus tard, nous voilà à Suzhou (prononcer: sou-djow), avec F et V. Connue pour ses canaux, ses jardins, son centre préservé, nous étions enchantés de quitter Shanghai pour découvrir sa campagne. En guise de campagne, c'est une véritable ville que nous avons  […]

Lire la suite

Shanghai: le jardin Yu et la vieille ville

Un plat de Dim sun

Pour ce deuxième jour, nous avons retrouvé Yué qui nous a gentiment invité dans un bon restaurant à côté du jardin Yu (juste à droite du pont en zigzag), où nous avons découvert pour la première fois les "dim sun", des sortes de ballotins de pâte avec des trucs à l'intérieur qui ont cuit  […]

Lire la suite

jeudi 30 août 2012

Shanghai: premier jour

La tour de Jinmao et le décapsuleur

Ça fait maintenant quelques jours que nous avons quitté Shanghai, mais j'ai eu du mal à trouver du Internet... J'avais envie de partager un peu de notre voyage en Chine. On débute donc avec... L'arrivée Arrivés trop tôt jeudi matin, le Maglev était encore fermé, et nous nous sommes résolus à prendre  […]

Lire la suite

- page 1 de 56