mardi 14 avril 2015

Ecran noir après une mise à jour ubuntu

Cela fait la deuxième fois, sur 2 machines différentes, et sur 2 Linux différents.  Après une simple mise à jour proposée par le logiciel de mise à jour intégré, impossible de rebooter normalement: écran noir.
La première fois, c'était sur un lubuntu, avec un PC de bureau. J'ai préféré réinstaller totalement le PC en question. Mais la deuxième fois, ce fut sur Xubuntu, et sur un portable Asus  relativement récent. Cette fois, j'ai préféré trouvé une solution ne nécessitant pas une réinstallation, et de perdre ainsi les différents profils ou logiciels déjà installés.

Voici donc ma solution, après quelques longues heures de tatonement et de recherches peu fructueuses sur le Net J'en profite tout de même pour rendre hommage à Linux pour sa modularité, et à sa communauté pour la quantité d'information disponible pour tous les publics.

Tout d'abord le contexte:

Portable Notebook Asus F200M-Bing
Xubuntu LTS 14.04.02
Date de la mise à jour fautive: 13/04/2015
Dernier kernel: linux 3.13.0.49
Précédent kernel : linux 3.13.0.39
Intel celeron N2840
VGA ValleyView Gen7

Dans cet état, mon notebook boootait normalement, sauf que j'avais un bel écran noir, et rien d'autre. Le disque dur ou le WIFI fonctionnait semble-t-il normalement. J'ai donc regardé sur le Net pour trouver une solution, avec un bagage de parfait néophyte (les informations ci-dessus ont été collectées après avoir glané différentes informations).

En résumé (et au lieu d'un compte rendu de nombreuses heures infructueuses), voici ma solution:

1- Activer le menu de Grub au démarrage.
Pour cela laisser appuyée la touche SHIFT (majuscule) pendant le boot.
Un menu en mode caractère devrait vous afficher 4 choix:
 Ubuntu
 Advanced options for Ubuntu
 Memory Test (....)
 Memory Test (.......)

2- Choisir l'option "options avancées"
Grub va ensuite vous proposer plusieurs "kernel", les derniers mis à jour logiquement. Il faut alors procéder par essais successifs, sans se poser de question. Personnellement, je les ai tous essayé. En mode recovery, tous fonctionnait. Sinon, les autres modes fonctionnaient, sauf pour le dernier kernel en date (qui est le kernel par défaut évidement).
Conclusion toute personnel: le dernier kernel en mode normal posait un problème (lapalissade tranquillisante).

3 - Supprimer le dernier kernel
en se référant à son nom, avec synaptic, en utilisant un kernel fonctionnel. L'avantage de synaptic, c'est que la suppression est automatique, et la gestion de Grub aussi semble-t-il. Il faut simplement le trouver dans les paquets déjà installés, avec le mot clé "linux-image" (avec un tiret). Après il faut le supprimer, prier, et rebooter. Pour ma part cela a fonctionné


J'avoue avoir rechercher un moyen de réparer le dernier kernel (en mode recovery), mais sans succès. Il faut savoir connaitre les limites d'un combat. Voici plusieurs pistes qui m'ont semblé prometteuses mais sans succès:

a- Réinstallation de xorg (en forçant): choux blanc.

b- Utilisation de l'installeur de driver graphique Intel, que l'on peut trouver facielement le Net. Malheureusement, cet installeur venait juste à l'instant (2 semaines avant) d'être déclaré incompatible avec ma distribution Ubuntu (14.04). C'est ballot. Les raisons de cette "deprecation" semblent lié à mon soucis, mais pas moyen de le déterminer à la lecture des posts traitant le sujet.

Pour finir, j'ai perdu beaucoup de temps à comprendre la logique de Grub (juste assez pour faire des essais). A signaler que même les raccourcis clavier CTRL-ALT-F1 ne fonctionnait pas (jusqu'à F7). En revanche, passer en aveugle la série CTRL-ALT-F1, permettait ensuite de faire un CTRL-ALT-SUPP salutaire pour rebooter relativement proprement après chaque essais infructueux de kernel dans Grub. J'ai aussi perdu du temps à modifier le paramétrage de Grub (GRUB_TERMINAL="console" et GRUB_CMDLINE_LINUX_DEFAUT="quiet")

Un grand merci à Grub, qui malgré son relativement manque d'ergonomie, m'a sauvé d'une perte totale en permettant un retour arrière.

Liens relatifs à cette problématique:

Explication de la non compatibilité de l'installateur Intel de pilote graphique pour linux

Grub et quelques explications

 Installateur (qui ne marche pas pour ma distribution)

PS: je regrette de ne pas avoir pu tester les options accessibles par la touche F6, en particulier l'option nomodeset, pour déterminer si cela aurait résolu mon soucis d'écran noir. Ce sera pour une prochaine fois:
Une belle explication de nomodeset
Une autre explication de la touche F6 et ses options

vendredi 10 avril 2015

Résoudre l'énigme "TOI+MOI+LUI=NOUS" .... en langage C

Il s'agit d'une petite énigme que les enfants s'échangent à la court de récréation (seulement les plus geek). L'énoncé est simple:

