Rechercher dans ce blog

samedi 12 juillet 2014

SONY VAIO VGN-CS21S UBUNTU 14.04 TOUCHPAD KEYBOARD SLEEP HIBERNATION PROBLEMS SOLUTIONS

Voici ce que j'ai dû faire pour que l'hibernation et la mise en veille fonctionnent sur mon sony vaio vgn-cs21s ainsi que le touchpad.




J'ai essayé toutes les solutions proposées pour réactiver le clavier au réveil mais aucune n'a fonctionné.



#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noacpi nolapic atkbd.reset"
#GRUB_CMDLINE_LINUX="atkbr.reset i8042.reset i8042.nomux=1 i8042.nopnp i8042.noloop"
#GRUB_CMDLINE_LINUX="i8042.reset i8042.nomux=1 i8042.nopnp i8042.noloop"

Pour explications commandes atkbr voir ci-dessous

J'ai essayé de passer des paramètres comme

options nvidia modeset=1 et ce genre de trucs mais rien n'a donné de bons résultats.

dans /etc/modprobe.d/nvidia-331_hybrid.conf

Solutions

Suppression du module sony-laptop

#rmmod sony-laptop

Grub < atkbr.reset

Il faut quand même passer l'option atkbr.reset au kernel

/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet atkbd.reset"


Il faut installer le driver propriétaire NVIDIA car le driver NOUVEAU ne fonctionne pas avec la mise en veille. 

Installation pilote NVIDIA


Dans "Paramètres système..." / "Logiciels et mises à jour"

Onglet "Pilotes additionnels" 

"Utilisation de NVIDIA binary driver - version 331.38 depuis nvidia-331 (propriétaire, testé)"

Script pour réinitialiser psmouse lors du réveil

Attention la commande "sleep 6" est nécessaire. Le timing a été trouvé expérimentalement. Sans ce délai d'attente ça ne fonctionne pas (je ne sais pas pourquoi). 6 secondes est le minimum qui fonctionne sur ma machine.

Dans /usr/lib/pm-utils/sleep.d




root@lunix:/usr/lib/pm-utils/sleep.d# cat 0000resetpsmouse

#!/bin/sh

resume_modules()
{
    sleep 6
    /sbin/rmmod psmouse
    /sbin/modprobe psmouse
    echo "Reloaded unloaded psmouse module."
}

case "$1" in
    thaw|resume)
        resume_modules
        ;;
    *) exit $NA
        ;;
esac


fichier : 0000resetpsmouse



Réinitialisation du touchpad en cours de session

Quelques fois en cours de session le touchpad ne répond plus correctement ou bien le clic gauche ne fonctionne plus, etc. Pas trouvé de solution très rationnelle à ce problème. J'ai bricolé un script associé à un raccourci clavier pour reloader le driver psmouse.

Script pour réinitialiser la souris : resetmouse.sh

Pour que le script fonctionne avec les droits utilisateur, il faut suid /bin/kmod

#chmod a+s /bin/kmod

rmmod et modprobe sont des soft links vers kmod.

root@lunix:/usr/local/bin# cat resetmouse.sh
#!/bin/bash
/sbin/rmmod psmouse >> /home/moi/resetmouse.log 2>&1;/sbin/modprobe psmouse >> /home/moi/.resetmouse.log 2>&1

J'ai associé le script à un raccourci clavier : Ctrl + Maj + Sterling

Les trois touches forment un alignement. Si le touchpad débloquent, je presse le raccourci et tout rendre dans l'ordre.

J'ai constaté que le touchpad devient fou lorsque je touche les touches de commandes multimédia au-dessus du clavier et également la touche "Menu".

Je n'ai pas réussi à désactiver durablement la touche "Menu", la seule solution / bricolage que j'ai trouvé est de l'utiliser comme raccourci vers une commande qui ne fait rien genre /bin/true.

Réglage de la luminosité

Avec le driver NOUVEAU le réglage de la luminosité ne fonctionnait pas.

Gnome faisait varier de 0 à 7 la valeur de

/sys/class/backlight/sony/brightness

Alors que ce qui réglait effectivement la luminosité était de 0 à 100

/sys/class/backlight/nv_backlight/brightness

Avec le pilote propriétaire NVIDIA il n'y a plus du tout de fichier dans

/sys/class/backlight

J'ai contourné le problème de la façon suivante :

Le pilote crée dans le home directory un fichier : .nvidia-settings-rc

J'ai écrit un script qui modifie les settings du pilote pour faire varier la luminosité. J'ai ensuite associé ce script à des raccourcis clavier

Script : sony_brightness.pl

