Code source wiki de Pavé tactile inactif après mise en veille
Afficher les derniers auteurs
| author | version | line-number | content |
|---|---|---|---|
| 1 | = Réparer le pavé tactile qui ne répond plus après la veille = | ||
| 2 | |||
| 3 | Sur certains ordinateurs portables équipés d'un pavé tactile Synaptics RMI4 SMBus, le pavé tactile cesse de répondre après un réveil depuis la mise en veille. Le journal du noyau affiche les messages suivants : | ||
| 4 | |||
| 5 | {{code language="text"}} | ||
| 6 | rmi4_smbus: failed to get SMBus version number! | ||
| 7 | rmi4_smbus: Failed to resume device: -6 | ||
| 8 | {{/code}} | ||
| 9 | |||
| 10 | == Identifier le module concerné == | ||
| 11 | |||
| 12 | Pour vérifier que votre matériel est concerné lancez en mode administrateur : | ||
| 13 | |||
| 14 | {{code language="bash"}} | ||
| 15 | dmesg | grep -i touchpad | ||
| 16 | dmesg | grep -i rmi | ||
| 17 | {{/code}} | ||
| 18 | |||
| 19 | Si la seconde commande affiche des erreurs de ce type après un réveil : | ||
| 20 | |||
| 21 | {{code language="text"}} | ||
| 22 | rmi4_smbus 0-002c: failed to get SMBus version number! | ||
| 23 | rmi4_smbus 0-002c: Failed to resume device: -6 | ||
| 24 | {{/code}} | ||
| 25 | |||
| 26 | la solution décrite ici s'applique à votre situation. | ||
| 27 | |||
| 28 | == Solution == | ||
| 29 | |||
| 30 | Deux fichiers sont proposés ici : un script bash qui crée un service SystemD, et un fichier desktop pour le lancer depuis les menus. Vous pouvez les installer de deux façons : | ||
| 31 | |||
| 32 | * Soit dans le système pour tous les utilisateurs | ||
| 33 | * Soit pour votre utilisateur local uniquement | ||
| 34 | |||
| 35 | Voici le contenu des deux fichiers à créer et installer : | ||
| 36 | |||
| 37 | → **restart-touchpad-after-resume.sh** | ||
| 38 | |||
| 39 | {{code language="bash"}} | ||
| 40 | #!/bin/bash | ||
| 41 | # restart-touchpad-after-resume.sh | ||
| 42 | # | ||
| 43 | # Fix touchpad not responding after resume from suspend, | ||
| 44 | # for devices using the Synaptics RMI4 SMBus driver (rmi_smbus). | ||
| 45 | # Tested on HP EliteBook 840 G1 running AnduinOS. | ||
| 46 | # | ||
| 47 | # This script creates and enables a systemd service that reloads | ||
| 48 | # the rmi_smbus kernel module after each resume from suspend. | ||
| 49 | # | ||
| 50 | # Only runs on laptops, detected via DMI chassis type. | ||
| 51 | # Chassis types considered as laptops: 8 (Portable), 9 (Laptop), | ||
| 52 | # 10 (Notebook), 11 (Sub Notebook). | ||
| 53 | |||
| 54 | # Detect chassis type | ||
| 55 | CHASSIS=$(cat /sys/class/dmi/id/chassis_type) | ||
| 56 | |||
| 57 | # Only proceed if we are on a laptop | ||
| 58 | if [[ "$CHASSIS" =~ ^(8|9|10|11)$ ]]; then | ||
| 59 | |||
| 60 | # Create the systemd service file | ||
| 61 | cat > /etc/systemd/system/touchpad-resume.service << EOF | ||
| 62 | [Unit] | ||
| 63 | Description=Restart touchpad after resume | ||
| 64 | After=suspend.target | ||
| 65 | |||
| 66 | [Service] | ||
| 67 | Type=oneshot | ||
| 68 | # Reload the rmi_smbus module to restore touchpad functionality | ||
| 69 | ExecStart=/bin/sh -c "rmmod rmi_smbus && modprobe rmi_smbus" | ||
| 70 | |||
| 71 | [Install] | ||
| 72 | WantedBy=suspend.target | ||
| 73 | EOF | ||
| 74 | |||
| 75 | # Enable the service | ||
| 76 | systemctl enable touchpad-resume.service | ||
| 77 | echo "touchpad-resume.service installed and enabled." | ||
| 78 | |||
| 79 | else | ||
| 80 | # Not a laptop, nothing to do | ||
| 81 | echo "Not a laptop (chassis type: $CHASSIS), skipping touchpad fix." | ||
| 82 | exit 0 | ||
| 83 | fi | ||
| 84 | {{/code}} | ||
| 85 | |||
| 86 | → **restart-touchpad-after-resume.desktop** | ||
| 87 | |||
| 88 | {{code language="ini"}} | ||
| 89 | [Desktop Entry] | ||
| 90 | Type=Application | ||
| 91 | Name=Fix Touchpad After Resume | ||
| 92 | Name[fr]=Réparer le pavé tactile après la veille | ||
| 93 | Name[es]=Reparar el touchpad después de la suspensión | ||
| 94 | Name[de]=Touchpad nach Ruhezustand reparieren | ||
| 95 | Name[it]=Ripristina il touchpad dopo la sospensione | ||
| 96 | Name[zh_CN]=休眠后修复触控板 | ||
| 97 | Name[zh_TW]=休眠後修復觸控板 | ||
| 98 | Name[pt]=Reparar o touchpad após a suspensão | ||
| 99 | Name[pt_BR]=Reparar o touchpad após a suspensão | ||
| 100 | Name[nl]=Touchpad herstellen na slaapstand | ||
| 101 | Name[pl]=Napraw touchpad po uśpieniu | ||
| 102 | Comment=Fix if touchpad stops working after suspend or hibernate | ||
| 103 | Comment[fr]=Réparer si le pavé tactile ne fonctionne plus après la veille ou l'hibernation | ||
| 104 | Comment[es]=Reparar si el touchpad deja de funcionar después de la suspensión o hibernación | ||
| 105 | Comment[de]=Reparieren, wenn das Touchpad nach dem Ruhezustand nicht mehr funktioniert | ||
| 106 | Comment[it]=Ripristina se il touchpad smette di funzionare dopo la sospensione o l'ibernazione | ||
| 107 | Comment[zh_CN]=如果触控板在休眠后停止工作,请修复 | ||
| 108 | Comment[zh_TW]=如果觸控板在休眠後停止工作,請修復 | ||
| 109 | Comment[pt]=Reparar se o touchpad parar de funcionar após a suspensão ou hibernação | ||
| 110 | Comment[pt_BR]=Reparar se o touchpad parar de funcionar após a suspensão ou hibernação | ||
| 111 | Comment[nl]=Herstel als het touchpad niet meer werkt na de slaapstand of hibernatie | ||
| 112 | Comment[pl]=Napraw, jeśli touchpad przestaje działać po uśpieniu lub hibernacji | ||
| 113 | Exec=pkexec restart-touchpad-after-resume.sh | ||
| 114 | Terminal=false | ||
| 115 | Icon=input-touchpad | ||
| 116 | Categories=System; | ||
| 117 | {{/code}} | ||
| 118 | |||
| 119 | === 1. Installation dans le système (droits d'administration requis) === | ||
| 120 | |||
| 121 | Toutes les commandes suivantes sont à exécuter avec les droits d'administration. | ||
| 122 | |||
| 123 | Copier le script et le rendre exécutable : | ||
| 124 | |||
| 125 | {{code language="bash"}} | ||
| 126 | cp restart-touchpad-after-resume.sh /usr/local/bin/ | ||
| 127 | chmod +x /usr/local/bin/restart-touchpad-after-resume.sh | ||
| 128 | {{/code}} | ||
| 129 | |||
| 130 | Copier le fichier desktop : | ||
| 131 | |||
| 132 | {{code language="bash"}} | ||
| 133 | cp restart-touchpad-after-resume.desktop /usr/share/applications/ | ||
| 134 | {{/code}} | ||
| 135 | |||
| 136 | Lancer le script pour créer et activer le service : | ||
| 137 | |||
| 138 | {{code language="bash"}} | ||
| 139 | /usr/local/bin/restart-touchpad-after-resume.sh | ||
| 140 | {{/code}} | ||
| 141 | |||
| 142 | === 2. Installation dans le répertoire utilisateur (sans droits d'administration) === | ||
| 143 | |||
| 144 | Copier le script et le rendre exécutable : | ||
| 145 | |||
| 146 | {{code language="bash"}} | ||
| 147 | cp restart-touchpad-after-resume.sh $HOME/.local/bin/ | ||
| 148 | chmod +x $HOME/.local/bin/restart-touchpad-after-resume.sh | ||
| 149 | {{/code}} | ||
| 150 | |||
| 151 | Si {{code language="text"}}$HOME/.local/bin{{/code}} n'est pas dans votre PATH, ajoutez la ligne suivante à votre {{code language="text"}}~/.bashrc{{/code}} : | ||
| 152 | |||
| 153 | {{code language="bash"}} | ||
| 154 | export PATH="$HOME/.local/bin:$PATH" | ||
| 155 | {{/code}} | ||
| 156 | |||
| 157 | Copier le fichier desktop : | ||
| 158 | |||
| 159 | {{code language="bash"}} | ||
| 160 | cp restart-touchpad-after-resume.desktop $HOME/.local/share/applications/ | ||
| 161 | {{/code}} | ||
| 162 | |||
| 163 | Lancer le script pour créer et activer le service : | ||
| 164 | |||
| 165 | {{code language="bash"}} | ||
| 166 | $HOME/.local/bin/restart-touchpad-after-resume.sh | ||
| 167 | {{/code}} | ||
| 168 | |||
| 169 | == Rendre le script exécutable == | ||
| 170 | |||
| 171 | Lancer en mode administrateur: | ||
| 172 | {{code language="bash"}} | ||
| 173 | chmod +x /usr/local/bin/restart-touchpad-after-resume.sh | ||
| 174 | {{/code}} | ||
| 175 | |||
| 176 | ou pour une installation locale (en simple utilisateur) : | ||
| 177 | |||
| 178 | {{code language="bash"}} | ||
| 179 | chmod +x $HOME/.local/bin/restart-touchpad-after-resume.sh | ||
| 180 | {{/code}} | ||
| 181 | |||
| 182 | (Il faut que `~/.local/bin` existe). | ||
| 183 | |||
| 184 | Pour ajouter le répertoire au chemin des exécutables, dans votre fichier `~/.profile` ajoutez à la fin: | ||
| 185 | |||
| 186 | {{code language="bash"}} | ||
| 187 | # set PATH so it includes user's private bin if it exists | ||
| 188 | if [ -d "$HOME/.local/bin" ] ; then | ||
| 189 | PATH="$HOME/.local/bin:$PATH" | ||
| 190 | fi | ||
| 191 | {{/code}} | ||
| 192 | |||
| 193 | == Notes == | ||
| 194 | |||
| 195 | * Le module s'appelle **rmi_smbus** avec un underscore, et non **rmi4_smbus** comme affiché dans les journaux du noyau. | ||
| 196 | * Ce problème est fréquent sur les ordinateurs portables HP, Lenovo, Dell de génération 2013-2016 environ. | ||
| 197 | * Testé sur : HP EliteBook 840 G1 sous AnduinOS. |