Il faut trouver les chiffres correspondant à chaque lettre de l'équation "MOI+TOI+LUI=NOUS", en faisant correspondre une et une seule lettre à chacune de ces huit lettre composant cette équation.

Par dépit vis à vis de ma fille qui m'a mis au défis, j'ai tenté de résoudre le code (cad la correspondance entre les lettres et les chiffres), en utilisant un outil informatique. J'avoue avoir perdu une bonne heure avec Excel, avant de m'apercevoir que le nombre de permutation (cad le nombre de possibilité de code différent à tester) était supérieur au million, ce qui dépasse le raisonnable dans une simple feuille de tableur.

J'ai donc refait l'exercice en langage C, pour tester une à une (de manière récursive pour le plaisir) chacune des près de 2 millions de possibilités. Pour rappel, les permutations possibles de codes différents pour résoudre l'équation se calcule comme cela: 10 x 9 x 8 x 7 x 6 x 5 x 4 x 3 (10 chiffres à répartir parmis 8 lettres, dans tous les ordres possibles). Mon erreur de débutant fut au début de confondre les combinaisons et les permutations (c'est évident après coup, et encore plus après avoir perdu une heure sur cette erreur). Pour rappel, les combinaisons de 8 chiffres parmi 10 sont seulement de 45.


Pour ceux que cela intéresse, le code est en pièce jointe, avec les fichiers de compilation sous linux.
Le résultat des courses: il existe 216 solutions à cette équation. Pour finir, je me suis amusé à étudier les combinaisons les plus prolixes parmi les 45 possibles, cette fois avec un tableur, en quelques minutes. Cela donne 18 solutions pour une seule combinaison de chiffres. Et le chiffre le plus représenté parmi les 216 solutions de code est le "1" (204 fois sur 216 tout de même). Je l'aurais parié. Mais c'est encore mieux de le prouver par la démonstration, avec un compilateur C et un tableur.

Parfaitement inutile, donc totalement indispensable.


0 1 2 3 4 5 6 7 8 9
nb de solution 216
1 1 1 1 1 1 1 1 0 0 1111111100 6
1 1 1 1 1 1 1 0 1 0 1111111010 0
1 1 1 1 1 1 0 1 1 0 1111110110 6
1 1 1 1 1 0 1 1 1 0 1111101110 0
1 1 1 1 0 1 1 1 1 0 1111011110 6
1 1 1 0 1 1 1 1 1 0 1110111110 0
1 1 0 1 1 1 1 1 1 0 1101111110 0
1 0 1 1 1 1 1 1 1 0 1011111110 0
0 1 1 1 1 1 1 1 1 0 0111111110 6
1 1 1 1 1 1 1 0 0 1 1111111001 6
1 1 1 1 1 1 0 1 0 1 1111110101 6
1 1 1 1 1 0 1 1 0 1 1111101101 6
1 1 1 1 0 1 1 1 0 1 1111011101 6
1 1 1 0 1 1 1 1 0 1 1110111101 6
1 1 0 1 1 1 1 1 0 1 1101111101 0
1 0 1 1 1 1 1 1 0 1 1011111101 0
0 1 1 1 1 1 1 1 0 1 0111111101 12
1 1 1 1 1 1 0 0 1 1 1111110011 6
1 1 1 1 1 0 1 0 1 1 1111101011 0
1 1 1 1 0 1 1 0 1 1 1111011011 12
1 1 1 0 1 1 1 0 1 1 1110111011 0
1 1 0 1 1 1 1 0 1 1 1101111011 6
1 0 1 1 1 1 1 0 1 1 1011111011 0
0 1 1 1 1 1 1 0 1 1 0111111011 6
1 1 1 1 1 0 0 1 1 1 1111100111 12
1 1 1 1 0 1 0 1 1 1 1111010111 18
1 1 1 0 1 1 0 1 1 1 1110110111 6
1 1 0 1 1 1 0 1 1 1 1101110111 6
1 0 1 1 1 1 0 1 1 1 1011110111 6
0 1 1 1 1 1 0 1 1 1 0111110111 18
1 1 1 1 0 0 1 1 1 1 1111001111 0
1 1 1 0 1 0 1 1 1 1 1110101111 6
1 1 0 1 1 0 1 1 1 1 1101101111 0
1 0 1 1 1 0 1 1 1 1 1011101111 0
0 1 1 1 1 0 1 1 1 1 0111101111 12
1 1 1 0 0 1 1 1 1 1 1110011111 0
1 1 0 1 0 1 1 1 1 1 1101011111 6
1 0 1 1 0 1 1 1 1 1 1011011111 6
0 1 1 1 0 1 1 1 1 1 0111011111 6
1 1 0 0 1 1 1 1 1 1 1100111111 6
1 0 1 0 1 1 1 1 1 1 1010111111 0
0 1 1 0 1 1 1 1 1 1 0110111111 12
1 0 0 1 1 1 1 1 1 1 1001111111 0
0 1 0 1 1 1 1 1 1 1 0101111111 0


Le paquet Kado contenant le source et les résultats.