root@lunix:/usr/local/bin# cat sony_brightness.pl
#!/usr/bin/perl
# Script pour ajuster la luminosité de l'écran du Sony VGN-CS21S
# L'installation du pilote propriétaire NVIDIA rend inopérant le
# dispositif de réglage basé sur /sys/class/backlight
# Je contourne le problème en modifiant le fichier de configuration
# du pilote dans $HOME
# Le pilote libre "nouveau" ne fonctionne pas avec la mise en veille.
# fmc - 2014 06
# Version 1.0

$A = shift @ARGV;
$HOME="/home/elsa-louise";
$GREP="/bin/grep";
$SED="/bin/sed";
$AWK="/usr/bin/awk";
$FILE=".nvidia-settings-rc";

if ( $A ne "+" && $A ne "-" && $A ne "0" ) {

    print "Paramètre invalide ou manquant (+ ou -) \n";
    exit 1;
}

$CURRED=`$GREP RedBrightness $HOME/$FILE | $AWK -F "=" '{print \$2}'`;
$CURGREEN=`$GREP GreenBrightness $HOME/$FILE | $AWK -F "=" '{print \$2}'`;
$CURBLUE=`$GREP BlueBrightness $HOME/$FILE | $AWK -F "=" '{print \$3}'`;
$CUR=$CURRED;
chomp $CUR;
$MAX="1";
$MIN="-1";


if ( $A eq "+" ) {
    if ( $CUR < $MAX ) {

    $CUR=$CUR + 0.1;
}
}

if ( $A eq "-" ) {
    if ( $CUR > $MIN ) {

    $CUR=$CUR - 0.1;
}

}

if ( $A eq "0" ) {

    $CUR=0;
}

`$SED -i -r -e 's/Brightness.*/Brightness=$CUR/' $HOME/$FILE`;
`/usr/bin/nvidia-settings -l`;


Trois raccourcis clavier

Ctrl + Maj + F6 /usr/local/bin/sony_brightness.pl + Pour augmenter
Ctrl + Maj + F5 /usr/local/bin/sony_brightness.pl -   Pour diminuer
 Ctrl + Maj + F7 /usr/local/bin/sony_brightness.pl 0 Pour remettre à 0 = au milieu


Utils...

nvidia-settings --query all|more
nvidia-settings --query [DPY:LVDS-0]/RedBrightness
nvidia-settings --assign "[DPY:LVDS-0]/RedBrightness=1,1"

Commandes diverses


Pour lister infos sur module chargé
modinfo psmouse

cd /sys/module/psmouse/
lister les paramètres...

Liste les inputs...
cat /proc/bus/input/devices


Pour afficher les options que le kernel a reçu au démarrage
less /proc/cmdline


xrandr

xrandr permet de faire varier la luminosité de l'écran sous X

xrandr --output LVDS-0 --brightness "N"

Commande atkbr et i8042


#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noacpi nolapic atkbd.reset"
#GRUB_CMDLINE_LINUX="atkbr.reset i8042.reset i8042.nomux=1 i8042.nopnp i8042.noloop"
#GRUB_CMDLINE_LINUX="i8042.reset i8042.nomux=1 i8042.nopnp i8042.noloop"


atkbd.extra= [HW] Enable extra LEDs and keys on IBM RapidAccess,
EzKey and similar keyboards

atkbd.reset= [HW] Reset keyboard during initialization

atkbd.set= [HW] Select keyboard code set
Format: (2 = AT (default) 3 = PS/2)

atkbd.scroll= [HW] Enable scroll wheel on MS Office and
similar
keyboards

atkbd.softraw= [HW] Choose between synthetic and real raw mode
Format: (0 = real, 1 = synthetic
(default))



This is an arcane option, only necessary on some rare devices (one of which you have). The only documentation is one line in the kernel parameters list.

The i8042 controller controls PS/2 keyboards and mice in PCs. It seems that on your laptop, both the keyboard and the touchpad are connected through that chip.

From what I understand from the option name and a brief skim of the source code (don't rely on this to write an i8042 driver!), some i8042 chips are capable of multiplexing data coming from multiple pointing devices. The traditional PS/2 interface only provides for one keyboard and one mouse; modern laptops often have a two or more of a touchpad, a trackstick and an external PS/2 plug. Some controllers follow the active PS/2 multiplexing specification, which permit up to 4 devices; the data sent by each device carries an indication of which device it comes from.

The Linux driver tries to find out whether the i8042 controller supports multiplexing, but sometimes guessing wrongly. With the i8042.nomux=1 parameter, the driver does not try to detect whether the controller supports multiplexing and assumes that it doesn't. With the i8042.reset parameter, the driver resets the controller when starting, which may be useful to disable multiplexing mode if the controller does support it but in a buggy way.
shareimprove this answer

Aucun commentaire:

Enregistrer un commentaire